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

Установка Ubuntu с ZFS и создание зеркального пула

10 min read Файловые системы Обновлено 06 Dec 2025
Установка Ubuntu с ZFS и зеркальным пулом
Установка Ubuntu с ZFS и зеркальным пулом

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

Изображение логотипа или диаграммы ZFS

Быстрые ссылки

  • Что такое 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.

Кнопка Advanced Features на экране типа установки

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

Опции ZFS в диалоге Advanced Features

Если выбрана опция 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.

Плейбук замены:

  1. Посмотреть статус пула:
sudo zpool status cloudsavvyit
  1. Выяснить, какой vdev и какой диск помечен как FAULTED или OFFLINE.

  2. Если диск всё ещё в системе, можно попробовать пометить его offline:

sudo zpool offline cloudsavvyit /dev/disk/by-id/ata-FAULTED
  1. Физически замените диск на новый одинакового или большего размера.

  2. Подключите новый диск, найдите его by-id и запустите replace:

sudo zpool replace cloudsavvyit /dev/disk/by-id/ata-FAULTED /dev/disk/by-id/ata-NEW
  1. Следите за процессом восстановления (resilver):
sudo zpool status cloudsavvyit
  1. После завершения проверьте целостность и запланируйте 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 позволяет отправлять инкрементальные снимки на удалённый сервер без остановки сервисов. Общая методика:

  1. Создать снимок: sudo zfs snapshot cloudsavvyit/data@today
  2. Отправить: sudo zfs send cloudsavvyit/data@today | ssh remote sudo zfs receive backup/data
  3. Инкрементальные отправки для экономии трафика.

Радикальная рекомендация: реплицируйте снимки на отдельное устройство или в облако; ZFS не заменяет внешнее резервное копирование.

Диагностика и распространённые ошибки

  • Ошибка «no such pool» — проверьте, импортирован ли пул.
  • Диск показывает read/write ошибки — проверьте SMART через smartctl.
  • Пул degraded — найдите помеченный vdev и замените физический диск.
  • Долгий resilver — влияние на работу системы, планируйте в окна обслуживания.

Чек-листы по ролям

Администратор хранилища:

  • Использовать идентификаторы by-id при создании пула.
  • Включить compression=lz4 и atime=off по умолчанию.
  • Настроить периодический scrub и мониторинг.

Десктоп-пользователь:

  • Разместить данные в выделенном датасете.
  • Попросить администратора настроить группы и права доступа.

Инженер по резервному копированию:

  • Настроить send/receive репликацию.
  • Тестировать восстановление данных по расписанию.

Плейбук: добавление нового зеркального vdev в существующий пул

  1. Выберите два новых диска одинакового размера и скорости.
  2. Проверьте их в /dev/disk/by-id.
  3. Добавьте новый vdev в пул, например:
sudo zpool add cloudsavvyit mirror /dev/disk/by-id/ata-NEW1 /dev/disk/by-id/ata-NEW2
  1. Проверьте статус и дождитесь синхронизации данных.

Замечание: добавление vdev повышает общую ёмкость, но отказ одного vdev повлияет на весь пул.

Тесты и критерии приёмки

Тестовые кейсы:

  • Создание пула: пул должен быть ONLINE и монтироваться по заданной точке.
  • Права доступа: пользователь из группы должен иметь доступ, остальные нет.
  • Замена диска: при замене данных не теряются, resilver завершается успешно.
  • Шифрование: при отключении ключа данные недоступны на импортируемом пуле.

Критерии приёмки перечислены выше в разделе Критерии приёмки.

Мини-глоссарий

  • пул (zpool): объединение устройств хранения в единый ресурс.
  • vdev: виртуальное устройство внутри пула, формирующее отказоустойчивость.
  • snapshot: снимок состояния датасета в определённый момент.
  • resilver: процесс восстановления зеркала после замены диска.
  • scrub: проверка целостности данных пула по контрольным суммам.

Подводные камни и частые ошибки

  • Использование /dev/sdX вместо /dev/disk/by-id может привести к ошибкам при перезагрузке.
  • Некачественные или разные по размеру диски в одном vdev приведут к потерям эффективности.
  • Включение дедупликации без достаточного объёма RAM может привести к деградации производительности.

Пример сценария восстановления из снимка

  1. На удалённом сервере хранится набор снапшотов.
  2. При потере данных на основном сервере выполните zfs receive с последним рабочим снимком.
  3. Проверьте права доступа и согласованность данных.

Рекомендации по миграции с другой системы

  • Экспортируйте пул: 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: перед любыми операциями на пулах делайте резервные копии. Проверяйте команды на тестовом стенде.

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

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

Добавить модератора в Instagram Live
Социальные сети

Добавить модератора в Instagram Live

Защита Synology NAS от ботнета StealthWorker
Кибербезопасность

Защита Synology NAS от ботнета StealthWorker

Редактирование JPEG в Adobe Lightroom CC
Фото

Редактирование JPEG в Adobe Lightroom CC

Отключить экран «Сейчас воспроизводится» на Apple Watch
Guides

Отключить экран «Сейчас воспроизводится» на Apple Watch

Как настроить уведомления LinkedIn
Социальные сети

Как настроить уведомления LinkedIn

Как пользоваться новым iPhone без кнопки Home
Гаджеты

Как пользоваться новым iPhone без кнопки Home