====== Installing FreeBSD 9.x Root on ZFS using VTOC8 (sparc) ======
This article covers installing %%FreeBSD%% 9.x with the root file system on ZFS with bsdinstall.
===== Creating a bootable ZFS filesystem =====
**Note:**
This walkthrough assumes that a zfs mirror of two disks is created, but the instructions work equally well for a single disk or a raidz or raidz2 setup, just replace 'mirror' as needed in the examples.
- Boot the %%FreeBSD%% install CD/DVD.
- Go through the initial setup as usual.
- When the partitioning dialogue in bsdinstall comes up, choose the 'Shell' option.
- Create new VTOC8 partitioned disks, repeat this for all disks.
# sysctl kern.disks
kern.disks: cd0 da0 da1
# gpart destroy -F da0
da0 destroyed
# gpart destroy -F da1
da1 destroyed
# gpart create -s VTOC8 da0
da0 created
# gpart create -s VTOC8 da1
da1 created
- Add partitions for the zfs pools and swap. This example creates a 292GB partition for the ZFS, adapt to your case.
# gpart add -s 292G -t freebsd-zfs da0
da0a added
# gpart add -t freebsd-swap da0
da0b added
- Now duplicate this layout for each additional disk:
# gpart add -s 292G -t freebsd-zfs da1
da1a added
# gpart add -t freebsd-swap da1
da1b added
- Create the zfs pool.
Replace the 'mirror' keyword as needed, and list all disks that should be part of the pool.
# zpool create -o altroot=/mnt -O canmount=off zroot mirror da0a da1a
This will create a zpool called 'zroot' which will not be automatically mounted. The canmount property is also set to off, to avoid mounting this by accident. This zpool is only used to derive other file systems from.
Now install the boot-loader on these partitions:
- Installing boot-loader.
# zpool export zroot
# gpart bootcode -p /boot/zfsboot da0
# gpart bootcode -p /boot/zfsboot da1
# sysctl kern.geom.debugflags=0x10
kern.geom.debugflags: 0 -> 16
# dd if=/boot/zfsloader of=/dev/da0a bs=512 oseek=1024 conv=notrunc,sync
465+1 records in
466+0 records out
238592 bytes transferred in 0.244906 secs (974219 bytes/sec)
# dd if=/boot/zfsloader of=/dev/da1a bs=512 oseek=1024 conv=notrunc,sync
465+1 records in
466+0 records out
238592 bytes transferred in 0.244906 secs (974219 bytes/sec)
# zpool import -o altroot=/mnt zroot
===== Installing FreeBSD to the ZFS file system =====
- Create ZFS file system hierarchy.
The **fletcher4** algorithm should be more robust than the **fletcher2** algorithm.
# zfs set checksum=fletcher4 zroot
# zfs set atime=off zroot
# zfs create -o mountpoint=/ zroot/ROOT
You can fine-tune and create other zfs pool: check [[RootOnZFS/GPTZFSBoot/9.0-RELEASE|other guide]] for more detailed examples.
- Set booting property to this zpool
# zpool set bootfs=zroot/ROOT zroot
- Add the swap devices to fstab, so that they will automatically show up when the system starts.
# cat << EOF > /tmp/bsdinstall_etc/fstab
# Device Mountpoint FStype Options Dump Pass#
/dev/da0b none swap sw 0 0
/dev/da1b none swap sw 0 0
EOF
- Once all of the zfs file systems have been created, type 'exit' in the shell and proceed with the installation as normal.
- Once the installation is complete choose 'Exit' from the main menu.
- The next dialogue will offer the option to 'open a shell in the new system', choose this option.
- Configure zfs to load and mount the file systems automatically at boot.
# echo 'zfs_enable="YES"' >> /etc/rc.conf
# echo 'zfs_load="YES"' >> /boot/loader.conf
- Update the zpool cache file.
# zpool set cachefile=/boot/zfs/zpool.cache zroot
# exit
- To finish the installation, choose the reboot option from the dialogue, do not forget to remove the installation media from the computer.