четверг, 26 сентября 2013 г.

ZFS: root on zfs FreeBSD 9.1 или 9.2 и старше


Порой надо установить систему FreeBSD так, чтобы был зеркальный zfs-mirror, да и сделать надо это удаленно. Мне часто помогает такая схема - звонок человеку, который рядом с новым сервером с заданием: установка трех дисков на сервер и подготовка загрузочного DVD-диска. Далее, удаленный человек устанавливает по дефолту систему и заводит пользователя с gid=0, чтобы можно было удаленно получить права root, а также запускает автоматически sshd для удаленного доступа.


Далее дело техники. Остается только удаленно зайти на свежеустановленный сервер и дать следующие команды для двух оставшихся после установки дисков (ada1, ada2) чтобы создать root on zfs mirror (ada1+ada2):

gpart create -s gpt ada1
gpart add -a4k -b 34 -s 94 -t freebsd-boot ada1
gpart add -a4k -t freebsd-zfs -l disk0 ada1
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada1

и тоже самое для ada2.

Далее создаю зфс-пул из созданных ранее дисков. Указываю загрузочный пул, создаю и настраиваю зфс-разделы с заданными настройками (компрессия, возможность выполнения команд и возможностью работы файлов с заданными именами пользователей)..

zpool create -o altroot=/mnt -o 
cachefile=/var/tmp/zpool.cache zroot mirror /dev/gpt/disk*

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

zfs create zroot/var
zfs create zroot/usr
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=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


Создаю своп:

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


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

sh
mkdir /tmp/cdrom
mount_cd9660 /dev/cd0 /tmp/cdrom
cd /tmp/cdrom/usr/freebsd-dist
export DESTDIR=/mnt/zroot
for file in base.txz lib32.txz kernel.txz doc.txz ;\
 do (cat $file | tar --unlink -xpJf - -C ${DESTDIR:-/}); \
 done


Затем надо прописать в новом /etc/rc.conf следующие настройки (подправьте свои названия интерфейсов):

hostname="srv-zfs"
background_fsck="NO"
zfs_enable="YES"
ifconfig_re0="inet 192.168.0.198/24"
defaultrouter="192.168.0.254"
sshd_enable="YES"

А в новом /mnt/zroot/boot/loader.conf хорошо бы задать открытый файервол и опции загрузки системы:

zfs_load="YES"
vfs.root.mountfrom="zfs:zroot"
alias_ftp_load="YES"
alias_pptp_load="YES"
autoboot_delay="2"
net.inet.ip.fw.default_to_accept=1
net.inet.ip.fw.verbose=1
ipfw_load="YES"
ipfw_nat_load="YES"

На новом сервере нужно создать пользователя, часовой пояс и, возможно еще какие-то дополнительные настройки:

chroot /mnt/zroot/
pw useradd user -g 0 -m
passwd user
tzsetup

Затем надо создать файл /etc/fstab, выйти из режима chroot, скопировать кэш zfs-пула и задать правильные точки монтирования:

touch /etc/fstab
exit
cp /var/tmp/zpool.cache /mnt/zroot/boot/zfs/zpool.cache
zfs set mountpoint=legacy zroot
zfs set mountpoint=/tmp zroot/tmp
zfs set mountpoint=/usr zroot/usr
zfs set mountpoint=/var zroot/var

Перегрузить сервер и пользоваться!
Данная процедура работает нормально на установках системы 9.1 и 9.2.

Комментариев нет:

Отправить комментарий