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

Btrfs: объединение дисков и зеркалирование в Linux

8 min read Файловые системы Обновлено 25 Sep 2025
Btrfs: пул дисков и зеркалирование в Linux
Btrfs: пул дисков и зеркалирование в Linux

Общий пул хранилища Btrfs с несколькими жесткими дисками

Btrfs — это современная файловая система для Linux с встроенными возможностями, которые ранее требовали отдельных подсистем: пул дисков, различные профили распределения данных (RAID-подобные), снапшоты, контроль целостности и многое другое. В этой статье мы подробно разберём, как создать пул из нескольких дисков, как включать зеркалирование, как безопасно удалять и заменять диски, а также какие опции монтирования использовать для HDD и SSD.

Важно: Btrfs активно развивается. Большинство базовых возможностей стабильно используется в продакшне, но для критичных рабочих нагрузок всегда проверяйте совместимость с вашей дистрибуцией и делайте резервные копии перед изменениями на дисках.

Краткие определения

  • Пул хранения: объединённое пространство, которое реально распределяется по нескольким физическим устройствам.
  • Профиль данных (-d): правило размещения пользовательских данных (single, raid0, raid1, raid10 и т. д.).
  • Профиль метаданных (-m): правило размещения метаданных; важно для целостности и восстановления.

Когда Btrfs хорош и когда лучше искать альтернативу

Important: Btrfs отлично подходит для домашнего NAS, лабораторий и многих серверных задач. Однако для простого одно-дискового компьютера ext4 остаётся более предсказуемым. Для крупных корпоративных систем с серьёзными требованиями к устойчивости и поддержке стоит сравнить с ZFS или программным mdadm-RAID + LVM.

Когда Btrfs не лучший выбор:

  • Если вам нужна сертифицированная поддержка производителя на уровне корпоративного хранилища.
  • Если вы полагаетесь на очень специфичные устаревшие функции, отсутствующие в Btrfs.
  • Если вы не готовы тестировать и иметь план отката перед изменением конфигурации RAID-профиля.

Типичный сценарий: четыре диска разного размера

Предположим набор из четырёх дисков:

  • /dev/sdb — 1 ТБ
  • /dev/sdc — 1 ТБ
  • /dev/sdd — 500 ГБ
  • /dev/sde — 500 ГБ

Ещё есть /dev/sda с системой — её мы не трогаем.

Итоговая суммарная RAW-ёмкость — 3 ТБ. В зависимости от выбранного профиля Btrfs вы получите разное доступное место.

Создание файловой системы Btrfs на одном диске

Создаём Btrfs на первом диске и монтируем как /mnt:

sudo mkfs.btrfs /dev/sdb
sudo mount /dev/sdb /mnt

Если вы хотите сразу создать пул из всех четырёх дисков (одним вызовом), используйте:

sudo mkfs.btrfs -d single /dev/sdb /dev/sdc /dev/sdd /dev/sde

Пояснения:

  • -d single: данные распределяются по устройствам без зеркалирования. Этот профиль подходит при разной ёмкости дисков.
  • -d raid0: как striping (RAID0) — требуется одинаковый размер устройств для прогнозируемого поведения.
  • -d raid1: зеркалирование данных по устройствам; при разном размере устройств итоговое доступное место зависит от наименьшего диска и структуры зеркалирования.
  • -d raid10: сочетание зеркалирования и стрипинга; требует чётного числа устройств и даёт компромисс между скоростью и отказоустойчивостью.

Аналогично для метаданных можно указывать -m single|raid1|raid10 и т. д. Метаданные в Btrfs критичны: для лучшей устойчивости имеет смысл зеркалить метаданные, даже если вы используете single для данных.

Добавление дисков в уже существующий пул

Если вы создали Btrfs сначала на /dev/sdb и позже хотите добавить остальные диски в этот пул, выполняйте:

# Если ещё не замонтировано
sudo mount /dev/sdb /mnt

# Форматируем остальные (если требуется)
sudo mkfs.btrfs /dev/sdc
sudo mkfs.btrfs /dev/sdd
sudo mkfs.btrfs /dev/sde

# Добавляем устройства в пул
sudo btrfs device add /dev/sdc /mnt
sudo btrfs device add /dev/sdd /mnt
sudo btrfs device add /dev/sde /mnt

# Балансируем распределение данных по новым устройствам
sudo btrfs filesystem balance /mnt

Примечание: mkfs на добавляемых дисках не всегда обязателен — btrfs device add примет «чистый» диск, но форматирование с mkfs.btrfs помогает избежать старой разметки. Команда balance перераспределяет существующие данные по всем устройствам.

Конвертация профиля в уже существующей файловой системе

Вы можете поменять профиль хранения без пересоздания файловой системы. Например, конвертация в RAID1 для данных и метаданных:

sudo mount /dev/sdb1 /mnt
sudo btrfs balance start -dconvert=raid1 -mconvert=raid1 /mnt

