Установка FREEBSD 9 на ROOT ON ZFS с оптимизацией для дисков с 4K сектором (UPDATE)

 Старая публикация(со старого блога)

Не раз меня упрекали в том, что я не упоминаю про 4К в ZFS и вот теперь я исправляю эту ошибку.

Вся проблема в том что при установке системы на диск с 4К сектором, вызывает большие накладные расходы у контроллера того самого диска ибо система совершенно наивно считает что работает с 512B секторами и контроллеру приходится выполнять конвертацию.

По правде говоря, установка без 4К и с ним почти не отличается, но для наглядности показываю процедуры с самого начала – так легче, чем рассказывать, где именно что подправить.

Первым делом нам нужно загрузиться в «Live CD» FreeBSD 9.  Каким образом вы это сделаете, не имеет никакого значения  – хоть с DVD, хоть с Флэшки. (Последний вариант современнее) .Я же всё это ставлю в виртуалку и у меня выбор не велик.

1. Загружаемся с любого доступного носителя FreeBSD 9 и выбираем «Live CD»

freebsdboot"

2. Создаём необходимые разделы и добавляем boot запись для zfs. ( Не забудьте глянуть в dmesg — как определились диски.)

1
2
3
4
gpart create -s gpt ada0
gpart add -b 34 -s 94 -t freebsd-boot ada0
gpart add -t freebsd-zfs -l disk0 ada0
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0

3. Создаём геометрию с 4К сектором и экспортируем zfs pool.

Вот тут и творится магия оптимизации под 4К сектор. При создании ZFS пула файловая система определяет геометрию диска и в свойства пула записывает соответствующую переменную ashift. По умолчанию ashift=9, 2 в 9-й равно 512 Байтам, что и уходит в свойства пула. Нам нужно 4 Килобайта, а это 2 в 12-й степени и соответственно правильное значение для 4-х килобайтного диска будет ashift=12. Остаётся только указать при создании пула правильную геометрию диска что мы, и делаем с помощью утилиты gnop.

1
2
3
4
5
gnop create -S 4096 /dev/gpt/disk0
zpool create -o altroot=/mnt -o cachefile=/var/tmp/zpool.cache zroot /dev/gpt/disk0.nop
zpool export zroot
gnop destroy /dev/gpt/disk0.nop
zpool import -o altroot=/mnt -o cachefile=/var/tmp/zpool.cache zroot

"2block"

"freebsd_ashift_zroot"

4. Устанавливаем bootfs и настраиваем проверку контрольных сумм

1
2
zpool set bootfs=zroot zroot
zfs set checksum=fletcher4 zroot

5. Создаём файловые системы, тут полная импровизация – делаем под себя и свою задачу.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
zfs create zroot/usr
zfs create zroot/usr/home
zfs create zroot/var
zfs create -o compression=on -o exec=on -o setuid=off zroot/tmp
zfs create -o compression=lzjb -o setuid=off zroot/usr/ports
zfs create -o compression=off -o exec=off -o setuid=off zroot/usr/ports/distfiles
zfs create -o compression=off -o exec=off -o setuid=off zroot/usr/ports/packages
zfs create -o compression=lzjb -o exec=off -o setuid=off zroot/usr/src
zfs create -o compression=lzjb -o exec=off -o setuid=off zroot/var/crash
zfs create -o exec=off -o setuid=off zroot/var/db
zfs create -o compression=lzjb -o exec=on -o setuid=off zroot/var/db/pkg
zfs create -o exec=off -o setuid=off zroot/var/empty
zfs create -o compression=lzjb -o exec=off -o setuid=off zroot/var/log
zfs create -o compression=gzip -o exec=off -o setuid=off zroot/var/mail
zfs create -o exec=off -o setuid=off zroot/var/run
zfs create -o compression=lzjb -o exec=on -o setuid=off zroot/var/tmp

6. Создаём SWAP раздел размеров 4GB и отключаем проверку контрольных сумм.

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

7. Создаём симлинк на папку /home и выставляем права

1
2
3
chmod 1777 /mnt/tmp
chmod 1777 /mnt/var/tmp
cd /mnt ; ln -s usr/home home

8. Распаковываем системные файлы FreeBSD – по факту устанавливаем систему

1
2
3
4
5
sh
cd /usr/freebsd-dist
export DESTDIR=/mnt
for file in base.txz lib32.txz kernel.txz doc.txz ports.txz src.txz;
do (cat $file | tar --unlink -xpJf - -C ${DESTDIR:-/}); done

9. Копируем zpool.cache на своё место. Только не пропустите этот шаг, были случаи )

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

10. Добавляем настройки в конфигурационные файлы и создаём пустой fstab

1
2
3
4
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

11. Перезагружаемся и после удачной загрузки настраиваем систему – Timezone, root password , etc.

P.S. Если после установки, Make выводит ошибки — при попытке работы с портами, выполните

1
2
portsnap fetch update
portsnap extract

При этом будет произведена загрузка примерно 60-и мегабайт — порты.

Комментарии