====== Установка FreeBSD на ZFS ====== ===== Вступление ===== Задача: установить ОС FreeBSD-9.2RC3. Проводим подготовительный этап: загружаем образ флэшки с сайта и выполняем команду: delta# dd if=имя_образа of=/dev/da0 bs=1M После чего устройство /dev/da0 становится загрузочной флэшкой с нашей системой. Грузимся с нее и выбираем режим LiveCD. ===== Разметка диска ===== Установку будем выполнять на жесткий диск --- устройство ada1. Первый этап - проверим, что диск пуст командой root@# gpart show Далее создадим разметку: root@# gpart create -s GPT ada1 Теперь можно создавать разделы. У нас их будет три: первый --- это efi-раздел, второй --- swap, а на третьем будет размещена собственно система. root@# gpart add -t efi -s 100M -b 40 ada1 Опция -s определяет размер раздела. Размер efi-раздела должен быть не более 2G. Опция -b задает смещение от начала разметки диска. root@# gpart add -t freebsd-swap -s 2G ada1 Под swap обычно выделяют место, равное 1.5 размерам оперативной памяти, но нам столько не нужно --- ограничиваемся аппендиксом в 2G. root@# gpart add -t freebsd-zfs ada1 Все остальное отводим под пул zfs. В результате получаем следующее: root@# gpart show ada1 => 34 351651821 ada1 GPT (167G) 34 1024 1 freebsd-boot (512K) 1058 4194304 2 freebsd-swap (2.0G) 4195362 347456493 3 freebsd-zfs (165G) Следующий этап --- записать загрузчик efi. root@# newfs_msdos -F 32 -c 1 /dev/ada1p1 root@# mount -t msdosfs /dev/ada1p1 /mnt root@# mkdir -p /mnt/EFI/BOOT root@# cp /boot/boot1.efi /mnt/EFI/BOOT/BOOTX64.efi root@# umount /mnt Чтобы это работало, в BIOS необходимо отключить SecureBoot. Подробнее про efi-раздел можно узнать в справке по efi((man efi)), особенно если есть необходимость использовать загрузчики для других систем. На этом работа с утилитой gpart заканчивается. ===== Создание пула ZFS ===== Перемонтируем корневой раздел текущей системы в режим rw((Если установка системы производится с cd, то потребуется больше телодвижений: root@# mdconfig -a -t swap -s 1g -u md2 root@# newfs -U /dev/md2 root@# mount /dev/md2 /media root@# mount_unionfs /media /boot )): root@# mount -o rw /dev/ufs/FreeBSD_Install / Это нужно для того, чтобы при создании нового пула zfs кэш-файл с информацией о пуле мог быть записан в файл /boot/zfs/zpool.cache. Далее загружаем модуль zfs: root@# kldload zfs Теперь собственно создаем наш пул. Назовем его system. root@# zpool create -o failmode=continue -O checksum=sha256 -m /mnt system /dev/ada1p3 root@# zpool set bootfs=system system В качестве устройства для пула мы используем /dev/ada1p3 - раздел freebsd-zfs. Последняя команда делает раздел загрузочным. Теперь создаем разделы пула: root@# zfs create system/var root@# zfs create system/tmp root@# zfs create system/usr root@# zfs create system/var/db root@# zfs create system/var/cache root@# zfs create system/var/empty root@# zfs create system/var/log root@# zfs create system/var/mail root@# zfs create system/var/tmp root@# zfs create system/usr/ports root@# zfs create system/usr/ports/distfiles root@# zfs create system/usr/src root@# zfs set compression=gzip system/usr/src Не забываем изменить права доступа к tmp: root@# chmod 1777 /mnt/tmp /mnt/var/tmp ===== Установка системы ===== Теперь можно переходить собственно к установке системы в созданный zfs-пул. Делаем это командой bsdinstall. root@# setenv DISTRIBUTIONS "base.txz doc.txz kernel.txz lib32.txz src.txz" Это мы задали набор, который будем устанавливать. Полный список лежит в /usr/freebsd-dist. Теперь установка: root@# bsdinstall distextract Затем сразу выполняем некоторые настройки, например имя машины: root@# bsdinstall hostname сетевые настройки: root@# bsdinstall netconfig устанавливаем пароль суперпользователя: root@# bsdinstall rootpass добавляем пользователей: root@# bsdinstall adduser и так далее. В принципе, все это можно сделать потом, загрузившись в свежеустановленную систему. Еще 3 момента по настройке: Создаем, например, утилитой ee, файл /mnt/boot/loader.conf минимально следующего содержания: root@# cat /mnt/boot/loader.conf zfs_load="YES" vfs.root.mountfrom="zfs:system" Здесь system --- это имя нашего пула zfs. Добавляем в /mnt/etc/rc.conf строчку zfs_enable="YES": root@# echo 'zfs_enable="YES"' >> /mnt/etc/rc.conf Наконец, настраиваем монтирование swap-раздела. Сначала узнаем его метку из вывода команды root@# glabel list ada1p2 В нашем случае --- это gptid/e3ff6420-1263-11e3-8849-14dae9b34088. Теперь создаем файл /mnt/etc/fstab: root@# echo '/dev/gptid/e3ff6420-1263-11e3-8849-14dae9b34088 none swap sw 0 0' >> /mnt/etc/fstab ===== Последние штрихи ===== Изменяем точки монтирования файловых систем: root@# zfs set mountpoint=legacy system root@# zfs set mountpoint=/usr system/usr root@# zfs set mountpoint=/tmp system/tmp root@# zfs set mountpoint=/var system/var Убеждаемся, что ничего не забыли, посмотрев на вывод команды root@# zfs list Напоследок, сделаем еще так: root@# zfs set readonly=on system/var/empty Копируем кэш пула в нашу систему: root@# zpool export system && zpool import system root@# cp /boot/zfs/zpool.cache /mnt/boot/zfs/ Все, можно загружаться в нашу только что установленную систему!