In this guide I will demonstrate how you can install a fully functional full root on ZFS FreeBSD9 using a GPT scheme with a non legacy root ZFS mountpoint optimized for 4K drives. We will also use ZFS for SWAP.
You can use this as a reference guide for a single or mirror installation.
(1) Boot from a FreeBSD9 installation DVD or memstick and choose "Live CD".
(2) Create the necessary partitions on the disk(s) and add ZFS aware boot code.
a) For a single disk installation.
b) Repeat the procedure for the second drive if you want a mirror installation.
(3) Align the Disks for 4K and create the pool.
a) For a single disk installation.
b) For a mirror installation.
(4) Set the bootfs property and checksums.
(5) Create appropriate filesystems (feel free to improvise!).
(6) Add swap space and disable checksums. In this case I add 4GB of swap.
(7) Create a symlink to /home and fix some permissions.
(8) Instal FreeBSD.
(9) Copy zpool.cache (very important!!!)
(10) Create the rc.conf, loader.conf and an empty fstab (otherwise the system will complain).
Reboot, adjust time zone info, add a password for root, add a user and enjoy!!!
You can use this as a reference guide for a single or mirror installation.
(1) Boot from a FreeBSD9 installation DVD or memstick and choose "Live CD".
(2) Create the necessary partitions on the disk(s) and add ZFS aware boot code.
a) For a single disk installation.
Code:
gpart create -s gpt ada0 gpart add -b 34 -s 94 -t freebsd-boot ada0 gpart add -t freebsd-zfs -l disk0 ada0 gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0
b) Repeat the procedure for the second drive if you want a mirror installation.
Code:
gpart create -s gpt ada1 gpart add -b 34 -s 94 -t freebsd-boot ada1 gpart add -t freebsd-zfs -l disk1 ada1 gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada1
(3) Align the Disks for 4K and create the pool.
a) For a single disk installation.
Code:
gnop create -S 4096 /dev/gpt/disk0 zpool create -o altroot=/mnt -o cachefile=/var/tmp/zpool.cache zroot /dev/gpt/disk0.nop zpool export zroot gnop destroy /dev/gpt/disk0.nop zpool import -o altroot=/mnt -o cachefile=/var/tmp/zpool.cache zroot
b) For a mirror installation.
Code:
gnop create -S 4096 /dev/gpt/disk0 gnop create -S 4096 /dev/gpt/disk1 zpool create -o altroot=/mnt -o cachefile=/var/tmp/zpool.cache zroot mirror /dev/gpt/disk0.nop /dev/gpt/disk1.nop zpool export zroot gnop destroy /dev/gpt/disk0.nop gnop destroy /dev/gpt/disk1.nop zpool import -o altroot=/mnt -o cachefile=/var/tmp/zpool.cache zroot
(4) Set the bootfs property and checksums.
Code:
zpool set bootfs=zroot zroot zfs set checksum=fletcher4 zroot
(5) Create appropriate filesystems (feel free to improvise!).
Code:
zfs create zroot/usr zfs create zroot/usr/home zfs create zroot/var zfs create -o compression=on -o exec=on -o setuid=off zroot/tmp zfs create -o compression=lzjb -o setuid=off zroot/usr/ports zfs create -o compression=off -o exec=off -o setuid=off zroot/usr/ports/distfiles zfs create -o compression=off -o exec=off -o setuid=off zroot/usr/ports/packages zfs create -o compression=lzjb -o exec=off -o setuid=off zroot/usr/src zfs create -o compression=lzjb -o exec=off -o setuid=off zroot/var/crash zfs create -o exec=off -o setuid=off zroot/var/db zfs create -o compression=lzjb -o exec=on -o setuid=off zroot/var/db/pkg zfs create -o exec=off -o setuid=off zroot/var/empty zfs create -o compression=lzjb -o exec=off -o setuid=off zroot/var/log zfs create -o compression=gzip -o exec=off -o setuid=off zroot/var/mail zfs create -o exec=off -o setuid=off zroot/var/run zfs create -o compression=lzjb -o exec=on -o setuid=off zroot/var/tmp
(6) Add swap space and disable checksums. In this case I add 4GB of swap.
Code:
zfs create -V 4G zroot/swap zfs set org.freebsd:swap=on zroot/swap zfs set checksum=off zroot/swap
(7) Create a symlink to /home and fix some permissions.
Code:
chmod 1777 /mnt/tmp cd /mnt ; ln -s usr/home home chmod 1777 /mnt/var/tmp
(8) Instal FreeBSD.
Code:
sh cd /usr/freebsd-dist export DESTDIR=/mnt for file in base.txz lib32.txz kernel.txz doc.txz ports.txz src.txz; do (cat $file | tar --unlink -xpJf - -C ${DESTDIR:-/}); done
(9) Copy zpool.cache (very important!!!)
Code:
cp /var/tmp/zpool.cache /mnt/boot/zfs/zpool.cache
(10) Create the rc.conf, loader.conf and an empty fstab (otherwise the system will complain).
Code:
echo 'zfs_enable="YES"' >> /mnt/etc/rc.conf echo 'zfs_load="YES"' >> /mnt/boot/loader.conf echo 'vfs.root.mountfrom="zfs:zroot"' >> /mnt/boot/loader.conf touch /mnt/etc/fstab
Reboot, adjust time zone info, add a password for root, add a user and enjoy!!!