Привет! Меня зовут Ваня, я системный администратор в Selectel. Допустим, вы уже «пришли к просветлению» и признали, что ZFS — удобная, функциональная и вообще единственная правильная файловая система. Осталось только понять, как начать ее использовать. Об этом и поговорим под катом!

Рассмотрим установку Ubuntu 24.04 с корнем на ZFS на UEFI-систему со всеми возможными сценариями: raidz, шифрование, сжатие и даже удаленная разблокировка для сервера. Гайд подойдет не только для Ubuntu, но и Debian или любого Debian-based дистрибутива, устанавливаемого через debootstrap. При этом часть гайда с подготовкой дисков и zpool универсальна — ее можно использовать с любым дистрибутивом. Но этап установки системы в случае non-Debian придется адаптировать самостоятельно.

Установку на BIOS-машины в инструкции не рассматриваем — все же за окном 2025 год. ? Из бонусов: установка через debootstrap установит лишь необходимый минимум для работы системы — даже никакого snap и прочего «предустановленного мусора», за который Ubuntu часто критикуют.

Используйте навигацию, если не хотите читать текст целиком:

Подготовка окружения и разметка дисков

Все, что нам понадобится, — это LiveCD с поддержкой ZFS и доступ в сеть. К счастью, в стандартные установочные ISO-образы Ubuntu легко добавить поддержку ZFS.

Загружаем ВМ с ISO или пишем образ на флешку и грузим сервер с нее — как удобнее. В установщике пропускаем все предложения и добираемся до root-консоли. Любимым менеджером дисков — например, fdisk, gparted или sfdisk — размечаем диск:

nvme1n1     259:1    0 476.9G  0 disk
├─nvme1n1p1 259:5    0   127M  0 part
├─nvme1n1p2 259:6    0   1.9G  0 part
└─nvme1n1p3 259:7    0 474.9G  0 part

Что для нас важно:

  • ~100 МБ vfat-раздел под /boot/efi, флаги esp, boot;

  • ~ 2 ГБ ext4-раздел для /boot (не обязателен, но очень рекомендован — для универсальности);

  • оставшееся место — для zpool. Все остальные разделы при необходимости можно создать как dataset или volume внутри zpool.

Если планируете использовать raidz, то второй диск размечайте аналогично «байт в байт». А /boot — упакуйте в mdadm RAID1-массив (GRUB умеет с ним работать). Пример для системы с двумя дисками:

mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/nvme0n1p2 /dev/nvme1n1p2

Облачная инфраструктура для ваших проектов

Виртуальные машины в Москве, Санкт-Петербурге и Новосибирске с оплатой по потреблению.

Подробнее →

Установка ZFS и создание пула

После настройки сети (если в сети есть DHCP, то она уже настроена) устанавливаем инструменты для работы с ZFS:

apt update
apt install zfsutils-linux -y

Создаем файловые системы:

mkfs.fat -F 32 /dev/nvme1n1p1
mkfs.ext4 /dev/md0 (или раздел диска, если рейд не планируется, например: /dev/nvme1n1p2)

Создание пула zpool

Примеры команд — под разные конфигурации. Вместо POOLNAME используйте имя вашего zpool — например, совпадающее с именем хоста.

Без сжатия, raidz или шифрования:

zpool create -o ashift=12 -o autotrim=on -O normalization=formD -O acltype=posixacl -O xattr=sa -O dnodesize=auto -O canmount=off -O mountpoint=none -R /mnt POOLNAME /dev/nvme1n1p3

С зеркалом на двух дисках:

zpool create -o ashift=12 -o autotrim=on -O normalization=formD -O acltype=posixacl -O xattr=sa -O dnodesize=auto -O canmount=off -O mountpoint=none -R /mnt POOLNAME mirror /dev/nvme0n1p3 /dev/nvme1n1p3

Raidz2 на четырех дисках:

zpool create -o ashift=12 -o autotrim=on -O normalization=formD -O acltype=posixacl -O xattr=sa -O dnodesize=auto -O canmount=off -O mountpoint=none -R /mnt POOLNAME raidz2 /dev/sda /dev/sdb /dev/sdc /dev/sdd