Здесь флаги -dconvert и -mconvert позволяют изменить профиль данных и метаданных. Помните: некоторые конверсии требуют определённого числа устройств (например, raid10 — не менее четырёх устройств).

Поведение при выходе диска из строя

Если устройство вышло из строя, монтируйте пул в режиме degraded и удаляйте отсутствующее устройство, чтобы восстановить работоспособность:

sudo mount -o degraded /dev/sdb /mnt
sudo btrfs device delete missing /mnt

Важно: если у вас не было зеркалирования (raid1/raid10), данные, хранящиеся только на умершем диске, потеряны. Если же был raid1/raid10, Btrfs попытается работать дальше с оставшимися копиями.

Замена или удаление устройства из пула

Чтобы удалить конкретное устройство (например, /dev/sdc):

sudo btrfs device delete /dev/sdc /mnt

Команда переместит данные с удаляемого устройства на остальные. Если места недостаточно, операция завершится ошибкой. Для плановой замены диска рекомендуем заранее добавить временно другой диск или убедиться, что свободного места хватает.

SOP: безопасная замена диска — пошагово

  1. Проверить состояние пула: sudo btrfs filesystem df /mnt и sudo btrfs device stats /mnt.
  2. Если нужно — добавить временное устройство (если места мало): sudo btrfs device add /dev/sdx /mnt; sudo btrfs filesystem balance /mnt.
  3. Удалить старый диск: sudo btrfs device delete /dev/sdy /mnt.
  4. Дождаться завершения балансировки и проверки: sudo btrfs device scan; sudo btrfs scrub start /mnt.
  5. Установить новый диск и добавить его в пул: sudo btrfs device add /dev/sdz /mnt; sudo btrfs filesystem balance /mnt.

Автоматическое монтирование через /etc/fstab

Пример строки для автоматического монтирования пула (HDD конфигурация):

/dev/sdb /mnt btrfs device=/dev/sdb,device=/dev/sdc,device=/dev/sdd,device=/dev/sde 0 0

Если вы распределяете устройства и хотите задать параметры монтирования, добавьте опции через запятую.

Рекомендуемые опции монтирования

Для больших массивов HDD подойдёт набор опций:

compress-force=zlib,autodefrag,nospace_cache

Для SSD — опции ориентированы на уменьшение записи и ускорение доступа:

noatime,compress=lzo,ssd,discard,space_cache,autodefrag,inode_cache

Пример полной строки для SSD-конфигурации:

/dev/sdb /mnt btrfs device=/dev/sdb,device=/dev/sdc,device=/dev/sdd,device=/dev/sde,noatime,compress=lzo,ssd,discard,space_cache,autodefrag,inode_cache 0 0

Пояснение ключевых опций:

  • compress=… — сжимает данные на лету, экономит место и может ускорить I/O для медленных устройств.
  • autodefrag — помогает при фрагментации файлов, особенно для часто меняющихся маленьких файлов.
  • nospace_cache / space_cache — кэш метаданных пространств; поведение менялось между версиями Btrfs: проверяйте совместимость с вашим ядром.
  • discard — использование TRIM для SSD; с некоторыми контроллерами может быть лучше регулярный fstrim.

Контроль состояния и диагностика

Полезные команды для диагностики:

# Показать использованные и свободные блоки
sudo btrfs filesystem df /mnt

# Показать устройства пула
sudo btrfs filesystem show /mnt

# Запустить scrub для проверки и исправления плохих секторов
sudo btrfs scrub start -Bd /mnt

# Проверить ошибки устройств
sudo btrfs device stats /mnt

Scrub проверяет целостность и при зеркалировании пытается восстановить повреждённые данные из копий. Регулярно запускайте scrub на серверах/хранилищах.

Альтернативные подходы

Если Btrfs нельзя или нежелательно использовать, рассмотрите:

  • mdadm + LVM: зрелая комбинация для RAID + логических томов.
  • ZFS: расширенные возможности, сильная целостность данных, но другая модель лицензирования и потребление памяти.
  • LVM thin provisioning: гибкость в управлении томами, но без встроенных снапшотов на уровне файловой системы.

Каждый вариант имеет свои преимущества: Btrfs хорош для интегрированного управления (файловая система + пул), mdadm+LVM даёт проверенную стабильность и гибкость, ZFS — сильную защиту целостности.

Ментальные модели и правила принятия решения

  • Пул хранения = коробка, в которую вы кладёте файлы; Btrfs распределяет их по нескольким дискам.
  • RAID-профиль управляет тем, как именно файлы реплицируются и в каких объёмах.
  • Если вам важна целостность метаданных — зеркальте метаданные (-m raid1).
  • Если у вас разноразмерные диски и вы хотите использовать всё место — single часто проще, но без зеркалирования.

Контрольные списки по ролям

Администратор (сервер/домашний NAS):

  • Тестировать процедуру восстановления в лаборатории.
  • Планировать регулярный scrub и мониторинг SMART.
  • Держать запасной диск и план замены.

