За последние время тема уже наверное успела стать небольшим баяном, как в англоязычной части так и в русскоязычной, и процесс не описал наверное уже только ленивый, но все одно напишу и я авось устанавливал, систему с загрузкой сразу с ZFS и к тому же на новую схему разделов GPT так что сделаю полное описание, вдруг кому поможет.
Исходные условия имеем десктоп с 2мя Тбайтными винчестерами,
загрузочную флешку изготовленную по методу описанному парой постов раньше, ну и соответственно желание установить FreeBSD-СURRENT (для более ранних систем способ вряд ли применим, ну может быть для 7.1) на эту машину с загрузкой с ZFS раздела, итак приступим.
Загружаемся с флешки, благо сейчас это поддерживают наверное все материнские платы, для этого надо или включить данную опцию в биосе, часть становится доступной только если флешку уже была вставлена до начала загрузки, или нажать что нибудь вроде F8, и выбрать нужный девайс в загрузочном меню, так же зависит от биоса. Да и флешка тут не принципиальна можно грузится со старого диска или по PXE, или с
СД с образа livefs, просто у меня СДпривода не было, а с сетью тоже как то не заладилось.
После, надеюсь, успешной загрузки сначала размечаем диски, я выбрал схему с разделом для системы в 27Гб, разделом своп 2Гб, и остальное под данные. Решение разделить систему и данные в принципе ни чем не обосновано, просто паранойя вдруг все рухнет, а так может выйдет хоть что то реанимировать :) Процесс разбивки с новым gpart прост до безобразия
# gpart create -s GPT da4
ad4 created
# gpart bootcode -b /boot/pmbr da4
da4 has bootcode
# gpart add -b 34 -s 128 -t freebsd-boot da4
da4p1 added
# gpart bootcode -p /boot/gptzfsboot -i 1 da4
# gpart add -b 128 -s 60000000 -t freebsd-zfs da4
da4p2 added
test# gpart add -b 60000162 -s 4000000 -t freebsd-swap da4
da4p3 added
# gpart add -b 64000162 -s 1889524973 -t freebsd-zfs da4
da4p4 added
Так же разбиваем второй диск, в моем случае это da6, как видно в примере на диски сразу же записывается загрузчик способный загрузить систему с ZFS раздела, записал на оба, так как реализую зеркало, но дергать диски пока не пробовал решил потренироваться для начала на виртуалке. После разбивки обоих дисков на разделы, у нас получится, что то похожее на это
> gpart show
=> 34 1953525101 ad4 GPT (932G)
34 128 1 freebsd-boot (64K)
162 60000000 2 freebsd-zfs (29G)
60000162 4000000 3 freebsd-swap (1.9G)
64000162 1889524973 4 freebsd-zfs (901G)
=> 34 1953525101 ad6 GPT (932G)
34 128 1 freebsd-boot (64K)
162 60000000 2 freebsd-zfs (29G)
60000162 4000000 3 freebsd-swap (1.9G)
64000162 1889524973 4 freebsd-zfs (901G)
=> 34 3905340 da0 GPT (1.9G)
34 128 1 freebsd-boot (64K)
162 2000000 2 freebsd-ufs (977M)
2000162 1905212 - free - (930M)
После этого создаем ZFS POOL'ы и соответственно разделы на них
# zpoll create system mirror ad4p2 ad6p2
# zpoll create data mirror ad4p4 ad6p4
# zfs create system/usr
....
# zfs create data/home/andrey
Да система должна быть собрана с опцией
LOADER_ZFS_SUPPORT=yes в
make.conf, если это не так то надо исправить это
# echo LOADER_ZFS_SUPPORT=yes >>/etc/make.conf
собираем loader и загрузочный код
# cd /usr/src/sys/boot
# make cleandir; make cleandir
# make obj depend all install
Так как процедура требует наличия исходных текстов, то об этом лучше позаботится заранее, я сделал это когда изготавливал флешку, и да не забудьте прописать эту опцию в уже установленной системе, а то есть шанс потренироваться в ее востановлении после первой же пересборки мира, и перезагрузки.
Потом правим файлы
/boot/loader.conf, /etc/rc.conf и
/etc/fstab
> cat /boot/loader.conf
zfs_load="YES"
vfs.root.mountfrom="zfs:system"
> cat /etc/rc.conf
ifconfig_DEFAULT=DHCP
hostname=desk.local
zfs_enable="YES"
sshd_enable="YES"
> cat /etc/fstab
#/dev/da0p2 / ufs ro 1 1
/dev/ad4p3 none swap sw 0 0
/dev/ad6p3 none swap sw 0 0
еше
советуют проверить существует ли файл boot/zfs/zpool.cache и если такового нет, то создать его следующим способом
# mkdir /boot/zfs
# zpool export you_pool && zpool import you_pool
# cp /boot/zfs/zpool.cache /you_pool/boot/zfs
Но например у меня все было нормально и так так что не проверял.
Ну вот в принципе и все копируем систему на новое место, и задаем точки монтирования для созданных ZFS разделов.
# tar cf - --one-file-system * | tar xpf - -C /mnt
# zfs set mountpoint=legacy system
# zfs set mountpoint=/usr system/usr
...
# zfs set mountpoint=/home/andrey data/home/andrey
# zpool set bootfs=system system
Ну вот вроде и все можно набрать команду
reboot и компьютер мирно перезагрузится в уже новую систему с корневым разделом на ZFS, и можно будет увидеть примерно такой вывод команды df
> df -h
Filesystem Size Used Avail Capacity Mounted on
system 28G 486M 27G 2% /
devfs 1.0K 1.0K 0B 100% /dev
data 882G 0B 882G 0% /data
data/home 882G 0B 882G 0% /home
data/home/andrey 882G 128K 882G 0% /home/andrey
system/root 27G 5.3M 27G 0% /root
system/tmp 27G 0B 27G 0% /tmp
system/usr 28G 245M 27G 1% /usr
system/var 27G 128K 27G 0% /var
Ну и напоследок несколько не вредных рекомендаций, та корневая система с которой вы производите установку должна быть смонтирована в режиме rw, в
некоторых источниках вместо команды # zfs set mountpoint=legacy you_pool рекомендуется #zfs set mountpoint=/ you_pool но последний вариант у меня приводил к куче ошибок и последующие команды работы с ZFS не функционировали, а выдавали ошибки.
Так же ещё несколько полезных команд, если у вас уже есть размеченные ZFS разделы то их можно подключить с помощью команды
zpool import -a , смонтировать все имеющиеся разделы
zfs mount -a, но вообще то врядли кому понадобится но вдруг, убить пул
zpool destroy you_pool после этой операции, как я понял данные будет востановить если и возможно то крайне проблематично, так что действуйте обдуманно :)
Некоторые советуют сначала устанавливать систему на один диск, а потом подключать второй, но по моему это не совсем оптимально, ибо устанавливаем мы все равно с какого то носителя, так зачем лишние движения :)
Ну и в итого несколько доводов, за то а нафига оно вообще все нужно, жили как то и без этого. Во первых и наверное самое главное ZFS обещает нам высокую надежность и отсутствие необходимости применения fsck а на дисках доступных уже сейчас рядовому пользователю эта процедура может затянутся на ощутимое время. Во вторых практически не надо думать о размере разделов, ибо все место пула доступно всем разделам, можно ограничить квотами (с этим вроде были проблемы пока не уточнял), можно создавать шифрованные разделы, и менять свойства разделов на лету, вроде как плюсы пока закончились, из минусов сырость технологии, не полная реализация функций, как говорят требовательность к ресурсам, хотя на свежей системе, без нагрузки этого не видно, вот шапка top с машины с 1 ssh сессией
last pid: 1273; load averages: 0.00, 0.00, 0.00 up 0+01:05:51 02:14:25
23 processes: 1 running, 22 sleeping
CPU 0: 0.0% user, 0.0% nice, 0.0% system, 0.0% interrupt, 100% idle
CPU 1: 0.0% user, 0.0% nice, 0.0% system, 0.0% interrupt, 100% idle
Mem: 14M Active, 2340K Inact, 71M Wired, 120K Cache, 2371M Free
Swap: 3906M Total, 3906M Free
Пока и все, в ходе эксплуатации ещё чего придумается, ну если кому интересно спрашивайте, авось все равно планирую ещё потренироваться на виртуалке, ибо пока ставил понял что все не совсем тривиально, и процесс таит подводные камни.
UPD: По итогам
обсуждения на форуме FreeBSD пришел к выводу что статья полностью актуальна только для FreeBSD-CURRENT, так как FreeBSD 7.х хотя и поддерживает gpt но похоже не поддерживает загрузку сразу с ZFS по крайней мере файла
/boot/gptzfsboot там просто нет, хотя загрузчик для GPT схемы есть, тут напрашивается 2 решения либо просто создать загрузочный boot на ufs, либо попробовать выяснить в рассылки почему нет
gptzfsboot для второй задачи, мой уровень английского слишком слаб :(