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
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
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!!!