====== Installing FreeBSD 9.x Root on ZFS using GPT ====== ===== Creating a bootable ZFS Filesystem ===== - Boot %%FreeBSD%% Install USB Memstick - Choose %%LiveCD%% when asked - Mount Root filesystem read-writeable to prevent further problems mount -rw / - 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 - 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:** - While a [[/RootOnZFS|ZFS Swap Volume]] can be used instead of the freebsd-swap partition, crash dumps can't be saved to the ZFS Swap Volume. - 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 - Load ZFS kernel module Fixit# kldload opensolaris.ko Fixit# kldload zfs.ko - 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, ...) ===== Installing FreeBSD to the ZFS filesystem ===== - 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:** - 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). - Compression will cause some latency when accessing files on the [[/ZFS]] filesystems. Use compression on [[/ZFS]] filesystems which will not be accessed that often. - Install %%FreeBSD%% to zroot using bsdinstall - When asked about Partitioning choose "shell" - 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 - Exit shell and go back to bsdinstall to let it install your %%FreeBSD%% system exit - Make /var/empty readonly Fixit# zfs set readonly=on zroot/var/empty - chroot into /zroot Fixit# chroot /mnt - Create /etc/rc.conf Fixit# echo 'zfs_enable="YES"' >> /etc/rc.conf - Create /boot/loader.conf Fixit# echo 'zfs_load="YES"' > /boot/loader.conf Fixit# echo 'vfs.root.mountfrom="zfs:zroot"' >> /boot/loader.conf - Exit from chroot Fixit# exit - Install zpool.cache to the ZFS filesystem Fixit# cp /boot/zfs/zpool.cache /boot/zfs/zpool.cache ===== Finish install ===== - Create /etc/fstab Fixit# cat << EOF > /mnt/etc/fstab # Device Mountpoint FStype Options Dump Pass# /dev/gpt/swap0 none swap sw 0 0 EOF - Unmount all zfs filesystems Fixit# zfs unmount -a - 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 - Exit Fixit mode, and then bsdinstall. Remove the %%FreeBSD%% install DVD/Memstick and the system will boot using the ZFS root. ---- {{tag>Zfs}}