====== Ручная установка FreeBSD на ZFS mirror с использованием mfsbsd ====== ---- ====== Введение ====== Установка FreeBSD это довольно таки простая задача, и ее можно выполнить разными способами. В данной статье мы рассмотрим возможность удаленной установки при помощи ssh. Этот вариант я предпочитаю потому что, при установки системы на ZFS обычно приходится вводить очень много длинный команд и это гораздо проще сделать при помощи copy/paste. Устанавливать будем на ZFS mirror. За основу взята статья [[https://wiki.freebsd.org/RootOnZFS/GPTZFSBoot|Installing FreeBSD Root on ZFS using GPT]]. Так же потребуется загрузочная флешка с [[https://mfsbsd.vx.sk|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 < Задаем пароль для **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