Установка FreeBSD 9.X на файловую систему ZFS

Решил оставить памятку по установке девятой ветки FreeBSD на файловую систему ZFS. Инструкций по установке в инете достаточно много, но почему-то все авторы ставят zfs на разделы диска gpt. Мое мнение — это совершенно не нужно, в случае если Вы не планируете использовать на диске другие файловые системы, помимо ZFS. 

Процессы скачивания и записи дистрибутива я описывать не буду.

Загружаемся с дистрибутва и выбираем в инсталляторе LiveCD .

Создаем файловую систему (в данном примере создается зеркало, на базе двух SATA-дисков ada0, ada1, но ни кто Вам не мешает создать файловую систему по вашему усмотрению). Создаем с оптимизацией под диски с сектором 4K

gnop create -S 4096 /dev/ada0
gnop create -S 4096 /dev/ada1
zpool create zroot mirror ada0.nop ada1.nop
zpool set bootfs=zroot zroot
zpool export zroot
gnop destroy /dev/ada0.nop
gnop destroy /dev/ada1.nop
zpool import -o cachefile=/var/tmp/zpool.cache zroot

Здесь система выдаст ошибку монтирования : Unable mount /zroot : read-only filesystem. Это нормально, игнорируем и продолжаем далее.

zfs set mountpoint=/mnt zroot
zfs mount -a
zfs set atime=off zroot
zfs create zroot/usr
zfs create zroot/usr/home
cd /mnt
ln -sf usr/home home
zfs create zroot/usr/ports
zfs create zroot/usr/src
zfs create zroot/usr/obj
zfs create zroot/var
zfs create zroot/tmp
chmod 1777 /mnt/tmp

Несколько слов о структуре каталогов, которую мы создаем. Я специально не делаю разделов с компрессией (как это рекомендуют во многих источниках), так как в наше время c текущей стоимостью и размерами дисков, выигрыш из-за компрессии разделов ports и src, будет несущественен, по сравнению с общим объемом дисковой подсистемы, но при этом мы будем тратить дополнительное процессорное время на чтение из данных разделов. Сильно озабоченные безопасностью могут дополнительно поиграться с атрибутами exec и setuid=off на разделах.

Создаем SWAP раздел (в примере на 4 гигабайта) :

zfs create -V 4G zroot/swap
zfs set org.freebsd:swap=on zroot/swap
zfs set checksum=off zroot/swap

Разворачиваем систему из дистрибутива :

sh
cd /usr/freebsd-dist
export DESTDIR=/mnt
for file in `ls -1 *.txz`;
do (cat $file | tar --unlink -vxpJf - -C ${DESTDIR}); done

Копируем zpool.cache в /boot/zfs

cp /var/tmp/zpool.cache /mnt/boot/zfs/zpool.cache

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

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

Назначаем точки монтирования (здесь будет стоять ругань системы на невозможность монтирования в новые точки, не обращаем внимание, все так и должно быть):

cd /
zfs set mountpoint=legacy zroot
zfs set mountpoint=/tmp zroot/tmp
zfs set mountpoint=/usr zroot/usr
zfs set mountpoint=/var zroot/var
zfs umount -a

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

sysctl kern.geom.debugflags=0x10
dd if=/boot/zfsboot of=/dev/ada0 count=1
dd if=/boot/zfsboot of=/dev/ada1 count=1
dd if=/boot/zfsboot of=/dev/ada0 skip=1 seek=1024
dd if=/boot/zfsboot of=/dev/ada1 skip=1 seek=1024

Reboot и пытаемся загрузиться с установленной системы. Если все было сделано правильно, система загрузится без проблем. В случае замены одного из дисков в зеркале, последнюю операцию надо будет повторить, для инициализации загрузчика на новом диске.

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *