Гид по технологиям

Установка и настройка ZFS на Debian 8.1 (Jessie)

6 min read Хранилище Обновлено 22 Nov 2025
Установка и настройка ZFS на Debian 8.1
Установка и настройка ZFS на Debian 8.1

Краткое введение

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 в проект

  1. Оцените требования по отказоустойчивости и IOPS.
  2. Выберите vdev‑политику (mirror для IOPS/быстрой реконструкции, raidz/raidz2 для плотной ёмкости).
  3. Выделите RAM под ARC и при необходимости настройте ZFS cache.
  4. Настройте мониторинг и план регулярных scrub.
  5. Тестируйте процедуру замены диска и восстановление данных в контролируемой среде.

Безопасность, резервное копирование и соответствие

  • 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 в продакшн.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство