0. Подготовка сервера
ZFS не работает корректно с аппаратными RAID-массивами из-за проблем с Write cache. Файловая система требует полный контроль над операциями записи. Все диски следует перевести в HBA Mode либо настроить индивидуальные RAID с отключённым Write Cache.
Агрегация сетевых портов может быть отключена на время установки для упрощения процесса.
1. Подготовка установочного окружения
1.1. LiveCD
Загрузка: http://releases.ubuntu.com/18.04/ubuntu-18.04.1-desktop-amd64.iso.
Загрузиться с LiveCD, выбрать «Try Ubuntu» и открыть терминал (Ctrl+Alt+T).
1.2. Обновление и репозитории
sudo apt-add-repository universe
sudo apt update 1.5. Установка поддержки ZFS
apt install --yes debootstrap gdisk zfs-initramfs 2. Разметка дисков
2.0. Конфигурации массивов
Два диска: один MIRROR (RAID1). Опциональный третий диск как SPARE или RAIDZ.
Четыре диска:
- MIRROR + MIRROR — 50% полезного пространства.
- RAIDZ — 75% (аналог RAID5).
- RAIDZ2 — 50% (аналог RAID6).
Отказоустойчивость (от лучшего к худшему): RAIDZ2 → MIRROR+MIRROR → RAIDZ. Производительность (от лучшего к худшему): MIRROR+MIRROR → RAIDZ → RAIDZ2.
2.1. Подготовка к разметке
apt install --yes mdadm
lsblk
sgdisk --zap-all /dev/{{ disk name }} 2.2. Разметка дисков
Boot-раздел:
sgdisk -a1 -n1:34:2047 -t1:EF02 /dev/{{ disk name }} Основной раздел (на всё пространство):
sgdisk -n2:0:0 -t2:BF01 /dev/{{ disk name }} 2.3. Создание ZFS пула
zpool create \
-o ashift=12 \
-O atime=off \
-O canmount=off \
-O compression=lz4 \
-O checksum=fletcher4 \
-O normalization=formD \
-m legacy \
-R /mnt \
-f \
tank \
mirror \
/dev/{{ disk a part 2}} \
/dev/{{ disk b part 2}} Опции:
ashift=12— размер блока 4K.atime=off— отключить обновление времени доступа.canmount=off— запретить монтирование root.compression=lz4— LZ4 сжатие.checksum=fletcher4— алгоритм контрольной суммы по умолчанию.normalization=formD— UTF-8 поддержка.
3. Установка системы
zfs create -o mountpoint=/ tank/root
zpool set bootfs=tank/root tank
zfs create -o mountpoint=legacy tank/tmp
zfs create -o mountpoint=legacy tank/var
zfs create -o mountpoint=/home tank/home
zfs create -o mountpoint=legacy tank/home/root Установка ядра:
debootstrap bionic /mnt 4. Настройка системы
Базовая настройка: hostname, netplan, apt sources, монтирование виртуальных ФС, chroot, локали и timezone, vim, ZFS поддержка, GRUB, root password, SSH.
Установка GRUB:
apt install --yes grub-pc
update-initramfs -u -k all
update-grub
grub-install /dev/sda
grub-install /dev/sdb Файл /etc/fstab:
tank/var /var zfs noatime,nodev 0 0
tank/tmp /tmp zfs noatime,nodev 0 0
tank/home/root /root zfs noatime,nodev 0 0 6. Первая перезагрузка
zfs snapshot tank/root@setup
exit
mount | grep -v zfs | tac | awk '/\/mnt/ {print $3}' | xargs -i{} umount -lf {}
zpool export tank
reboot 7. SWAP
zfs create \
-V 32G \
-b $(getconf PAGESIZE) \
-o compression=zle \
-o logbias=throughput \
-o sync=always \
-o primarycache=metadata \
-o secondarycache=none \
tank/swap
mkswap -f /dev/zvol/tank/swap
echo /dev/zvol/tank/swap none swap defaults 0 0 >> /etc/fstab
echo RESUME=none > /etc/initramfs-tools/conf.d/resume
swapon -av R. Аварийная загрузка
После выполнения подготовки установочного окружения (раздел 1):
zpool export -a
zpool import -N -R /mnt tank
zfs mount -a
mount -t zfs tank/var /mnt/var/
mount -t zfs tank/tmp /mnt/tmp/
mount -t zfs tank/home/root /mnt/root/ Резюме
- Развёртывание ZFS на Ubuntu возможно, но требует ручной работы.
- Не стоит чрезмерно усложнять конфигурацию излишним числом разделов и опций.
- Возможности ZFS дополняют, а не заменяют традиционные подходы.
- Чрезмерное количество разделов (4K+) может замедлить загрузку из-за overhead монтирования.