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

Установка 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
Автор
Редакция

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

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 — руководство