Cжатый и зашифрованный:

zpool create -o ashift=12 -o autotrim=on -O compression=lz4 -O encryption=on -O keyformat=passphrase -O normalization=formD -O acltype=posixacl -O xattr=sa -O dnodesize=auto -O canmount=off -O mountpoint=none -R /mnt $POOLNAME /dev/nvme1n1p3

Сжатый и зашифрованный на четырех дисках в raidz2:

zpool create -o ashift=12 -o autotrim=on -O compression=lz4 -O encryption=on -O keyformat=passphrase -O normalization=formD -O acltype=posixacl -O xattr=sa -O dnodesize=auto -O canmount=off -O mountpoint=none -R /mnt $POOLNAME raidz2 /dev/sda /dev/sdb /dev/sdc /dev/sdd

Краткие пояснения к опциям

  • autotrim=on — если используете SSD. Опция снизит износ и повысит производительность за счет информирования диска об освобожденных блоках.

  • ashift — размер блока. В ashift указывается степень двойки — например ashift=12 — это блоки 4 КБ (2¹² = 4 096 байт), а ashift=9 — блоки 512 байт. Для лучшей производительности рекомендуем использовать 12, но в некоторых частных случаях — например, если у вас старые диски, которые не умеют работать с 4 КБ-блоками, можно сменить на 9. 

  • compression=lz4 — быстрое и эффективное сжатие, но также вы можете выбрать lzjb, zle, gzip или zstd.

  • encryption=on, keyformat=passphrase — включают шифрование (по умолчанию — AES-256-CCM, рекомендуем не менять).

Остальные параметры менять не нужно. Подробнее о каждом можно почитать в официальной документации.

Установка системы и настройка загрузки

1. Создаем и монтируем dataset для корневой ФС:

zfs create -o canmount=noauto -o mountpoint=/ POOLNAME/root
zfs mount POOLNAME/root

Именно canmount=noauto: при запуске ядро само смонтирует dataset с корневой ФС.

2. Перед установкой можно создать и другие dataset для иных точек монтирования — например:

zfs create -o mountpoint=/home POOLNAME/home
Также создаем и монтируем /boot и /boot/efi:
mkdir /mnt/boot; mount /dev/md0 /mnt/boot # (или раздел, если не используем рейд)
mkdir /mnt/boot/efi; mount /dev/nvme1n1p1 /mnt/boot/efi

3. Устанавливаем базу системы:

apt install debootstrap -y
debootstrap noble /mnt
zfs set devices=off POOLNAME

4. Установленная система не обладает даже репозиториями, а также в ней нет нескольких важных файлов. Исправляем это (не забыв указать желаемое имя хоста вместо HOSTNAME):

echo HOSTNAME > /mnt/hostname
echo 127.0.0.1 localhost HOSTNAME > /mnt/hosts
grep -v cdrom /etc/apt/sources.list > /mnt/etc/apt/sources.list
rsync -aPvh /etc/apt/sources.list.d/ /mnt/etc/apt/sources.list.d/

5. Заходим в установленную систему через chroot для завершения установки:

mount --rbind /dev  /mnt/dev
mount --rbind /proc /mnt/proc
mount --rbind /sys  /mnt/sys
chroot /mnt /bin/bash --login

6. Исправляем локали и часовой пояс:

locale-gen --purge "en_US.UTF-8"
update-locale LANG=en_US.UTF-8 LANGUAGE=en_US
dpkg-reconfigure --frontend noninteractive locales
dpkg-reconfigure tzdata

7. Обновляем списки пакетов и устанавливаем все необходимое для загрузки:

apt update; apt dist-upgrade -y
apt install zfs-initramfs shim-signed grub-efi-amd64-signed linux-image-generic linux-headers-generic openssh-server -y

Сейчас же можно доустановить полезные утилиты, а если планируем вводить пароль для дешифровки удаленно, то обязательно ставим dropbear-initramfs:

apt install dropbear-initramfs # tmux nano net-tools curl fdisk rsync etc

8. В /etc/fstab добавляем только отличные от ZFS файловые системы — например:

