понедельник, 26 марта 2012 г.

FreeBSD 9.0 on zfs root

Вышла FreeBSD 9.0 c новым установщиком, а поддержки freebsd-zfs разделов как не было так и нет. Так что ставить придется вручную.

Замечания: оперативки лучше, чтобы было много — 4Гб и больше. При нынчешних ценах это не проблема, соответственно и ставить надо amd64. Не то чтобы система не будет работать на 1 гиге оперативки и на i386 — но лучше не рисковать. Жестких дисков будет 2 и из них надо собрать RAID1 — получится сервер для небольшого офиса. SWAP-файл будет размещаться на zfs-разделе — пожертвуем возможность поковыряться в дампах swap-а в случае креша системы.

Загружаемся с LIVE-CD диска FreeBSD 9.0 и выбираем последний пункт — live cd, логинимся под root-ом.



Первое что нужно сделать — организовать место для для хранения кеша zpool.cache. Для этого позаимствуем совсем малость у оперативки.

mdmfs -s 1m md99 /boot/zfs

Небольшое отступление: Дело в том, что почти все мануалы описывают механиз экспорта и последующего импорта кеша zpool-а в установленную систему. Но в 9-тке вылезла одна особенность — после экспорта&импорта zpool начинает оперировать физическими именами разделов и соответтсвенно пул будет собраться из дисков ada0 и ada1. Проблем особых нет, но если нумерация дисков по какой-то причине измениться пул развалиться.

Для примера:

# zpool status
config:

NAME STATE READ WRITE CKSUM
rpool ONLINE 0 0 0
dev/ada0 ONLINE 0 0 0


или вот так
# zpool status
config:

NAME STATE READ WRITE CKSUM
system ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
ada0p2 ONLINE 0 0 0
ada1p2 ONLINE 0 0 0


А вот как должно быть
# zpool status
config:

NAME STATE READ WRITE CKSUM
rpool ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
gpt/rpool0 ONLINE 0 0 0
gpt/rpool1 ONLINE 0 0 0


Парадоксально, но все 3 системы ставились по одной и той же инструкции, разница лишь в том, что в 2-ух первых случаях был выполнен zpool export && zpool import

Теперь необходимо создать разделы диска. Для разбивки лучше использовать GPT. Разделы выравниваем под диски с секторами по 4К — актуально для больших дисков. Игнорирование чревато падением производительности, насколько я понял.

gpart create -s gpt ada0
gpart create -s gpt ada1
gpart add -t freebsd-boot -s 128k -a 4k ada0
gpart add -t freebsd-boot -s 128k -a 4k ada1
gpart add -t freebsd-zfs -a 4k -l rpool0 ada0
gpart add -t freebsd-zfs -a 4k -l rpool1 ada1
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada1


Далее создаем сам пул:
zpool create -O mountpoint=legacy rpool mirror /dev/gpt/rpool0 /dev/gpt/rpoll1
zpool set bootfs=rpool rpool


Дальше можно создать кучу разделов, а можно и не создавать — в любом случае все это можно изменять на лету, и если у Вас появится задача ограничить какую-нибудь директорию в чем-то это можно сделать в процессе работы системы без потерь данных. Мне больше нравиться все одним контейнером.

Создаем файл подкачки, подключаем его и отключаем проверку контрольных сумм
zfs create -V 1GB rpoll/swap
zfs set org.freebsd:swap=on rpoll/swap
zfs set checksum=off rpoll/swap


Монтируем пул в /mnt
mount -t zfs rpool /mnt

Распаковываем систему
cd /usr/freebsd-dist
cat base.txz | tar --unlink -xpJf - -C /mnt
cat kernel.txz | tar --unlink -xpJf - -C /mnt
cat lib32.txz | tar --unlink -xpJf - -C /mnt
cat ports.txz | tar --unlink -xpJf - -C /mnt
cat src.txz | tar --unlink -xpJf - -C /mnt


Включаем поддержку zfs системой:
ee /mnt/etc/rc.conf
zfs_enable="YES"


Включаем автозагрузку модуля поддержки zfs 
ee /mnt/boot/loader.conf
zfs_load="YES"


Правим fstab
ee /mnt/etc/fstab
rpool / zfs rw,noatime 0 0


Далее необходимо скопировать кеш zpoll-а в установленную систему
cp /boot/zfs/zpoll.cache /mnt/boot/zfs/

Отмонтируем zfs-разделы
zfs umount -a (возможно понадобиться ключ -f)

И перегружаемся. После перезагрузки логинимся под рутом и ставим пароль на рута
passwd root

не забываем про временную зону
tzsetup

P.S. реально статья написана для вот этого
mdmfs -s 1m md99 /boot/zfs
cp /boot/zfs/zpoll.cache /mnt/boot/zfs/
и напомнить, что сектора на больших дисках нынче по -a 4k при разбиении диска на разделы

1 комментарий:

  1. zpool create -O mountpoint=legacy rpool mirror /dev/gpt/rpool0 /dev/gpt/rpoll1
    rpoll, две буквы LL это ваши ошибки? и в последующих командах.

    ОтветитьУдалить