Прикладная демонология, практические рецепты

Установка FreeBSD с корнем на ZFS

Включаем в BIOS поддержку AHCI и грузимся с установочной флешки или CDROM.
На шаге Partitioning выбираем shell.

Смотрим имена доступных дисковых устройств:

sysctl kern.disks

Заново размечаем диски:

gpart destroy -F ada0; gpart create -s gpt ada0
gpart destroy -F ada1; gpart create -s gpt ada1
gpart destroy -F ada2; gpart create -s gpt ada2
gpart destroy -F ada3; gpart create -s gpt ada3

Если эти команды обламываются с operation not permitted, то выполняем:

sysctl kern.geom.debugflags=16

На каждом диске создаем загрузочный раздел, swap и основной (который войдет в zpool):

gpart add -b 34 -s 128k -t freebsd-boot ada0
gpart add -b 34 -s 128k -t freebsd-boot ada1
gpart add -b 34 -s 128k -t freebsd-boot ada2
gpart add -b 34 -s 128k -t freebsd-boot ada3
gpart add -s 4G -t freebsd-swap -l swap0 ada0
gpart add -s 4G -t freebsd-swap -l swap1 ada1
gpart add -s 4G -t freebsd-swap -l swap2 ada2
gpart add -s 4G -t freebsd-swap -l swap3 ada3
gpart add -t freebsd-zfs -l disk0 ada0
gpart add -t freebsd-zfs -l disk1 ada1
gpart add -t freebsd-zfs -l disk2 ada2
gpart add -t freebsd-zfs -l disk3 ada3

Устанавливаем загрузчик на каждый диск:

gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada1
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada2
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada3

Подгружаем модуль ядра:

kldload zfs

Создаем доступный на запись каталог, чтобы сохранить кэш zpool:

mkdir /tmp/zfs
mount -t nullfs /tmp/zfs /boot/zfs

Создаем zpool с нужными свойствами:

zpool create -O mountpoint=legacy -O atime=off -O compression=lz4 tank mirror /dev/gpt/disk0 /dev/gpt/disk1 mirror /dev/gpt/disk2 /dev/gpt/disk3

Cоздаем необходимые файловые системы:

zfs create tank/root
zfs create -o mountpoint=/usr  tank/usr  && umount tank/usr
zfs create -o mountpoint=/var  tank/var  && umount tank/var
zfs create -o mountpoint=/tmp  tank/tmp  && umount tank/tmp
zfs create -o mountpoint=/home tank/home && umount tank/home

Устанавливаем загрузочную файловую систему:

zpool set bootfs=tank/root tank

На время установки монтируем иерархию файловых систем в /tmp:

mount -t zfs tank/root /mnt
mkdir /mnt/var /mnt/tmp /mnt/usr /mnt/home
mount -t zfs tank/usr /mnt/usr
mount -t zfs tank/var /mnt/var
mount -t zfs tank/tmp /mnt/tmp
mount -t zfs tank/home /mnt/home

Выходим из shell (<Ctrl-D>), происходит возврат в bsdinstall и сразу начинается распаковка системы.
После окончания установки выбираем пункт Live CD вместо Reboot.
Перемещаем кеш zpool в каталог /boot установленной системы:

mv /boot/zfs/zpool.cache /mnt/boot/zfs/

Редактируем конфигурационные файлы:

echo 'zfs_load="YES"' >> /mnt/boot/loader.conf
echo 'zfs_enable="YES"' >> /mnt/etc/rc.conf

Создаем пустой fstab:

touch /mnt/etc/fstab

Делаем chroot /mnt и создаем пользователей, прописываем в /mnt/etc/rc.conf сеть и т.д.
Выходим из chroot (exit), reboot, выдергиваем флешку.