/dev/md0	/boot			ext4	noatime,nofail,x-systemd.device-timeout=5s	0	1
/dev/nvme1n1p1	/boot/efi		vfat	noatime,nofail,x-systemd.device-timeout=5s	0	1

9. ZFS сам монтирует dataset-ы при загрузке. Однако если canmount= noauto (за исключением корня), то монтирование происходит вручную. В обратном случае модуль ядра ZFS смонтирует все самостоятельно, даже если у нас нет юнита systemd, строки в /etc/fstab и т. д. Ручное монтирование:

zfs mount POOLNAME/DATASET

Если нужно временно смонтировать в нестандартную точку (отличную от mountpoint директорию), делаем это так:

mount -t zfs -o zfsutil POOLNAME/DATASET /path/to/mount

Настройка удаленной разблокировки

Для удаленной разблокировки используем Dropbear: 

1. Кладем ключ в /etc/dropbear/initramfs/authorized_keys.

2. В /etc/dropbear/initramfs/dropbear.conf указываем опции запуска, изменив 2077 на «любимый» порт:

DROPBEAR_OPTIONS="-I 180 -j -k -p 2077 -s -c zfsunlock"

3. Настраиваем сеть до монтирования корневой ФС, чтобы мы могли в процессе загрузки подключиться к нашему серверу и ввести пароль для разблокировки зашифрованного dataset. Я обычно использую статический IP, указанный в конфигурации initramfs-tools (/etc/initramfs-tools/initramfs.conf):

IP=SERVER-IP::GATEWAY:NETMASK:SERVER-HOSTNAME

Можно также использовать DHCP или настроить директиву IP в параметрах запуска ядра — что для вас привычнее.

4. Если использовали mdadm для /boot, устанавливаем и настраиваем его тоже:

apt install mdadm -y
mdadm --detail --scan > /etc/mdadm/mdadm.conf

5. Когда завершили все приготовления initramfs, перегенерируем ее и установим загрузчик (GRUB):

update-initramfs -u -k all
grub-install /dev/nvme1n1p1
update-grub

6. После update-grub рекомендуем проверить сгенерированный конфиг grub и убедиться, что он правильно передает ядру параметр root. Иногда его нет или он выглядит неправильно. Закономерности я не нашел, но и не смог воспроизвести проблему при написании инструкции. Строка с запуском ядра должна выглядеть примерно вот так:

linux	"/vmlinuz-6.8.0-59-generic" root=ZFS="POOLNAME/root" ro

Когда закончили установку и настройку всего, что вам понадобится на машине (openssh-server на сервере, KDE/Gnome/XFCE на ПК и т. д.), выходим из chroot, все размонтируем и экспортируем zpool:

exit
umount /mnt/boot/efi
umount /mnt/boot
umount -lf /mnt
zpool export -a

Готово!

Система установлена и готова к использованию. Можно перезагружаться и проверять работу. И еще раз: убедитесь в нескольких ключевых моментах.

  • Grub корректно собрал свой конфиг.

  • Сеть настроена корректно.

  • Вы не забыли экспортировать пул.

