Установка Ubuntu с ZFS и создание зеркального пула
ZFS — современная файловая система с поддержкой пулов, снимков, контрольных сумм и зеркалирования. В этой статье показано, как выбрать ZFS при установке Ubuntu, добавить диски в зеркальный (RAID 1) пул, настроить права доступа, заменить диск и поддерживать пул в рабочем состоянии. Включены лучшие практики, плейбук для операций и чек-листы для разных ролей.

Быстрые ссылки
- Что такое ZFS?
- Как найти опции ZFS во время установки
- Добавление дополнительных жёстких дисков
- Пулы, RAID 0, RAID 1
- Создание зеркального пула
- Предоставление доступа пользователям
- Удаление пула
- Если у вас только один диск
Что такое ZFS
ZFS — это современная файловая система и менеджер пулов, изначально разработанная в Sun Microsystems для Solaris. Она сочетает в себе возможности файловой системы и тома-менеджера, добавляет встроенные механизмы защиты данных: контрольные суммы, copy-on-write, снимки, отправку/приём снимков (send/receive), сжатие, дедупликацию и RAID-подобные уровни организации данных.
Короткое определение: ZFS — это файловая система с управлением пулом, которая снижает риск тихой порчи данных и упрощает операции копирования и восстановления.
Ключевые свойства (коротко):
- Контрольные суммы каждого блока данных — обнаружение и исправление повреждений.
- Copy-on-write — данные никогда не перезаписываются in-place, это снижает риск корупции при сбоях.
- Снимки и клоны — быстрое создание точных снимков состояния датасетов.
- Отправка/приём снимков — репликация между машинами без остановки службы.
- Встроенное зеркалирование и полосование (vdev mirror, raidz).
- Свойства пула и датасетов, включая сжатие, дедупликацию и шифрование.
Примечание о лицензировании: исходная ZFS принадлежит Oracle, но широко используется и развивается в виде openZFS под управлением OpenZFS. Ubuntu включает поддержку ZFS (openZFS), но официальная поддержка Canonical ограничена некоторыми конфигурациями, например установкой при установке системы.
Факто-бокс
- Минимальный минимум для зеркала: два накопителя.
- Типичные рекомендации: включить сжатие lz4, настроить регулярные scrubs и использовать стабильные идентификаторы дисков (by-id).
По каким причинам ZFS выгоден и когда он не подойдёт
Когда ZFS подходит:
- Нужна защита от тихой порчи данных.
- Важны снимки, репликация и быстрые откаты.
- Планируется управление большим объёмом данных с гибкими параметрами пула.
Когда ZFS не идеален:
- Когда ресурс памяти и I/O ограничены. ZFS любит память для кэша ARC, и дедупликация требует значительных ресурсов.
- На маленьких и одноразовых live-образах, где overhead не окупается.
- Если необходима максимально простая конфигурация для очень старого оборудования.
Альтернативы:
- LVM+ext4/xfs для простоты и совместимости.
- Btrfs как более лёгкая альтернатива с поддержкой снимков, но с другими компромиссами.
Поиск опций ZFS при установке Ubuntu
Во время установки Ubuntu на экране выбора типа установки (Installation Type) нажмите на «Advanced Features» и выберите «Erase disk and use ZFS» (стереть диск и использовать ZFS). Ниже показано, как это выглядит в установщике Ubuntu.

Диалог дополнительных опций позволил выбрать ZFS как целевую файловую систему.

Если выбрана опция ZFS, экран типа установки покажет отметку об этом.