Домашний пользователь:

  • Делать резервные копии наиболее ценных данных.
  • Использовать compress на медленных HDD для экономии места.
  • Не экспериментировать с критичными данными без резервной копии.

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

Критерии приёмки для новой Btrfs-конфигурации:

  • Пул монтируется автоматически после перезагрузки.
  • Данные читаются/записываются с ожидаемой производительностью.
  • При эмуляции отказа одного диска (удалении) пул остаётся доступен в режиме degraded, если задан профиль зеркалирования.
  • После замены диска данные корректно перенеслись на новый диск без ошибок.

Тестовые сценарии:

  • Создать файл большого размера, симулировать отказ диска, проверить доступность.
  • Запустить scrub и проверить статус и отчёты об исправлениях.
  • Измерить влияние compress на throughput и занимаемое место.

Частые ошибки и как их избежать

  • Не проверять совместимость опций монтирования с вашей версией ядра и модуля btrfs — читайте changelog.
  • Пытаться конвертировать в RAID-профиль, не имея достаточного числа устройств.
  • Игнорировать SMART и мониторинг дисков — своевременная замена предотвращает потерю данных.

Советы по миграции и совместимости

  • Перед крупными операциями делайте резервную копию самых важных данных.
  • Если вы мигрируете с ext4, есть инструмент btrfs-convert, но он меняет структуру диска — тестируйте процесс и имейте бэкап.
  • Пакеты btrfs-progs и версия ядра могут влиять на доступность отдельных команд и опций — используйте поддерживаемую комбинацию в вашей дистрибуции.

Факто-бокс: требования и ограничения

  • Для RAID10 требуется минимум 4 устройства.
  • RAID1 в Btrfs зеркалирует данные парами, но при разноразмерных дисках итоговая доступная ёмкость зависит от расположения зеркал.
  • Балансировка и удаление устройств могут занимать продолжительное время при больших объёмах данных.

Решение проблем: пример runbook при отказе диска

  1. Увидели ошибку SMART или потерю устройства.
  2. Попробуйте примонтировать пул: sudo mount -o degraded /dev/sdb /mnt.
  3. Удалите missing-устройство: sudo btrfs device delete missing /mnt.
  4. Добавьте новый диск: sudo btrfs device add /dev/sdz /mnt.
  5. Запустите балансировку и scrub: sudo btrfs filesystem balance /mnt && sudo btrfs scrub start -Bd /mnt.
  6. Мониторьте логи и статус до завершения.

Краткое резюме

Btrfs объединяет управление файловой системой и пулом устройств в единую систему, упрощая создание гибких и отказоустойчивых конфигураций. Он особенно удобен для домашних серверов и небольших NAS: команды просты, а набор опций позволяет оптимизировать под HDD и SSD. Тем не менее перед использованием в критичных средах проверьте версии, протестируйте сценарии восстановления и всегда держите резервные копии.

Стек жёстких дисков как метафора пула хранилища

Фото: William Hook

Полезные команды на одной карточке (cheat sheet)

# Создать Btrfs на одном диске
sudo mkfs.btrfs /dev/sdb

# Создать пул сразу на нескольких устройствах
sudo mkfs.btrfs -d single /dev/sdb /dev/sdc /dev/sdd /dev/sde

# Добавить устройство в уже смонтированный пул
sudo btrfs device add /dev/sdc /mnt

# Балансировка
sudo btrfs filesystem balance /mnt

# Конвертация профиля
sudo btrfs balance start -dconvert=raid1 -mconvert=raid1 /mnt

# Удалить отсутствующее устройство
sudo mount -o degraded /dev/sdb /mnt
sudo btrfs device delete missing /mnt

# Удалить конкретное устройство
sudo btrfs device delete /dev/sdc /mnt

# Диагностика
sudo btrfs filesystem df /mnt
sudo btrfs filesystem show /mnt
sudo btrfs scrub start -Bd /mnt

Вопросы для обсуждения

Какой у вас сценарий: домашний NAS, медиасервер или рабочая машина? Какие RAID-профили вы считаете оптимальными для своего набора дисков? Пишите в комментариях.

Автор изображения: William Hook

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

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

Удалённые рейды в Pokémon GO — руководство
Игры

Удалённые рейды в Pokémon GO — руководство

Установка Xfinity интернета дома — быстрое руководство
Интернет

Установка Xfinity интернета дома — быстрое руководство

Instagram не работает на Windows 11 — как исправить
Технологии

Instagram не работает на Windows 11 — как исправить

Изменить браузер по умолчанию в Windows 11
Windows

Изменить браузер по умолчанию в Windows 11

Btrfs: пул дисков и зеркалирование в Linux
Файловые системы

Btrfs: пул дисков и зеркалирование в Linux

CyanogenMod 12.1 на Lenovo A2010 — установка
Android ROM

CyanogenMod 12.1 на Lenovo A2010 — установка