Комментарии (54)


  1. nbkgroup
    11.07.2025 08:10

    1. "Быстое и эффективное сжатие" это zstd, а не lz4

    2. У вас массово указана несуществующая опция -O вместо -o, а местами и пробелы с концами строк потерялись.


    1. penguingrape Автор
      11.07.2025 08:10

      1. zstd медленнее lz4, а профита практически никакого не заметил

      2. -О и -о - абсолютно разные ключи. -о используется для задания параметров zpool, а -О для параметров корневого датасета (которые будут унаследованы дочерними датасетами)


      1. 13werwolf13
        11.07.2025 08:10

        а профита практически никакого не заметил

        на моём опыте профит от zstd весьма заметный, надо только со степенью сжатия поиграться. правда есть нюанс о котором мало кто говорит - zstd в разы увеличивает кол-во дисковых операций, чем можно пренебречь в большинстве кейсов на nvme но на hdd это может сказаться на производительности довольно сильно.


      1. nbkgroup
        11.07.2025 08:10

        1. Зависит от данных. У меня +20% к сжатию и скорости.

        2. Да верно, но сути замечания о нечитаемости команд это не отменяет. Мне вообще сначала показалось, что там -0


  1. aborouhin
    11.07.2025 08:10

    За наводку на dropbear-initramfs спасибо, как-то раньше этот вариант мимо меня проходил. Сейчас шифрую только ZFS, где хранятся тома виртуалок, и после перезагрузки сервера скриптом через SSH удалённо расшифровываю/монтирую эту ФС и запускаю виртуалки. На самóм гипервизоре, вроде, скрывать нечего :) Но Ваш вариант надёжнее.


    1. penguingrape Автор
      11.07.2025 08:10

      привычка шифровать удаленные сервера целиком у меня появилась еще с вдсок, после того как я начал работать в облачном провайдере и обнаружил, что админ гипера может слишком много. а еще приходилось обрабатывать запросы от силовиков на вытаскивание данных из вдсок


      1. aborouhin
        11.07.2025 08:10

        Ну при невозможности расшифровать тома виртуалок у админа гипервизора, вроде, тоже не особо много возможностей. Но вот какие следы жизнедеятельности виртуалок могли остаться в не зашифрованной части, это да, неочевидная тема...


        1. penguingrape Автор
          11.07.2025 08:10

          если подушнить, то есть возможность как минимум сдампить память процесса qemu, где будет ключ шифрования. однако заниматься этим маловероятно кто-то будет: трудоемко и сложно, а ради чего? к слову защита от подобных манипуляций тоже есть - AMD SEV


          1. useribs
            11.07.2025 08:10

            Если ввод пароля происходит по SSH, то поидее ничего не мешает подшаманить этот незакриптованный dropbear-initramfs загрузчик. Но тут дальше нюансы что метод не 100%. Писать обертку тоже в первом приближении трудоемко (которая будет прозрачно передавать пароль для последующего анлока/проверять успешность), а первые несколько паролей для анлока можно преднамеренно вводить неправильно (когда подшаманенный загрузчик просто принимает пароль и разрывает коннект например)


            1. penguingrape Автор
              11.07.2025 08:10

              подшаманенный загрузчик юзер вдски вполне вероятно заметит. а сдампленную память нет =)


              1. useribs
                11.07.2025 08:10

                Посмотрел на то как фактически разблокируют, отзываю свой коммент о трудоемкости, zfsunlock оказался вообще шелл скриптом ))


              1. useribs
                11.07.2025 08:10

                Кажется, придумал оптимальный вариант - SSH MITM. Ключи dropbear есть с открытого раздела, и более того, однажды помогал коллеге восстановить пароль сохраненный в SecureCRT похожим образом. Там правда фингерпринт хоста изменился, но этого нам и было надо. А так просто логировать и перенаправлять весь ввод в SSH. profit


                1. aborouhin
                  11.07.2025 08:10

                  Так, а вот это очень интересный сценарий. Конечно, сначала злоумышленник должен как-то узнать, как именно у меня всё устроено, что требует как минимум ребута сервера и какое-то время на изучение / снятие дампа раздела. Но если эту операцию представить как перебой со связью/питанием в ДЦ, можно и попасться...

                  Очевидным выходом будет использование двойного шифрования (вложенного туннеля), но именно в сценарии с initramfs это, подозреваю, не очень просто настроить. А вот я, кстати, от такой атаки, вроде, защищён, т.к. скрипт расшифровки дёргаю только через VPN.


                  1. useribs
                    11.07.2025 08:10

                    Так он не изменится поидее, приватный ключ dropbear сервера в незашифрованном разделе добывается


                    1. aborouhin
                      11.07.2025 08:10

                      Это я уже сам догадался и отредактировал свой комментарий :)


          1. aborouhin
            11.07.2025 08:10

            есть возможность как минимум сдампить память процесса qemu, где будет ключ шифрования

            Вы, по-моему, путаете два случая:

            а) когда мы контролируем физический сервер-гипервизор;

            б) когда гипервизор под контролем стороннего лица (провайдера), а наша только виртуалка.

            Я рассматриваю исключительно случай "а". И чтобы что-то сдампить (экзотические способы с заморозкой чипов памяти вынесем за скобки, это надо сильно постараться, чтобы ради тебя так заморочились :), надо сначала на этот гипервизор залогиниться рутом, что без ребута даже при физическом доступе задача, хм... нетривиальная, а после ребута память будет девственно чиста. Ну и вообще самый вероятный риск - изъятие сервера с последующим исследованием в ЭКЦ.

            Где-то между простым изъятием и заморозкой памяти по степени замороченности (и вероятности возникновения) стои́т та самая подмена скрипта разблокировки. Но чтобы она сработала, нужно два условия. Во-первых, пользователь не должен ничего заподозрить по факту ребута (а тут, очевидно, будет не просто ребут, а и простой сервера на время манипуляций, необходимых для исследования механизма защиты и последующей подмены файлов). Во-вторых, скрипт разблокировки не должен предварительно, до передачи пароля/ключа, на стороне клиента проверять целостность своей серверной части и бинарника /usr/sbin/zfs (ну или образа initramfs в целом, если используем её). Вот это "во-вторых", пожалуй, однозначно стóит реализовать. Можно даже не изобретать велосипед в самом скрипте, а параллельно поставить какой-нибудь filestat_exporter и настроить алерты на изменение CRC задействованных в процессе расшифровки скриптов/бинарников.


            1. useribs
              11.07.2025 08:10

              Если это VPSка/VDSка, а не физический хост, все многократно упрощается - как с "заморозкой чипов" так и с анализом незакриптованного раздела. Так-то админ гипера просто делает клон всей машины вместе с RAM-state и исследует сколько хочет.


              1. aborouhin
                11.07.2025 08:10

                Ну в случае с VDS и смысла говорить о целесообразности шифрования ФС гипервизора нет, так что я исключительно про физические сервера, которые, однако, могут быть размещены в стороннем ДЦ.


                1. useribs
                  11.07.2025 08:10

                  Всмысле ФС виртуалки нецелесообразно? Гипервизора то как раз может и целесообразно, если хостинг хочет защитить данные своих клиентов. В общем любимый Proxmox позволяет делать снапшот с памятью из коробки, для восстановленной виртуалки будет выглядеть так что она и не останавливалась. А раз позволяет Proxmox, то любая QEMU-KVM виртуализация тоже технически позволит это сделать


                  1. aborouhin
                    11.07.2025 08:10

                    Нет... вся эта ветка комментов началась с того, что я задумался, не добавить ли по рецепту автора шифрование корневой ФС гипервизора к уже имеющемуся у меня шифрованию той ФС на этом гипервизоре, где лежат тома с данными виртуалок. Если бы гипервизор был не мой собственный, а хостера - этот вопрос был бы лишён смысла.

                    Надёжная защита же VDS на стороннем гипервизоре - задача, IMHO, изначально безнадёжная ровно по той причине, про которую Вы написали. Так что для чувствительных данных - или арендуем/размещаем/сами у себя держим физический сервер, или держим VDS в той юрисдикции, где наши данные никому не нужны (и надеемся избежать/обойти блокировки) :)


                    1. useribs
                      11.07.2025 08:10

                      А-а, понял Вас. Я скорее о прочитанных выше опасениях автора думал, и привычку шифровать диски, т.к. у админов гипервизора слишком много возможностей.


  1. kt97679
    11.07.2025 08:10

    /boot тоже можно использовать с zfs, подробности тут


    1. penguingrape Автор
      11.07.2025 08:10

      можно, но:
      1. граб имеет крайне ограниченную поддержку zfs, создавать 2ой пул с ограниченным набором фич для /boot как будто избыточно
      2. в случае с efistub /boot и так можно хранить в основном zpool-е, но само ядро и initramfs должны быть в ESP, которую уже никак не засунуть в zfs


  1. fcoder
    11.07.2025 08:10

    zpool create mypool /dev/disk/by-id/ata-WDC_WD40EFRX-68N32N0_WD-WCC7K0123456

    намного безопаснее чем

    zpool create mypool /dev/sda

    Обозначения sdX могут меняться между перезагрузками - диск, который сегодня /dev/sda, завтра может стать /dev/sdb если изменится порядок обнаружения устройств - например, перепутаете SATA-кабели, вытащите/добавите плату расширения или добавится новый диск. ID остается постоянным для конкретного физического устройства


    1. penguingrape Автор
      11.07.2025 08:10

      резонно


    1. useribs
      11.07.2025 08:10

      Кажется, в случае ZFS это только для читаемости полезно чтобы не морочиться потом какой же диск менять. Каждый девайс всеравно получает внутренний цифровой GUID, можно посмотреть через zdb


  1. uvelichitel
    11.07.2025 08:10

    У меня на рабочей машине arch на zfs. Все нравится. Но... Разработка драйверов zfs отстает от новых kernel месяца на два, три. Я после обновления несколько раз оставался без файловой системы даже на stable ядре. В результате просто блокировал обновление ядра.
    Наверное debian консервативнее arch в обновлениях... И все же zfs для linux "не родная" а скорее "приемная". Поэтому "на производстве" я не решаюсь держать / root на zfs)


    1. Delirium
      11.07.2025 08:10

      У убунты все ядра уже много лет идут с поддержкой zfs. А с арчем да, жизнь на острие прогресса слабо совместима со стабильностью и своевременностью поддержки сторонними проектами. У openzfs же есть нюансы с патентами и лицензией, поэтому в ядро в обозримой перспективе она не попадет.


    1. aborouhin
      11.07.2025 08:10

      В debian есть такая засада, что обновления zfsutils-linux встают без перезагрузки, а обновления модуля zfs в ядре её требует, поэтому иногда в период между очередным обновлением zfsutils-linux и последующим ребутом часть утилит оказывается частично неработоспособной (не помню, что конкретно у меня не работало, но помню, что не сразу догадался о причине). Но на работоспособность самой ФС, если не осуществлять с ней никаких манипуляций, это не сказывалось.

      В ubuntu, подозреваю, и это не проблема, ибо есть бесплатный (до 5 машин, но никто не мешает завести несколько учёток) kernel livepatch в Ubuntu Pro.


  1. hogstaberg
    11.07.2025 08:10

    Если используете zfs под /, то крайне рекомендую в initramfs положить ещё и все положенные тулзы чтобы иметь возможность zfs ещё и палкой потыкать в случае чего.


    1. penguingrape Автор
      11.07.2025 08:10

      пакет zfs-initramfs именно это и делает)


  1. MountainGoat
    11.07.2025 08:10

    Говоря о RAID, ZFS хорош для больших инсталляций, где при малейшей проблеме или желании апгрейда, не думая, делаешь следующее: стираешь всё нахрен, настраиваешь пустые диски как тебе надо, разворачиваешь одной кнопкой преднастроенную систему из образа, она сама перескачивает все данные с другого узла.

    ZFS до предела коряв и немощен в возможностях перенастройки RAID системы, сохраняя данные. И в ситуации, когда есть разнородные диски, и их нужно по максимуму использовать. То есть везде, где бабло не рекой. А уж тем более дома.


    1. penguingrape Автор
      11.07.2025 08:10

      единственное, что не понравилось в zfs - невозможность решейпинга (mdadm, например, умеет преобразовать raid1 в raid5 прямо на месте). при этом добавить в raidzX еще один диск, расширив пул, можно начиная с 2.3 - https://github.com/openzfs/zfs/releases/tag/zfs-2.3.0
      "вырастить" zpool, заменив по очереди все диски на диски бОльшего объема тоже можно.

      по сути остается только заранее продумать свою хранилку, чтобы избежать необходимости решейпинга. небольшая плата за возможности и удобство, которые дает zfs. а совать в хранилку разные диски разного объема - это скорее про ceph


      1. MountainGoat
        11.07.2025 08:10

        А удалить? Вот начал диск в RAID5 барахлить, как насчёт решить не менять его, а удалить с сокращением объёма?

        Смотрите, чё могу без ZFS: взять 2 диска: 1 и 2 Тб, объединить в RAID1 с полезной площадью 1Tb. Наполнить. Потом принести диск на 5Tb, добавить в этот RAID1, получить полезную площадь 3Tb. Наполнить опять. Принести диск на 8Tb, подключить, получить полезную площадь 8Tb. Удалить диски на 1 и 2Tb и остаться c 5Tb места.

        И всё это - даже не отмонтируя RAID и продолжая запись на него во время переключений.

        Так что я так и не пойму, что это за возможности и удобства даёт ZFS кроме встроенного шифрования и кеширования.


        1. aborouhin
          11.07.2025 08:10

          Потом принести диск на 5Tb, добавить в этот RAID1, получить полезную площадь 3Tb. [...] Принести диск на 8Tb, подключить, получить полезную площадь 8Tb.

          Это как это Вы на RAID1 получите полезную ёмкость больше самого маленького диска (диски на 1 Tb и 2 Tb ведь Вы ещё не удалили)?
          Ну и в целом, я на домашних серверах RAID'ы (изначально аппаратные, потом какое-то время LVM, BTRFS, последние годы ZFS) держу уже лет 20, и ни разу не возникало мысли такой зоопарк заводить :) Не то, что одинаковый объём, но и модели дисков всегда старался в одном массиве держать одинаковые (ну или хотя бы похожие, если точно одинаковых уже не купить).

          Так что я так и не пойму, что это за возможности и удобства даёт ZFS кроме встроенного шифрования и кеширования.

          Прежде всего, контроль целостности данных на уровне ФС и возможность делать scrub.

          Ну и снэпшоты для бекапа штука крайне полезная. И zfs send/receive. И встроенная поддержка в proxmox.

          В BTRFS основное из этого списка тоже есть, но у меня с ней (и не только у меня) немного негативный опыт в плане надёжности. Возможно, эти проблемы уже неактуальны, но "осадочек остался"...


          1. MountainGoat
            11.07.2025 08:10

            RAID1 получите полезную ёмкость больше самого маленького диска

            Каждый файл лежит на большом диске и на одном из двух маленьких.

            не возникало мысли такой зоопарк заводить

            Вот я и говорю: ZFS это что-то на богатом. А мы тут перебиваемся чем бог пошлёт.

            В BTRFS всё это тоже есть

            У меня с ним проблем не было после 2010. Но перечисленное можно сделать и на LVM.


            1. aborouhin
              11.07.2025 08:10

              Каждый файл лежит на большом диске и на одном из двух маленьких.

              Только это уже не RAID1. В RAID1 все диски содержат полностью идентичные данные, на то он и mirror.

              Вот я и говорю: ZFS это что-то на богатом.

              Поглядел на свои HDD, самые старые из которых ещё с 2008 года крутятся в режиме 24/365... ну да, наверное :)

              Скорее уж проблема с ZFS на совсем древнем железе в её аппетите к RAM. На самом старом моём сервере, где RAM 6 Gb и больше не поставить, ZFS непозволительно много памяти кушает, не остаётся для приложений. Но он у меня сейчас под видеонаблюдение отведён, там надёжное хранение данных особо ни к чему, ну навернётся архив записей, начнём писать заново с нуля, - так что там вообще аппаратный RAID0.

              Но перечисленное можно сделать и на LVM

              Самый главный первый пункт плюс-минус делается разве что через dm-integrity. Сам не пробовал, но отзывы про скорость этого решения не радуют. Ну и восстанавливать в случае чего ZFS, где все фичи из коробки, изрядно проще, чем многослойный пирог из lvm, dm-integrity, шифрования и собственно ФС под этим всем.


              1. useribs
                11.07.2025 08:10

                По памяти, а если отключить ARC либо настройками, либо проще primarycache=metadata secondarycache=metadata?


                1. aborouhin
                  11.07.2025 08:10

                  Вроде пробовал (давно), грустно всё равно, да и смысла особого нет на данной конкретной машине.


        1. hogstaberg
          11.07.2025 08:10

          Руками в zfs точно так же, как в вашем примере написано, можно пожонглировать дисками в зеркале.


  1. Siemargl
    11.07.2025 08:10

    Хорошо, а что с производительностью сейчас? vs btrfs или даже xfs


    1. penguingrape Автор
      11.07.2025 08:10

      zfs нужно уметь готовить. если просто создать zfs на одном устройстве, то чуда ждать не стоит: как минимум все данные будут записываться дважды. я рассказывал как в zfs устроены чтение и запись вот здесь - https://habr.com/ru/companies/selectel/articles/921770/

      ну и ради интереса посмотрел сейчас arc_summary на своем рабоче-игровом десктопе: под arc выделено 32гб и за 26 дней аптайма 99.6% чтения происходило из ARC, расположенного в озу. стоит ли говорить, что это намного быстрее любого nvme?)


      1. Siemargl
        11.07.2025 08:10

        Про кэширование - на самом деле это ничего не говорит, ведь в других ФС могут быть сравнимые цифры. Нужны именно тесты. И интересна разница производительности Zfs под разными ОС - соларка, лин, всд, Винда.

        У меня исторический интерес - hpfs и nwfs/nss работали чуть не в разы быстрее ntfs.

        А вот верно ли, что Zfs вроде понимает в группе, что Ссд диск можно использовать как кэш для остальных? Upd. Вопрос снят, это и есть L2arc


        1. useribs
          11.07.2025 08:10

          Сам не понимает, если речь про кэш на чтение, то это L2ARC называется


  1. radioxoma
    11.07.2025 08:10

    После refind на grub смотреть не хочется. Уж лучше без загрузчика совсем. "В конце-концов уже 2025 год")


    1. penguingrape Автор
      11.07.2025 08:10

      многие слишком привыкли к грабу, поэтому я его оставил. к тому же граб - достаточно гибкая штука. кому-то нравится бут меню с условными windows, memtest86.efi, etc без необходимости спамить delete, кто-то слишком любит minegrub, поэтому пусть будет)

      в моем же случае загрузка происходит через efistub ядро, initramfs лежит вместе с ядром в ESP. "Наверное, вы еще не готовы к этому, но вашим детям понравится" (с)


  1. bdaring
    11.07.2025 08:10

    Вот не понимаю я этих восторгов по поводу ZFS: "что ZFS — удобная, функциональная и вообще единственная правильная файловая система".
    Я дважды всерьез пытался ее использовать, оба раза не удачно. Первый раз на работе. Тогда мы, начитавшись восторженных статей о ZFS, попробавали перевести на нее раздел с данными postgres. Падение производительности на десятки процентов по сравнению с ext4 (порядка 90% нагрузки - запись), быстро заставили отказаться от этой идеи.

    Второй раз - на домашнем NAS. У меня, условно, 4 диска, на которых я хочу динамически создавать разделы с разным уровнем избыточности, от stripe до 4-way mirror. Это элементарно делается при помощи LVM. Однако в случае ZFS я должен заранее спланировать распределение физических разделов по уровням избыточности, что, в моем случае, очевидно неприемлемо.


    1. penguingrape Автор
      11.07.2025 08:10

      уже замечал выше, но повторюсь: zfs нужно уметь готовить.
      >> попробавали перевести на нее раздел
      slog то хоть вынесли на отдельный диск? подобное решение без отдельного slog приведет к тому, что все данные будут записываться дважды
      второй кейс странный, ни разу не встречал подобного запроса.


      1. MountainGoat
        11.07.2025 08:10

        второй кейс странный, ни разу не встречал подобного запроса.

        Самый понятный запрос для домашнего NAS. Файлы, которые легко скачать снова - вообще не бэкапим. Файлы которые перекачать можно, но нудно - бэкапим с помощью shadow copy на том же RAID. То есть, если весь RAID помрёт, то и файлы с ним, но вот от случайного удаления или малвари - надёжно защищено. И только самые важные файлы бекапим на внешнее устройство.


        1. aborouhin
          11.07.2025 08:10

          1. MountainGoat
            11.07.2025 08:10

            Четыре ноги - хорошо, две ноги - плохо!


            1. useribs
              11.07.2025 08:10

              Как говорили когда-то на форумах авто.ру - "топик+ник" :D


      1. mpa4b
        11.07.2025 08:10

        С какого перепоя дважды-то? В slog идут только синхронные записи.


        1. penguingrape Автор
          11.07.2025 08:10

          И постгря, о которой шла речь, отношения к синхронным записям не имеет?)