Установка и настройка ZFS на Debian 8.1 (Jessie)
Краткое введение
ZFS сочетает возможности файловой системы и управления томами. Основные возможности ZFS:
- Защита отsilent data corruption (контроль целостности и автоматический ремонт).
- Поддержка больших объёмов хранения.
- Эффективная сжатие данных и дедупликация (опционально).
- Интеграция управления томами и файловой системой в единый интерфейс.
- Снапшоты и копии на основе copy‑on‑write.
- Непрерывная проверка целостности и автоматическое восстановление.
- RAID‑Z (аналог RAID‑5/6) и родные ACL NFSv4.
Определение: ZFS — файловая система с встроенным менеджером томов и проверкой целостности каждой записи.
Важно: исходная реализация ZFS распространяется под CDDL (Common Development and Distribution License).
Основные концепции ZFS
- Целостность данных — контрольные суммы для каждого блока.
- Простое администрирование — основные команды: zfs и zpool.
- Операции можно выполнять на работающей (online) файловой системе.
Примечание: для полного обзора функций можно обратиться в документацию и статьи по ZFS.
Требования
- Debian 8 (Jessie) с 64‑битным ядром (amd64).
- Права root.
Важно: официальная поддержка zfsonlinux ориентирована на amd64 (x86_64).
Шаг 1 — Добавление репозитория zfsonlinux и обновление системы
Добавьте пакет zfsonlinux в систему. Это создаст файлы /etc/apt/sources.list.d/zfsonlinux.list и /etc/apt/trusted.gpg.d/zfsonlinux.gpg. После этого ZFS можно устанавливать через apt и получать обновления через apt‑get update && apt‑get upgrade.
Выполните на сервере с доступом по SSH и правами root следующие команды:
# uname -a
Linux debian-zfs 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt11-1 (2015-05-24) x86_64 GNU/Linux
# wget http://archive.zfsonlinux.org/debian/pool/main/z/zfsonlinux/zfsonlinux_6_all.deb
# dpkg -i zfsonlinux_6_all.deb
# apt-get updateШаг 2 — Установка пакетов ZFS
Установите зависимости и сам пакет debian-zfs. Процесс может занять время. После установки перезагрузите сервер.
# apt-get install lsb-release
# apt-get install debian-zfs
# shutdown -r nowШаг 3 — Создание и конфигурация пулов (zpools)
Проверьте установку после перезагрузки:
# dpkg -l | grep zfs
ii debian-zfs 7~jessie amd64 Native ZFS filesystem metapackage for Debian.
ii libzfs2 0.6.5.2-2 amd64 Native ZFS filesystem library for Linux
ii zfs-dkms 0.6.5.2-2 all Native ZFS filesystem kernel modules for Linux
ii zfsonlinux 6 all archive.zfsonlinux.org trust package
ii zfsutils 0.6.5.2-2 amd64 command-line tools to manage ZFS filesystemsЕсли пакет установлен, можно создавать пулы.
Пример: у сервера добавлено пять дисков по 2 ГБ: /dev/sdb.. /dev/sdg. /dev/sda занят под систему.
# ls /dev/sd*
/dev/sda /dev/sda1 /dev/sda2 /dev/sda5 /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdgСоздание простого пула (raid0 / stripe)
# zpool list
no pools available
# zpool create -f pool0 /dev/sdb
# zpool list
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
pool0 1.98G 64K 1.98G - 0% 0% 1.00x ONLINE -Команда показала, что создан пул pool0 размером ~2 ГБ.
Создание зеркала (raid1)
# zpool create -f pool1 mirror /dev/sdc /dev/sdd
# zpool list
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
pool0 1.98G 64K 1.98G - 0% 0% 1.00x ONLINE -
pool1 1.98G 64K 1.98G - 0% 0% 1.00x ONLINE -Теперь есть два пула: pool0 (stripe) и pool1 (mirror).
Проверка статуса пулов:
# zpool status
pool: pool0
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
pool0 ONLINE 0 0 0
sdb ONLINE 0 0 0
errors: No known data errors
pool: pool1
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
pool1 ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
sdc ONLINE 0 0 0
sdd ONLINE 0 0 0
errors: No known data errorsСоздание RAID‑Z (RAID‑Z1)
RAID‑Z — это схема распределения данных и паритета, аналогичная RAID‑5, но с динамической шириной полосы. Минимум 3 диска. В случае отказа одного диска ZFS восстановит данные по паритету.
# zpool create -f poolz1 raidz sde sdf sdg
# zpool list poolz1
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
poolz1 5.94G 117K 5.94G - 0% 0% 1.00x ONLINE -
# zpool status poolz1
pool: poolz1
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
poolz1 ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
sde ONLINE 0 0 0
sdf ONLINE 0 0 0
sdg ONLINE 0 0 0
errors: No known data errors
# df -h /poolz1
Filesystem Size Used Avail Use% Mounted on
poolz1 3.9G 0 3.9G 0% /poolz1Обратите внимание: у пула ~6 ГБ физически, но df показывает ~4 ГБ доступного пространства. Это связано с тем, что часть места используется под паритет.
Удаление пулов и создание RAID‑Z2 (двойной паритет, аналог RAID‑6)
# zpool list
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
pool0 1.98G 64K 1.98G - 0% 0% 1.00x ONLINE -
pool1 1.98G 64K 1.98G - 0% 0% 1.00x ONLINE -
poolz1 5.94G 117K 5.94G - 0% 0% 1.00x ONLINE -
# zpool destroy pool0
# zpool destroy pool1
# zpool destroy poolz1
# zpool list
no pools available
# zpool create poolz2 raidz2 sdb sdc sdd sde
# zpool list
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
poolz2 7.94G 135K 7.94G - 0% 0% 1.00x ONLINE -
# df -h /poolz2
Filesystem Size Used Avail Use% Mounted on
poolz2 3.9G 0 3.9G 0% /poolz2
# zpool status poolz2
pool: poolz2
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
poolz2 ONLINE 0 0 0
raidz2-0 ONLINE 0 0 0
sdb ONLINE 0 0 0
sdc ONLINE 0 0 0
sdd ONLINE 0 0 0
sde ONLINE 0 0 0
errors: No known data errorsКак видно, RAID‑Z2 даёт повышенную отказоустойчивость: параллельно хранятся две копии паритета.
Шаг 4 — Симуляция отказа диска и восстановление
Создадим тестовый файл и проверим доступ к нему.
# echo "Test Only" > /poolz2/test.txt
# cat /poolz2/test.txt
Test OnlyПеред симуляцией проверьте статус poolz2.
Симулируем отказ, записав случайные данные в /dev/sdb. После этого выполняем scrub и проверяем статус.
# dd if=/dev/urandom of=/dev/sdb bs=1024 count=20480
# zpool scrub poolz2
# zpool status
pool: poolz2
state: ONLINE
status: One or more devices has experienced an unrecoverable error. An
attempt was made to correct the error. Applications are unaffected.
action: Determine if the device needs to be replaced, and clear the errors
using 'zpool clear' or replace the device with 'zpool replace'.
see: http://zfsonlinux.org/msg/ZFS-8000-9P
scan: scrub repaired 17K in 0h0m with 0 errors on Tue Dec 8 22:37:49 2015
config:
NAME STATE READ WRITE CKSUM
poolz2 ONLINE 0 0 0
raidz2-0 ONLINE 0 0 0
sdb ONLINE 0 0 25
sdc ONLINE 0 0 0
sdd ONLINE 0 0 0
sde ONLINE 0 0 0
errors: No known data errorsДалее заменим /dev/sdb на /dev/sdf и запустим восстановление (replace → resilver):
# zpool replace poolz2 sdb sdf
# zpool status
pool: poolz2
state: ONLINE
scan: resilvered 49.5K in 0h0m with 0 errors on Tue Dec 8 22:43:35 2015
config:
NAME STATE READ WRITE CKSUM
poolz2 ONLINE 0 0 0
raidz2-0 ONLINE 0 0 0
sdf ONLINE 0 0 0
sdc ONLINE 0 0 0
sdd ONLINE 0 0 0
sde ONLINE 0 0 0
errors: No known data errorsПроверим доступность файла:
# cat /poolz2/test.txt
Test OnlyВывод показывает, что ZFS восстановил данные и файл доступен.
Шаг 5 — Создание и настройка файловой системы ZFS
ZFS автоматически создаёт файловую систему с именем пула. Посмотрим существующие файловые системы:
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
poolz2 105K 3.83G 26.1K /poolz2Создадим дополнительную файловую систему poolz2/tank:
# zfs create poolz2/tank
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
poolz2 132K 3.83G 26.1K /poolz2
poolz2/tank 25.4K 3.83G 25.4K /poolz2/tank
# df -h | grep poolz2
poolz2 3.9G 128K 3.9G 1% /poolz2
poolz2/tank 3.9G 128K 3.9G 1% /poolz2/tankСоздание пользовательской точки монтирования:
# zfs create poolz2/data -o mountpoint=/data
# df -h | grep poolz2
poolz2 3.9G 0 3.9G 0% /poolz2
poolz2/tank 3.9G 0 3.9G 0% /poolz2/tank
poolz2/data 3.9G 0 3.9G 0% /dataИзменение mountpoint у существующей FS:
# zfs set mountpoint=/tank poolz2/tank
# df -h | grep poolz2
poolz2 3.9G 0 3.9G 0% /poolz2
poolz2/data 3.9G 0 3.9G 0% /data
poolz2/tank 3.9G 0 3.9G 0% /tankМонтирование и размонтирование:
# zfs unmount /data
# df -h | grep poolz2
poolz2 3.9G 0 3.9G 0% /poolz2
poolz2/tank 3.9G 0 3.9G 0% /tank
# zfs mount poolz2/data
# df -h | grep poolz2
poolz2 3.9G 0 3.9G 0% /poolz2
poolz2/tank 3.9G 0 3.9G 0% /tank
poolz2/data 3.9G 0 3.9G 0% /dataУдаление файловой системы:
# zfs destroy poolz2/data
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
poolz2 152K 3.83G 26.1K /poolz2
poolz2/tank 25.4K 3.83G 25.4K /tankФайловая система /data удалена.
Полезные советы и шпаргалка
Шпаргалка команд (cheat sheet):
# Просмотр пулов
zpool list
zpool status
# Создать пул
zpool create poolname
# Удалить пул
zpool destroy poolname
# Заменить диск
zpool replace poolname olddev newdev
# Запустить scrub (проверка целостности)
zpool scrub poolname
# Создать файловую систему
zfs create poolname/fsname
# Настроить mountpoint
zfs set mountpoint=/path poolname/fsname
# Монтировать/отмонтировать
zfs mount poolname/fsname
zfs unmount poolname/fsname
# Снапшот
zfs snapshot poolname/fsname@label
# Восстановление из снапшота
zfs rollback poolname/fsname@label Чек‑лист по ролям
Для администратора перед развёртыванием:
- Проверить совместимость аппаратуры и ядра.
- Подготовить отдельные диски для ZFS (без разделов) или использовать разделы по соглашению.
- Настроить резервные копии перед стиранием/разрушением пулов.
- Настроить мониторинг zpool status и alerting.
Для оператора при обслуживании:
- Регулярно запускать zpool scrub (например, ежемесячно).
- Следить за SMART‑статусом дисков.
- Планировать замену дисков по предиктивной ошибке.
Когда ZFS может не подойти
- Ограничения лицензирования: CDDL несовместима с GPL в ядре; некоторые дистрибутивы не включают ZFS по умолчанию.
- Сценарии с очень малыми дисками/встроенными системами с ограниченной RAM — ZFS ожидает достаточного объёма памяти для кешей (ARC).
- Если требуется родная поддержка LVM+ext4 с точным workflow — возможно, проще использовать стандартный стек.
Альтернативы
- Btrfs — современная копирующаяся FS с RAID, снапшотами и сжатие; активно развивается, но у Btrfs другое поведение при определённых отказах.
- LVM + XFS/ext4 — проверенное решение для простых задач, но без встроенной проверки целостности блоков и паритета.
Ментальные модели и эвристики
- Пулы ZFS = набор устройств + политика (mirror, raidz, raidz2). Подумайте о vdev как о «столбце отказоустойчивости».
- Сжатие и дедупликация — увеличивают нагрузку на CPU и память; включайте по необходимости.
- Scrub = профилактическая проверка целостности; выполняйте регулярно.
Мини‑методология внедрения ZFS в проект
- Оцените требования по отказоустойчивости и IOPS.
- Выберите vdev‑политику (mirror для IOPS/быстрой реконструкции, raidz/raidz2 для плотной ёмкости).
- Выделите RAM под ARC и при необходимости настройте ZFS cache.
- Настройте мониторинг и план регулярных scrub.
- Тестируйте процедуру замены диска и восстановление данных в контролируемой среде.
Безопасность, резервное копирование и соответствие
- ZFS обеспечивает целостность, но не заменяет резервное копирование. Храните внешние бэкапы и снапшоты вне основного пула.
- Для GDPR/конфиденциальных данных применяйте шифрование на уровне диска или используйте ZFS‑скрипты с контейнеризацией и управлением доступом.
- Настройте права доступа и NFSv4 ACL при экспорте через сеть.
Критерии приёмки
- Пулы создаются и отображаются в zpool list.
- Scrub завершился без ошибок.
- Замена диска отрабатывает: resilver проходит успешно, данные доступны.
- Файловые системы монтируются в ожидаемые точки и корректно монтируются после перезагрузки.
Краткий глоссарий (1‑строчно)
- zpool — логический пул хранения, объединяющий устройства в vdev.
- vdev — виртуальное устройство, формирующееся из дисков (mirror, raidz).
- resilver — процесс восстановления данных на заменённый диск.
- scrub — проверка целостности данных по контрольным суммам.
- ARC — Adaptive Replacement Cache, основной кеш ZFS в памяти.
Заключение
ZFS меняет подход к хранению данных за счёт проверки целостности, встроенных снапшотов и гибких схем отказоустойчивости. На Debian 8.1 вы можете без больших усилий установить zfsonlinux, создать пулы разного типа, протестировать сценарии отказов и настроить файловые системы. ZFS подходит для серверов, где важны целостность и отказоустойчивость, но требует внимания к ресурсам (памяти) и планированию резервного копирования.
Резюме: начните с тестовой среды, прогоните scrub и замену диска, и только затем вводите ZFS в продакшн.
Похожие материалы
Как устроить идеальную вечеринку для просмотра ТВ
Как распаковать несколько RAR‑файлов сразу
Приватный просмотр в Linux: как и зачем
Windows 11 не видит iPod — способы исправить
PS5: как настроить игровые пресеты