Содержание
Установка 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-раздел можно узнать в справке по efi1), особенно если есть необходимость использовать загрузчики для других систем.
На этом работа с утилитой gpart заканчивается.
Создание пула ZFS
Перемонтируем корневой раздел текущей системы в режим rw2):
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/
Все, можно загружаться в нашу только что установленную систему!
root@# mdconfig -a -t swap -s 1g -u md2 root@# newfs -U /dev/md2 root@# mount /dev/md2 /media root@# mount_unionfs /media /boot