Содержание
Ручная установка FreeBSD на ZFS mirror с использованием mfsbsd
Введение
Установка FreeBSD это довольно таки простая задача, и ее можно выполнить разными способами. В данной статье мы рассмотрим возможность удаленной установки при помощи ssh. Этот вариант я предпочитаю потому что, при установки системы на ZFS обычно приходится вводить очень много длинный команд и это гораздо проще сделать при помощи copy/paste.
Устанавливать будем на ZFS mirror. За основу взята статья Installing FreeBSD Root on ZFS using GPT.
Так же потребуется загрузочная флешка с mfsbsd
Установка
Загружаемся с mfsbsd, настраиваем сетевое подключение и логинемся по ssh
Разметка диска
Создаем схему GPT на обоих дисках:
gpart create -s gpt ada0 gpart create -s gpt ada1
Теперь необходимо сделать диски загрузочными:
- UEFI boot:
gpart add -a 4k -s 800K -t efi ada0 gpart add -a 4k -s 800K -t efi ada1 gpart bootcode -p /boot/boot1.efifat -i 1 ada0 gpart bootcode -p /boot/boot1.efifat -i 1 ada1
- Legacy boot:
gpart add -b 40 -s 512k -t freebsd-boot ada0 gpart add -b 40 -s 512k -t freebsd-boot ada1 gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0 gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada1
Создаем два раздела на каждом из дисков. Первый раздел размером в 4Gb под swap, а все оставшееся место отдаем под ZFS.
gpart add -a 1m -s 4G -t freebsd-swap -l swap0 ada0 gpart add -a 1m -t freebsd-zfs -l disk0 ada0 gpart add -a 1m -s 4G -t freebsd-swap -l swap1 ada1 gpart add -a 1m -t freebsd-zfs -l disk1 ada1
Если на свервере установлено мало оперативной памяти, то можно подключить один из только что созданых swap разделов.
swapon /dev/gpt/swap0
Создание ZFS пула
Создаем пул из двух дисков
zpool create -o cachefile=/boot/zfs/zpool.cache -o altroot=/mnt zroot /dev/gpt/disk0 /dev/gpt/disk1
При желании можно включить lz4 компрессию пула:
zfs set compress=on zroot
Руутовую фс ограничиваем в 1Gb, помечаем ее как загрузочную и монтируем в /mnt:
zfs create -o mountpoint=none zroot/ROOT zfs create -o mountpoint=/ -o canmount=noauto -o quota=1G zroot/ROOT/default mount -t zfs zroot/ROOT/default /mnt zpool set bootfs=zroot/ROOT/default zroot
zfs set checksum=fletcher4 zroot
ФС для временных файлов размером в 5Gb:
zfs create -o compression=on -o exec=on -o setuid=off -o mountpoint=/tmp -o quota=5G zroot/tmp
/usr ограничиваем 30Gb, но фс для домашних директорий создаем без ограничений по размеру:
zfs create -o mountpoint=/usr -o quota=30G zroot/usr zfs create -o mountpoint=/usr/home zroot/home 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
/var
zfs create -o mountpoint=/var -o quota=10G 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 compression=lzjb -o exec=on -o setuid=off zroot/var/tmp
Настройка разрешений для директорий с временными файлами и cсылка на домашнюю директорию пользователей.
ln -s /usr/home /mnt/home chmod 1777 /mnt/tmp chmod 1777 /mnt/var/tmp
Установка системы
Для установки нам необходимо скачать два файла base.txz и kernel.txz
cd /tmp/ fetch http://ftp.ru.freebsd.org/pub/FreeBSD/releases/amd64/12.1-RELEASE/base.txz fetch http://ftp.ru.freebsd.org/pub/FreeBSD/releases/amd64/12.1-RELEASE/kernel.txz
Разархивируем содержимое файлов в руутовую фс:
cd /mnt tar xvJf /tmp/base.txz tar xvJf /tmp/kernel.txz rm /tmp/*.txz
Заключительная настройка
Включаем поддержку ZFS:
echo 'zfs_load="YES" \ vfs.root.mountfrom="zfs:zroot/ROOT/default"' >> boot/loader.conf echo 'zfs_enable="YES"' >> etc/rc.conf
Настройка сети и включение ssh:
echo 'hostname="test"\ ifconfig_em0="DHCP"\ sshd_enable="YES"' >> etc/rc.conf
Подключаем разделы для swap:
cat > etc/fstab <<EOF /dev/gpt/swap0 none swap sw 0 0 /dev/gpt/swap1 none swap sw 0 0 EOF
Задаем пароль для root-а и создаем дополнительного пользователя:
chroot /mnt passwd pw useradd -n admin -g wheel -d /usr/home/admin -m -s /bin/sh passwd admin exit
Последний штрих:
cp /boot/zfs/zpool.cache boot/zfs/ cd ~ zpool export zroot
Теперь система готова к загрузке:
reboot
