Настройка загрузки ZFS с GPT-раздела во FreeBSD и создание зеркала |
[исправить] |
Во FreeBSD 8-CURRENT недавно появилась поддержка загрузки ядра с ZFS,
а сама файловая система была обновлена до версии 13. Процесс
развертывания ZFS с возможностью загрузки с нее очень простой:
1. Собираете world с LOADER_ZFS_SUPPORT и kernel с поддержкой gpart(8):
# добавляем в make.conf(5) опцию поддержки ZFS для loader(8)
echo LOADER_ZFS_SUPPORT=yes >>/etc/make.conf
# собираем world... нет, только loader(8) и загрузочный код
cd /usr/src/sys/boot
make cleandir; make cleandir
make obj depend all install
# добавляем поддержку таблиц разделов для gpart(8)
cat MYKERNEL
include GENERIC
nooption GEOM_BSD
nooption GEOM_MBR
options GEOM_PART_BSD
options GEOM_PART_MBR
options GEOM_PART_GPT
# собираем kernel
make kernel KERNCONF=MYKERNEL -C/usr/src
2. Размечаете первый диск командой gpart(8) на несколько разделов, из
которых обязательны только freebsd-boot и freebsd-zfs:
# создаем таблицу разделов типа GPT на диске ad0
gpart create -s GPT ad0
# добавляем загрузочный код, позволяющий загружаться с GPT разделов
gpart bootcode -b /boot/pmbr ad0
# создаем раздел для кода загрузки loader(8)'а с раздела GPT
gpart add -b 34 -s 256 -t freebsd-boot ad0
# записываем загрузочный код на него
gpart bootcode -p /boot/gptzfsboot -i 1 ad0
# создаем swap раздел для возможности использовать его
# в качестве dumpdev, т.к. делать kernel dump'ы на zvol'ах
# невозможно
gpart add -b 290 -s 2097152 -t freebsd-swap ad0
# создаем основной раздел для ZFS
gpart add -b 2097442 -s 232344173 -t freebsd-zfs ad0
# смотрим на результат
gpart show
=> 34 234441581 ad0 GPT (112G)
34 256 1 freebsd-boot (128K)
290 2097152 2 freebsd-swap (1.0G)
2097442 232344173 3 freebsd-zfs (111G)
3. Создаете pool для ZFS на первом разделе и загружаетесь с него:
# создаем pool с именем `h', выключенном поддержкой
# времени последнего доступа и включенным сжатием данных
zpool create -O atime=off -O compression=on h ad0p3
# создаем необходимые dataset'ы
zfs create -p -o setuid=off -o utf8only=on h/usr/home
zfs create -o sharenfs='-alldirs -webnfs' h/usr/ports
zfs create -o atime=on h/var
zfs create -o readonly=on h/var/empty
# населяем pool[1]
rsync -aHS --del --fileflags --filter 'merge migrate.rsync' / /h/
# перезагружаемся
shutdown -r now
# загружаемся *не* с ZFS в single-user режим (loader prompt)
boot -s
# меняем точку монтирования pool'а на корень
/etc/rc.d/hostid restart
/sbin/zfs set mountpoint=/ h
# перезагружаемся
/sbin/reboot
# загружаемся с ZFS (loader prompt)
load zfs
set vfs.root.mountfrom=zfs:h
boot
# добавляем в loader.conf(5) поддержку zfs и точку
# монтирования / (корня)
echo zfs_load=YES >>/boot/loader.conf
echo vfs.root.mountfrom=\"zfs:h\" >>/boot/loader.conf
4. Повторяете шаг 1 для второго диска и подсоединяете его к "зеркалу":
# Размечаем диск с учетом того, что количество блоков
# у freebsd-zfs должно быть такое же, как и на первом диске.
# В даннном примере - 484200428.
=> 34 488394988 ad0 GPT (233G)
34 256 1 freebsd-boot (128K)
290 4194304 2 freebsd-swap (2.0G)
4194594 484200428 3 freebsd-zfs (231G)
=> 34 488397101 ad1 GPT (233G)
34 256 1 freebsd-boot (128K)
290 4196417 2 freebsd-swap (2.0G)
4196707 484200428 3 freebsd-zfs (231G)
# подсоединяете его к pool'у как элемент зеркала
# (не перепутайте с *add*)
zpool attach h ad0p3 ad1p3
# смотрим на результат
zpool status
pool: h
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
h ONLINE 0 0 0
mirror ONLINE 0 0 0
ad0p3 ONLINE 0 0 0
ad1p3 ONLINE 0 0 0
errors: No known data errors
Примечание: Тест проводился на 14 версии и с использованием
вот этого патча - http://pastebin.com/f3d2089f3
[1] пример migrate.rsync:
exclude .ccache
exclude /h
exclude /dev
exclude /nfs
exclude /tmp
exclude /var/emtpy
exclude /var/run
Стоит не забыть потом создать эти директории в /h с соответствующими правами
на них. В частности без /dev система не загрузится.
|
|
|
|
Раздел: Корень / Администратору / Система / Диски и файлы / Файловые системы |
1, Leo (??), 22:58, 23/11/2008 [ответить]
| +/– |
Напишите, пожалуйста, как поставить 7-ку на флэшку (da0s1a - UFS2 - /boot only), а всё остальное - на ZFS - raidz - ad0,ad1,ad2,ad3 ?
Спасибо
| |
|
2, abigor (?), 02:46, 24/11/2008 [^] [^^] [^^^] [ответить]
| +/– |
а смысл в таком? да и не сложно там если быть точно, я вижу так, ставишь ее на флеху полностью, а потом выносишь все разделы кроме корня на zfs
| |
3, iZEN (ok), 11:34, 25/11/2008 [^] [^^] [^^^] [ответить] | +/– | Поставить FreeBSD на флэшку 1 Разметить флэшку На всё пространство fdisk -BI... большой текст свёрнут, показать | |
|
4, ш (?), 11:19, 05/10/2009 [^] [^^] [^^^] [ответить]
| +/– |
ваша вот это cp разименует все хардлинки, переносить нужно дампом или таром
| |
|
|
|