Коротко о главном
ZFS объединяет файловую систему и управление дисками. Он умеет проверять целостность данных, делать дешёвые снапшоты, отправлять наборы данных на другой сервер и объединять диски в пулы. Для домашнего сервера это мощный, но требовательный инструмент.
ZFS защищает от тихих ошибок чтения благодаря контрольным суммам, упрощает резервное копирование через send/receive и даёт гибкое управление квотами. Взамен требует памяти, понимания ARC и осторожности при расширении пула.
В этой статье разберём ZFS по шагам: установка, базовая конфигурация, практические сценарии и ошибки, которые встречаются чаще всего.
Зачем нужен ZFS
ZFS решает вполне конкретные задачи: Файловая система и менеджер томов с контрольными суммами, снапшотами и отправкой данных. Важно не превращать инструмент в самоцель — если задача проще решается штатными средствами системы, начните с них.
Установка
В Debian, Ubuntu и Linux Mint используется пакетный менеджер APT:
sudo apt install zfsutils-linux
В Fedora и RHEL-совместимых системах пакет ставится через DNF:
sudo dnf install zfs-release && sudo dnf install zfs
В Arch Linux и производных пакет доступен в официальных репозиториях:
sudo pacman -S zfs-utils
Пошаговая настройка
После установки переходите к базовому сценарию. Команды ниже выполняйте от пользователя с достаточными правами, но не запускайте всё под root без необходимости.
1. Создайте пул на тестовых дисках
Не экспериментируйте на дисках с данными. Для зеркала нужны два устройства, для raidz — минимум три. Проверьте имена через lsblk.
lsblk -o NAME,SIZE,MODEL
sudo zpool create tank mirror /dev/sdb /dev/sdc
2. Создайте набор данных
Наборы данных позволяют задавать квоты, сжатие и снапшоты независимо. Включайте compression=zstd для экономии места.
sudo zfs create -o compression=zstd tank/data
zfs list
3. Сделайте снапшот
Снапшот фиксирует состояние мгновенно и почти не потребляет место, пока данные не изменились.
sudo zfs snapshot tank/data@before-update
zfs list -t snapshot
4. Отправьте копию на другой носитель
send/receive передаёт поток изменений. Для инкрементальной копии укажите базовый снапшот.
sudo zfs send tank/data@before-update | ssh backup zfs receive backup/data
5. Проверьте состояние
Регулярно запускайте scrub и смотрите status. Ошибки чтения требуют замены диска, а не игнорирования.
sudo zpool scrub tank
zpool status -v
Базовая конфигурация
Начните с минимального рабочего варианта. Не копируйте большой конфиг целиком: добавляйте параметры по одному и проверяйте результат после каждого изменения.
# /etc/modprobe.d/zfs.conf
options zfs zfs_arc_max=4294967296
Практические советы
Эти рекомендации проверены на повседневных задачах. Начните с тех, которые закрывают вашу текущую боль, а не со всего списка сразу.
Совет 1. Не заполняйте пул выше 80%: производительность и фрагментация ухудшают
Не заполняйте пул выше 80%: производительность и фрагментация ухудшаются.
Совет 2. Для домашнего сервера достаточно 8–16 ГБ памяти, но ARC любит больше.
Для домашнего сервера достаточно 8–16 ГБ памяти, но ARC любит больше.
Совет 3. Планируйте расширение пула заранее: не все конфигурации просто добавит
Планируйте расширение пула заранее: не все конфигурации просто добавить.
Совет 4. Снапшоты не заменяют резервную копию: они лежат на тех же дисках.
Снапшоты не заменяют резервную копию: они лежат на тех же дисках.
Совет 5. Используйте zfs send/receive для офлайн-копии.
Используйте zfs send/receive для офлайн-копии.
Практический сценарий
Представьте типовую задачу: нужно развернуть ZFS на одной машине, проверить работу и передать доступ коллеге. Начните с чистой системы или снапшота, чтобы результат был воспроизводим. Запишите все команды в отдельный файл — это одновременно шпаргалка и черновик будущей автоматизации.
Дальше действуйте короткими шагами: установка, минимальная конфигурация, проверка, затем расширение. После каждого шага фиксируйте, что именно изменилось и как это проверить. Такой журнал экономит время, когда через месяц понадобится повторить настройку на другом сервере или объяснить её коллеге.
Порядок работ для этого сценария выглядит так:
- Создайте пул на тестовых дисках
- Создайте набор данных
- Сделайте снапшот
- Отправьте копию на другой носитель
- Проверьте состояние
Отдельно продумайте, что произойдёт при сбое. Для ZFS важно заранее знать, где хранятся данные, как их скопировать и сколько времени займёт восстановление. Если ответа нет, не двигайтесь дальше: сначала закройте этот пробел, потом добавляйте новые возможности.
Типичные ошибки
Ниже — сбои, которые встречаются чаще всего. Перед исправлением сохраните текущие конфиги и запишите, какие изменения вносите: так проще откатиться.
1. Пул не импортируется после переустановки
Проверьте zpool import без аргументов и импортируйте по имени. Не создавайте новый пул на тех же дисках.
2. Не хватает памяти
Ограничьте ARC через zfs_arc_max и проверьте, нет ли утечек. Не отключайте контрольные суммы ради экономии.
3. scrub находит ошибки
Смотрите zpool status -v, замените диск и выполните resilver. Не игнорируйте ошибки записи.
Что проверить перед вводом в работу
Перед тем как считать настройку завершённой, пройдитесь по короткому списку. Он не заменяет полноценный аудит, но отсекает большинство очевидных проблем.
Чек-лист
- Версия ZFS зафиксирована, а обновления не применяются вслепую.
- Есть резервная копия конфигурации и данных, восстановление проверено.
- Доступ ограничен нужными пользователями и сетями, лишние порты закрыты.
- Логи и метрики собираются, понятно, куда смотреть при сбое.
- Изменения описаны в документации и могут быть повторены на другой машине.
- Есть план отката и понятный критерий, по которому вы решите его применить.
Если какой-то пункт вызывает затруднение, это сигнал вернуться к соответствующему разделу, а не откладывать проверку. Настройка, которую нельзя повторить, плохо работает не только у коллег, но и у вас самих через полгода.
Итог
ZFS — это не «поставил и забыл». Рабочая конфигурация складывается из понимания задачи, аккуратной установки и проверки результата. Начните с базового сценария, затем добавляйте только те возможности, которые действительно используете.