FreeBSD 9: установка на ZFS
- Просмотров: 4168
- Комментариев: 0
- Подписаться на обновления
- Печатать
- Поделиться
С момента, когда я узнал о особенностях ZFS прошло не так много времени (я и раньше знал о существовании данной файловой системы, но на "существовании" мои познания заканчивались)... Хотя я уже успел перевести свой домашний сервер на эту файловую систему.
Миграция прошла фактически без проблем (руководствовался статьями Удалённая миграция с UFS на ZFS и Installing FreeBSD Root on ZFS (Mirror) using GPT и собственным опытом), но эта заметка несколько о ином...
Мне нужно было поддержать советом человека, которы будет устанвливать FreeBSD 9 на ZFS. Дабы не полагаться на память я взял статью Installing FreeBSD 9.0 (or later) Root on ZFS using GPT и решил откатать процедуру на виртуальной машине... Все оказалось не так гладко, как написано... Точнее все работает, но с некоторыми оговорками. Так что предлагаю, пусть не совсем "свой", но адаптированный мной метод установки. (В большинстве случаев шаги будут совпадать с оригиналом статьи, но на русском, отличия я буду указывать)
Сразу оговорюсь, что использовать мы будем не MBR, а GPT разметку диска. Обусловлено это тем, что FreeBSD нумерацию дисков определяет во время загрузки. Если мы удаляем-добавляем диск на сервер, то нумерация может поменяться (при использовании MBR) и пул хранения данных перестает работать и начинает сходить с ума. При использовании GPT мы оперируем не номерами дисков, а метками (записаны на диск), поэтому путаницы не возникает. Но это так, лирическое отступление-объяснение...
Перейдем наконец к установке. Берем загрузочный диск (CD, DVD, USB), загружаемся...
Теперь выбираем не "Install", а "Shell" и попадаем в оболочку UNIX
Нужно создать разметку диска (я буду описывать использование одного диска, это имеет мало смысла, но дает простор для творчества в дальнейшем, также укажу отличия, для использования 2 дисков в режиме зеркала). Делается это утилитой gpart
gpart destroy -F ada0 # уничтожаем текущую разметку
gpart create -s gpt ada0 # создаем таблицу разметки
gpart add -s 222 -a 4k -t freebsd-boot -l boot0 ada0 # создаем загрузочный раздел
gpart add -s 2g -a 4k -t freebsd-swap -l swap0 ada0 # создаем область подкачки 2Gb
gpart add -a 4k -t freebsd-zfs -l disk0 # остальное место отводим под файловую систему
# далее нужно записать загрузочный код
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0
Если у нас 2 диска, то для второго (ada1 скажем) нужно проделать все тоже самое (включая запись загрузочного кода) с тем отличием, что метки будут: boot1, swap1, disk1
Теперь нужно загрузить модули ядра для работы с ZFS
kldload opensolaris
kldload zfs
Теперь можно приступать к созданию пула хранения:
# при использовании одного диска
zpool create -o altroot=/mnt -O canmount=off zroot /dev/gpt/disk0
# при использовании зеркалирования на 2 диска
zpool create -o altroot=/mnt -O canmount=off zroot mirror /dev/gpt/disk0 /dev/gpt/disk1
# простомтерь статус после создания
zpool status -v
Создаем и настраиваем файловые системы для нашего сервера
zfs set checksum=fletcher4 zroot # устанавливаем алгоритм проверки целостности
zfs set atime=off zroot # отключаем обновление времени доступа при чтении
# нарезаем файловые системы
zfs create -o mountpoint=/ zroot/ROOT
zfs create -o exec=on -o setuid=off zroot/tmp
chmod 1777 /mnt/tmp
zfs create zroot/usr
zfs create zroot/usr/local
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 zroot/usr/obj
zfs create zroot/var
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 exec=on -o setuid=off zroot/var/tmp
chmod 1777 /mnt/var/tmp
zfs create zroot/home
На этом подготовка файловой структуры закончена, вводим последнюю команду
exit
Теперь проводим установку системы. Разметку выбираем в ручном режиме (shell) и выходим - мы ее уже сделали. Когда инсталяция закончена нам предлагают перезагрузку или открыть шел в новой системе. Открываем шел - завершим настройку.
Активируем область подкачки (я использовал редактор vi, но можно и иначе) в файле /tmp/bsdinstall_etc/fstab для каждой области подкачки создаем запись вида:
/dev/gpt/swap0 none swap sw 0 0
Монтируем devfs (возможно это надо сделать до активации области подкачки, не помню)
mount -t devfs devfs /dev
Добавляем загрузку модулей ZFS в конфигурационные файлы
echo 'zfs_enable="YES"' >>/etc/rc.conf
echo 'zfs_load="YES"' >>/boot/loader.conf
Размонтируем файловую систему и назначаем новые точки монтирования
zfs unmount -a
# вероятно тут будет выдана ошибка, тогда используем команду: umount -f /mnt
zpool set bootfs=zroot/ROOT
zfs set mountpoint=/ zroot/ROOT
zfs set mountpoint=/zroot zroot
zfs set mountpoint=/tmp zroot/tmp
zfs set mountpoint=/usr zroot/usr
zfs set mountpoint=/var zroot/var
zfs set mountpoint=/home zroot/home
zfs set readonly=on zroot/var/empty
Теперь пора затаить дыхание и перезагрузить сервер.
P.S. - в статье, что я указывал выше, есть пункт экспорта пула, но после экспорта система не загружается, пока не сделашь импорт... поэтому я этот сомнительный шаг упустил.