Installing FreeBSD 9.x Root on ZFS using GPT

  1. Boot FreeBSD Install USB Memstick
  1. Choose LiveCD when asked
  1. Mount Root filesystem read-writeable to prevent further problems
mount -rw /
  1. Create GPT Disk
Fixit# gpart create -s gpt ad0
Note:

If the disk already contains a partitioning scheme, and this scheme would first need to be destroyed using:

Fixit# gpart destroy ad0
  1. Create the boot, swap and zfs partitions
Fixit# gpart add -s 64K -t freebsd-boot ad0
Fixit# gpart add -s 4G -t freebsd-swap -l swap0 ad0
Fixit# gpart add -t freebsd-zfs -l disk0 ad0

This creates 3 partitions. The first partition will contains the gptzfsboot loader which will be able to load /boot/loader or /boot/zfsloader (9.0-CURRENT) from a ZFS partition. The second partition is a 4 GB swap partition. The third partition is dedicated to the ZFS zpool and uses the remaining space on the disk.

Note:
  1. While a ZFS Swap Volume can be used instead of the freebsd-swap partition, crash dumps can't be saved to the ZFS Swap Volume.
  1. Install the Protected MBR (pmbr) and gptzfsboot loader
Fixit# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ad0

This may fail with an “operation not permitted” error message, since the kernel likes to protect critical parts of the disk. If this happens for you, run:

Fixit# sysctl kern.geom.debugflags=0x10
  1. Load ZFS kernel module
Fixit# kldload opensolaris.ko
Fixit# kldload zfs.ko
  1. Create ZFS Pool zroot
Fixit# zpool create zroot /dev/gpt/disk0
Fixit# zpool set bootfs=zroot zroot
Note:

zroot is the name of the ZFS Pool, it could be anything (i.e. tank, data, …)

  1. Create ZFS filesystem hierarchy

The fletcher4 algorithm should be more robust than the fletcher2 algorithm.

Fixit# zfs set checksum=fletcher4					zroot
Fixit# zfs create -o compression=on	-o exec=on	-o setuid=off	zroot/tmp
Fixit# chmod 1777 /zroot/tmp
Fixit# zfs create							zroot/usr
Fixit# zfs create							zroot/usr/home
Fixit# cd /zroot ; ln -s /usr/home home
Fixit# zfs create -o compression=lzjb 			-o setuid=off	zroot/usr/ports
Fixit# zfs create -o compression=off	-o exec=off	-o setuid=off	zroot/usr/ports/distfiles
Fixit# zfs create -o compression=off	-o exec=off	-o setuid=off	zroot/usr/ports/packages
Note:

If you use nullfs or nfs to mount /usr/ports to different locations/servers, you will also need to nullfs/nfs mount /usr/ports/distfiles and/or /usr/ports/packages.

Fixit# zfs create -o compression=lzjb 	-o exec=off	-o setuid=off	zroot/usr/src
Fixit# zfs create							zroot/var
Fixit# zfs create			-o exec=off	-o setuid=off	zroot/var/db
Fixit# zfs create -o compression=lzjb 	-o exec=on	-o setuid=off	zroot/var/db/pkg
Fixit# zfs create			-o exec=off	-o setuid=off	zroot/var/empty
Fixit# zfs create -o compression=lzjb 	-o exec=off	-o setuid=off	zroot/var/log
Fixit# zfs create -o compression=lzjb 	-o exec=on	-o setuid=off	zroot/var/tmp
Fixit# chmod 1777 /zroot/var/tmp
Note:
  1. Compression may be set to on, off, lzjb, gzip, gzip-N (where N is an integer from 1 (fastest) to 9 (best compresion ratio. gzip is equivalent to gzip-6).
  2. Compression will cause some latency when accessing files on the ZFS filesystems. Use compression on ZFS filesystems which will not be accessed that often.
  1. Install FreeBSD to zroot using bsdinstall
  1. When asked about Partitioning choose “shell”
  2. Mount filesystem to /mnt
zfs set mountpoint=/mnt zroot
zfs set mountpoint=/mnt/tmp zroot/tmp
zfs set mountpoint=/mnt/usr zroot/usr
zfs set mountpoint=/mnt/var zroot/var

zfs mount -a
  1. Exit shell and go back to bsdinstall to let it install your FreeBSD system
exit
  1. Make /var/empty readonly
Fixit# zfs set readonly=on zroot/var/empty
  1. chroot into /zroot
Fixit# chroot /mnt
  1. Create /etc/rc.conf
Fixit# echo 'zfs_enable="YES"' >> /etc/rc.conf
  1. Create /boot/loader.conf
Fixit# echo 'zfs_load="YES"' > /boot/loader.conf
Fixit# echo 'vfs.root.mountfrom="zfs:zroot"' >> /boot/loader.conf
  1. Exit from chroot
Fixit# exit
  1. Install zpool.cache to the ZFS filesystem
Fixit# cp /boot/zfs/zpool.cache /boot/zfs/zpool.cache
  1. Create /etc/fstab
Fixit# cat << EOF > /mnt/etc/fstab
# Device			Mountpoint		FStype	Options		Dump	Pass#
/dev/gpt/swap0			none			swap	sw		0	0
EOF
  1. Unmount all zfs filesystems
Fixit# zfs unmount -a
  1. Change mount points for zroot pool
Fixit# zfs set mountpoint=legacy zroot
Fixit# zfs set mountpoint=/tmp zroot/tmp
Fixit# zfs set mountpoint=/usr zroot/usr
Fixit# zfs set mountpoint=/var zroot/var
  1. Exit Fixit mode, and then bsdinstall. Remove the FreeBSD install DVD/Memstick and the system will boot using the ZFS root.

  • bernhardfroehlich/zfs.txt
  • Last modified: 2018/03/31 08:29
  • by MarkLinimon