ZFS и Btrfs часто противопоставляют друг другу, хотя решают они похожие задачи разными способами. Обе файловые системы поддерживают контрольные суммы, снапшоты, сжатие и отправку изменений на резервный сервер. Разница в философии: ZFS — цельный стек с пулами, ARC и строгими правилами, Btrfs — встроенная в ядро файловая система с гибким управлением устройствами. Для домашнего сервера выбор зависит не от популярности, а от того, готовы ли вы обслуживать модуль ядра и сколько дисков планируете добавить через год.

Термины, которые путают

  • Пул ZFS — группа устройств с общим пространством; датасет — файловая система внутри пула со своими свойствами.
  • В Btrfs аналог пула — файловая система на одном или нескольких устройствах, аналог датасета — сабтом (subvolume).
  • Снапшот в ZFS всегда привязан к датасету и создаётся мгновенно; в Btrfs это отдельный сабтом, доступный только для чтения или для записи.

Проверка на практике без реальных дисков

Прежде чем форматировать накопители, соберите стенд на файлах-образах. ZFS принимает файл как vdev, Btrfs — как блочное устройство через loop.

sudo apt install zfsutils-linux btrfs-progs
truncate -s 8G /var/tmp/zfs.img
sudo zpool create tank /var/tmp/zfs.img
sudo zfs create tank/data
sudo zfs set compression=lz4 tank/data
sudo zfs set atime=off tank/data

Для Btrfs последовательность другая: сначала файловая система, затем точка монтирования и сабтомы.

truncate -s 8G /var/tmp/btrfs.img
sudo mkfs.btrfs -L data /var/tmp/btrfs.img
sudo mkdir -p /mnt/btrfs
sudo mount -o loop,compress=zstd:3,noatime /var/tmp/btrfs.img /mnt/btrfs
sudo btrfs subvolume create /mnt/btrfs/data

Обратите внимание: в ZFS сжатие включается свойством датасета и действует на новые данные, в Btrfs — опцией монтирования. Уже записанное обе системы не пережимают.

Память и ARC

ZFS использует ARC — кэш в оперативной памяти, который по умолчанию может занимать до половины RAM. Это не утечка: под давлением память освобождается, но на машине с 8 ГБ лимит лучше задать явно. Btrfs полагается на страничный кэш ядра.

awk '/^size/ {print $3/1024/1024/1024 " GiB"}' /proc/spl/kstat/zfs/arcstats
cat /sys/module/zfs/parameters/zfs_arc_max
zfs get compressratio tank/data

Лимит ARC задаётся параметром модуля zfs_arc_max в байтах; на постоянной основе его прописывают в /etc/modprobe.d/zfs.conf и перезагружаются. Для домашнего сервера с 16 ГБ ARC стоит ограничить явно. ECC не обязательна, но снижает риск повреждения данных в RAM.

Снапшоты и откат

Снапшоты — главный аргумент обеих систем. В ZFS имя включает датасет и метку, откат возвращает датасет целиком. В Btrfs снапшот — это сабтом, и его можно смонтировать отдельно, что удобно для проверки старой версии данных.

sudo zfs snapshot tank/data@before-upgrade
sudo zfs list -t snapshot -o name,used,refer
sudo zfs rollback tank/data@before-upgrade
sudo btrfs subvolume snapshot -r /mnt/btrfs/data /mnt/btrfs/data-2026-11-05
sudo btrfs subvolume list /mnt/btrfs

Важное отличие: zfs rollback с -r уничтожает снапшоты новее выбранного, а без -r откажется работать. В Btrfs откат — это переключение на другой сабтом; автоматического возврата нет. Регулярные снапшоты делают через snapper или systemd-таймеры. Сами снапшоты не заменяют резервную копию: они лежат на тех же дисках.

Отправка на резервный сервер

Обе системы умеют инкрементальную передачу: ZFS через send и ssh, Btrfs через btrfs send и receive. Для Btrfs отправляйте только снапшоты, созданные с -r.

sudo zfs send -i tank/data@before tank/data@after | ssh backup zfs receive backup/data
sudo btrfs send -p /mnt/btrfs/data-1 /mnt/btrfs/data-2 | ssh backup btrfs receive /backup

У ZFS есть преимущество для шифрованных датасетов: raw-поток (ключ -w) передаёт данные без расшифровки на источнике. Btrfs собственного шифрования не имеет, поэтому шифровать нужно уровень ниже — LUKS.

Целостность и scrub

sudo zpool scrub tank
sudo zpool status -v
sudo btrfs scrub start -B /mnt/btrfs
sudo btrfs device stats /mnt/btrfs
sudo btrfs filesystem usage -T /mnt/btrfs

Scrub нужно запускать регулярно через systemd-таймер. ZFS показывает ошибки чтения и записи по устройствам, Btrfs — счётчики в device stats. Если избыточности нет, обе системы обнаружат повреждение, но не смогут его исправить.

RAID, расширение и замена дисков

sudo zpool create tank mirror /dev/sdb /dev/sdc
sudo zpool add tank mirror /dev/sdd /dev/sde
sudo zpool replace tank /dev/sdb /dev/sdf
sudo btrfs device add /dev/sdc /mnt/btrfs
sudo btrfs balance start -dconvert=raid1 -mconvert=raid1 /mnt/btrfs

В ZFS зеркала расширяются добавлением пары, а RAIDZ долгое время нельзя было расширить без пересоздания пула; современные версии OpenZFS поддерживают расширение RAIDZ, но операция долгая. Btrfs проще относится к устройствам: add, remove и balance позволяют менять схему на лету, но RAID5/6 исторически имеет проблему write hole и не рекомендуется для важных данных. Зеркало переживает потерю одного диска без простоя.

Шифрование, загрузка и совместимость

ZFS умеет нативное шифрование на уровне датасета: ключ можно хранить в файле, вводить при загрузке или получать из TPM. Btrfs нативного шифрования не имеет, поэтому используется LUKS поверх раздела. Для корневой системы ZFS требует модуля ядра: в Ubuntu он собирается через DKMS, что иногда конфликтует с Secure Boot и обновлениями ядра. Btrfs встроен в ядро, поэтому загрузка с него проще, а Fedora и openSUSE используют его по умолчанию.

Что выбрать для домашнего сервера

  1. Один-два диска, важна простота и снапшоты корня — Btrfs: встроен в ядро, есть snapper.
  2. Четыре и более диска, нужны RAIDZ, надёжный scrub и отправка на бэкап — ZFS: предсказуемая целостность и удобный send/receive.
  3. Нужно менять состав дисков на лету — Btrfs с raid1 и balance.
  4. Критичен Secure Boot и не хочется подписывать модули — Btrfs.

Проверьте производительность через fio и не включайте дедупликацию ZFS без необходимости: она требует много памяти. Для Btrfs не запускайте balance без необходимости и следите за свободным местом: заполнение выше 90% заметно замедляет работу.

Итог

ZFS выигрывает там, где важны целостность, зеркала и дисциплина резервного копирования, а цена — модуль ядра, память под ARC и более сложное расширение. Btrfs выигрывает на простых домашних конфигурациях: она в ядре, легко расширяется и дружит со снапшотами загрузчика, но требует осторожности с RAID5/6 и балансировкой. Для домашнего сервера из двух дисков я бы начал с Btrfs и raid1, а для массива на четыре и более дисков выбрал ZFS с mirror или RAIDZ. Решение стоит принимать по числу дисков и готовности обслуживать систему, а не по синтетическим тестам.

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.

Поделиться: Telegram ВКонтакте