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

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

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

Пересылка почты Outlook ↔ Gmail: полное руководство
Почта

Пересылка почты Outlook ↔ Gmail: полное руководство

Как узнать, что пора менять батарейку AirTag
Гаджеты

Как узнать, что пора менять батарейку AirTag

Как удалить устройства из Google Home
Умный дом

Как удалить устройства из Google Home

Вернуть «Open command window here» в Windows 11
Windows

Вернуть «Open command window here» в Windows 11

Подключение Bluetooth-наушников к Wear OS
Гаджеты

Подключение Bluetooth-наушников к Wear OS

Запустить успешную страницу на Patreon
Монетизация

Запустить успешную страницу на Patreon