Важно: установка ZFS как корневой файловой системы изменяет схему разделов и загрузчика. Создавайте резервные копии и тестируйте на отдельной машине перед внедрением в прод.
Добавление дополнительных дисков после установки
Если ZFS установлен на одном диске, его можно расширить, добавив новые диски в существующий пул или создав новый пул. Ниже описан пример добавления двух новых дисков на тестовой машине. Сначала нужно определить идентификаторы устройств.
Команда для просмотра блоковых устройств и нужных столбцов:
lsblk -o name,size,fstype,type,mountpoint
Рекомендуем: использовать идентификаторы из /dev/disk/by-id, а не /dev/sdX, чтобы избежать проблем при смене нумерации дисков после перезагрузки.
Пример использования идентификаторов:
sudo zpool create mypool mirror /dev/disk/by-id/ata-XYZ1 /dev/disk/by-id/ata-XYZ2Где by-id даёт стабильный путь, не зависящий от порядка обнаружения устройств.
Полезные команды для инвентаризации
- lsblk — обзор устройств и точек монтирования.
- blkid — типы файловых систем и UUID.
- sudo fdisk -l — информация о разделах и типах таблиц.
- ls -l /dev/disk/by-id — список устойчивых идентификаторов дисков.
Пулы, RAID 0 и RAID 1: как думать о vdev
ZFS собирает хранилище в пул (zpool), который состоит из одного или нескольких vdev (виртуальных устройств). Каждый vdev отвечает за распределение данных и отказоустойчивость. Если vdev — это mirror, то это зеркалирование (аналог RAID 1). Если vdev — это raidz/raidz2, тогда это эквивалент RAID 5/6.
Очень важно: отказ одного vdev приведёт к отказу всего пула, даже если другие vdev в пуле здоровы. Поэтому проектирование vdev — ключевое решение при создании пула.
Эвристика выбора:
- Для простоты и надёжности используйте зеркала (mirror) из пар одинаковых дисков.
- Для плотного использования дискового пространства используйте raidz или raidz2, но учитывайте время восстановления и требования к I/O.
- Избегайте смешивания разных по размеру и скорости дисков в одном vdev.
Создание зеркального пула — подробный пример
В примере мы создаём пул с именем cloudsavvyit, зеркальный из двух дисков /dev/sdb и /dev/sdc.
sudo zpool create -o ashift=12 -O compression=lz4 -O atime=off cloudsavvyit mirror /dev/disk/by-id/ata-XYZ1 /dev/disk/by-id/ata-XYZ2Разбор параметров:
- -o ashift=12 — выравнивание под 4K-сектора. Если у диска 4K-оптимизация, ashift=12 рекомендован. Не менять без понимания.
- -O compression=lz4 — включает сжатие на уровне датасетов; lz4 быстрое и обычно рекомендуется.
- -O atime=off — выключает обновление времени доступа, уменьшает запись I/O.
- cloudsavvyit — имя пула.
- mirror — тип vdev, зеркалирование.
- используйте /dev/disk/by-id вместо /dev/sdX.
После создания проверьте статус пула:
sudo zpool status cloudsavvyitИ просмотрите список датасетов и свойств:
sudo zfs list
sudo zfs get all cloudsavvyitГде монтируется пул
По умолчанию точка монтирования пула создаётся в корне и совпадает с именем пула, например /cloudsavvyit. Вы можете задать собственную точку монтирования при создании:
sudo zpool create -m /srv/storage cloudsavvyit mirror /dev/disk/by-id/ata-XYZ1 /dev/disk/by-id/ata-XYZ2Или позже для датасета:
sudo zfs set mountpoint=/srv/storage cloudsavvyitПрава доступа и организация совместного хранения
Пример схемы предоставления доступа:
- Создаём группы для набора пользователей.
- Создаём каталоги как датасеты или обычные директории внутри пула.
- Назначаем групповые права и SGID для наследования группы.
Шаги (пример):
sudo groupadd csavvy1
sudo usermod -a -G csavvy1 dave
sudo mkdir /cloudsavvyit/data1
sudo chgrp csavvy1 /cloudsavvyit/data1
sudo chmod g+rwsx /cloudsavvyit/data1Пояснение: биты SGID (s в правах) обеспечивают наследование группового владельца для новых файлов и поддиректорий.
Совет: для более тонкой настройки используйте ZFS датасеты и property sharenfs, share или расширенные ACL, если нужно.
Ежедневная эксплуатация и мониторинг
Ключевые команды:
- zpool status — текущее состояние пула и vdev.
- zpool list — сводка пулов и их размера.
- zpool scrub
— инициировать проверку целостности данных (scrub). - zpool import/export — импорт и экспорт пулов при переносе дисков.
- zpool replace/attach/detach — замена дисков и управление vdev.
- zdb — низкоуровневые диагностические команды (только для опытных админов).
Процедура регулярных задач:
- Пускать scrub каждые 1–4 недели в зависимости от объёма данных.
- Следить за ошибками в zpool status и настраивать оповещения.
- Использовать systemd timers или cron для планирования scrub и резервного копирования снимков.
Пример systemd timer: создайте unit для запуска scrubs по расписанию и настройки логгирования.
Замена вышедшего из строя диска — шаги
Сценарий: один диск в зеркале вышел из строя, пул перешёл в degraded.
Плейбук замены:
- Посмотреть статус пула:
sudo zpool status cloudsavvyitВыяснить, какой vdev и какой диск помечен как FAULTED или OFFLINE.
Если диск всё ещё в системе, можно попробовать пометить его offline:
sudo zpool offline cloudsavvyit /dev/disk/by-id/ata-FAULTEDФизически замените диск на новый одинакового или большего размера.
Подключите новый диск, найдите его by-id и запустите replace:
sudo zpool replace cloudsavvyit /dev/disk/by-id/ata-FAULTED /dev/disk/by-id/ata-NEW- Следите за процессом восстановления (resilver):
sudo zpool status cloudsavvyit- После завершения проверьте целостность и запланируйте scrub.
Важно: никогда не используйте сырые /dev/sdX в скриптах, если вы можете использовать /dev/disk/by-id.
Операционный инцидент: план отката и аварийный сценарий
Инцидент: пул перешёл в FAULTED и требует срочного вмешательства.
Быстрый план действий:
- Убедитесь, что есть актуальные резервные копии снимков или реплик.
- Экспортируйте пул если планируете переносить диски на другую машину: sudo zpool export cloudsavvyit
- Если пул повреждён, рассмотрите импорт с опцией -F или -m только в крайнем случае и только при наличии резервных данных.
- Если восстановление невозможно, выполните шаги по восстановлению данных из резервных копий.
Критерии приёмки
- Пул создан и в состоянии ONLINE.
- Доступ к данным возможен для назначенных пользователей.
- Еженедельный scrub успешно проходит без необъяснимых ошибок.
- Замена диска проходит без потери данных после завершения resilver.
Удаление пула
Осторожно: команда уничтожит все данные в пуле.
sudo zpool destroy cloudsavvyitУбедитесь, что все данные сохранены наружу и что вы удаляете правильный пул.
Если у вас только один жёсткий диск
Даже на одном диске ZFS даёт преимущества: контрольные суммы, снимки, сжатие и упрощённый менеджмент данных. Однако зеркалирования не будет и резервные копии по-прежнему обязательны.
Рекомендации по производительности и настройкам
- Включите сжатие lz4: уменьшает объём записи и часто повышает пропускную способность.
- atime=off снижает количество записей, если вам не нужна точная информация о времени доступа.
- Для SSDs рассмотрите настройку ashift в соответствии с логическим размером секторов.
- Не включайте дедупликацию без понимания последствий: экономия места может обернуться сильным ростом использования RAM.
Безопасность и шифрование
Современные версии OpenZFS поддерживают нативное шифрование датасетов. Рекомендации:
- Используйте нативное шифрование для защиты данных в покое.
- Управляйте ключами с помощью надежной KMS или скриптов, требующих безопасного хранения.
- Не храните пасфразы в незашифрованных скриптах.
Пример создания зашифрованного датасета:
sudo zfs create -o encryption=on -o keyformat=passphrase -o keylocation=prompt cloudsavvyit/secureПосле этого при импорте пула потребуется ввод ключа либо использование keylocation.
Резервное копирование и репликация снимков
ZFS send/receive позволяет отправлять инкрементальные снимки на удалённый сервер без остановки сервисов. Общая методика:
- Создать снимок: sudo zfs snapshot cloudsavvyit/data@today
- Отправить: sudo zfs send cloudsavvyit/data@today | ssh remote sudo zfs receive backup/data
- Инкрементальные отправки для экономии трафика.
Радикальная рекомендация: реплицируйте снимки на отдельное устройство или в облако; ZFS не заменяет внешнее резервное копирование.
Диагностика и распространённые ошибки
- Ошибка «no such pool» — проверьте, импортирован ли пул.
- Диск показывает read/write ошибки — проверьте SMART через smartctl.
- Пул degraded — найдите помеченный vdev и замените физический диск.
- Долгий resilver — влияние на работу системы, планируйте в окна обслуживания.
Чек-листы по ролям
Администратор хранилища:
- Использовать идентификаторы by-id при создании пула.
- Включить compression=lz4 и atime=off по умолчанию.
- Настроить периодический scrub и мониторинг.
Десктоп-пользователь:
- Разместить данные в выделенном датасете.
- Попросить администратора настроить группы и права доступа.
Инженер по резервному копированию:
- Настроить send/receive репликацию.
- Тестировать восстановление данных по расписанию.
Плейбук: добавление нового зеркального vdev в существующий пул
- Выберите два новых диска одинакового размера и скорости.
- Проверьте их в /dev/disk/by-id.
- Добавьте новый vdev в пул, например:
sudo zpool add cloudsavvyit mirror /dev/disk/by-id/ata-NEW1 /dev/disk/by-id/ata-NEW2- Проверьте статус и дождитесь синхронизации данных.
Замечание: добавление vdev повышает общую ёмкость, но отказ одного vdev повлияет на весь пул.
Тесты и критерии приёмки
Тестовые кейсы:
- Создание пула: пул должен быть ONLINE и монтироваться по заданной точке.
- Права доступа: пользователь из группы должен иметь доступ, остальные нет.
- Замена диска: при замене данных не теряются, resilver завершается успешно.
- Шифрование: при отключении ключа данные недоступны на импортируемом пуле.
Критерии приёмки перечислены выше в разделе Критерии приёмки.
Мини-глоссарий
- пул (zpool): объединение устройств хранения в единый ресурс.
- vdev: виртуальное устройство внутри пула, формирующее отказоустойчивость.
- snapshot: снимок состояния датасета в определённый момент.
- resilver: процесс восстановления зеркала после замены диска.
- scrub: проверка целостности данных пула по контрольным суммам.
Подводные камни и частые ошибки
- Использование /dev/sdX вместо /dev/disk/by-id может привести к ошибкам при перезагрузке.
- Некачественные или разные по размеру диски в одном vdev приведут к потерям эффективности.
- Включение дедупликации без достаточного объёма RAM может привести к деградации производительности.
Пример сценария восстановления из снимка
- На удалённом сервере хранится набор снапшотов.
- При потере данных на основном сервере выполните zfs receive с последним рабочим снимком.
- Проверьте права доступа и согласованность данных.
Рекомендации по миграции с другой системы
- Экспортируйте пул: sudo zpool export poolname
- Физически переместите диски или подключите к новой системе.
- Импортируйте пул: sudo zpool import poolname
- При проблемах используйте sudo zpool import -f poolname и внимательно проверяйте логи.
Дополнительные ресурсы и следующее чтение
- Документация OpenZFS для глубокого изучения свойств датасетов и пула.
- Руководства по резервному копированию с использованием zfs send/receive.
Завершение
ZFS в Ubuntu даёт мощный набор инструментов для защиты данных, гибкого управления пространством и оперативного восстановления. Для серверов с критичными данными зеркальные пулы (RAID 1) — надёжный выбор, а функционал снимков и репликации делает ZFS очень удобным инструментом для резервного копирования и разработки гибких процедур восстановления. Планируйте архитектуру vdev, используйте стабильные идентификаторы дисков, настраивайте регулярные scrubs и держите резервные копии вне пула.
Important: перед любыми операциями на пулах делайте резервные копии. Проверяйте команды на тестовом стенде.
Похожие материалы
Добавить модератора в Instagram Live
Защита Synology NAS от ботнета StealthWorker
Редактирование JPEG в Adobe Lightroom CC
Отключить экран «Сейчас воспроизводится» на Apple Watch
Как настроить уведомления LinkedIn