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

Btrfs упрощает использование нескольких жёстких дисков: вместо восприятия каждого диска как отдельного устройства вы создаёте единый логический пул, в который можно класть файлы свободно. Кроме компактного управления, Btrfs поддерживает профили распределения данных и метаданных (аналог RAID), снапшоты, проверку контрольных сумм и онлайн-операции по добавлению/удалению устройств.
Что мы разберём
- Как создать файловую систему Btrfs и объединить несколько дисков в пул
- Какие профили данных выбирать (single, raid0, raid1, raid10) и чем они отличаются
- Как конвертировать профиль (например single → raid1)
- Что делать при отказе диска: удаление, замена, восстановление
- Настройка автоматического монтирования в /etc/fstab и оптимальные опции для HDD/SSD
- Практические чеклисты, сценарии отказа, командами для диагностики и обслуживания
Кому это полезно
- Домашним пользователям с несколькими дисками, желающим объединить простое хранилище
- Администраторам, которые хотят гибкие профили данных без внешнего RAID
- Любым, кто ценит онлайн-управление дисками и снимки (snapshots)
Important: если нужен максимально проверенный и простой вариант для одного диска, ext4 остаётся практичным выбором. Btrfs подходит для персонального и лабораторного использования, а также для production-систем при внимательном подходе к резервированию и мониторингу.
Введение в Btrfs — коротко
Btrfs (B‑tree filesystem) — современная файловая система с поддержкой: объединения дисков, снапшотов, сжатия, контрольных сумм и онлайн-операций. Термины:
- Пул (pool): логическое пространство, созданное из нескольких устройств.
- Профиль (-d, -m): способ размещения данных и метаданных (single, raid0, raid1, raid10 и др.).
- Балансировка (balance): перераспределение данных после добавления/удаления устройства.
Исходная конфигурация примера
В примерах ниже используется конфигурация из четырёх дисков:
- /dev/sdb — 1 TB
- /dev/sdc — 1 TB
- /dev/sdd — 500 GB
- /dev/sde — 500 GB
Дополнительно предполагается /dev/sda с ОС и загрузчиком — он остаётся отдельным и не участвует в пуле.
Создание файловой системы Btrfs и объединение дисков
Если вы хотите создать Btrfs на одном диске:
sudo mkfs.btrfs /dev/sdbМонтируем первый диск:
sudo mount /dev/sdb /mntФорматируем остальные диски (если ещё не отформатированы):
sudo mkfs.btrfs /dev/sdc
sudo mkfs.btrfs /dev/sdd
sudo mkfs.btrfs /dev/sdeДобавляем устройства в пул, монтированный в /mnt:
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 и профиль данных сразу:
sudo mkfs.btrfs -d single /dev/sdb /dev/sdc /dev/sdd /dev/sdeФлаги и профили — кратко:
- -d single: данные хранятся как в одном пространстве (полезно для дисков разного размера), аналог RAID0 по распределению, но не зеркалирование.
- -d raid0: полосование данных по дискам (повышение скорости и ёмкости, нет избыточности).
- -d raid1: зеркалирование каждой кусочной единицы данных на двух устройствах (двойная копия). Требует как минимум 2 устройств.
- -d raid10: комбинация полос и зеркал, требует ≥4 устройств.
Примечание по расчёту полезной ёмкости: при raid1 полезная ёмкость примерно равна сумме размеров устройств, делённой на 2 (при одинаковых дисках — ровно половина). Для примера с 1+1+0.5+0.5 TB (итого 3 TB) режим raid1 даст около 1.5 TB доступного пространства. Режим raid10 в данном наборе даст 1.5 TB (1 TB из двух 1 TB в зеркале + 0.5 TB из двух 0.5 TB в зеркале). Режим single выдаст суммарные 3 TB, но без защиты данных.
Конвертация профиля файловой системы на рабочем пуле
Можно изменить профиль данных и/или метаданных без переформатирования, если конфигурация допускает новую схему. Например, перевод в RAID1:
Сначала смонтируйте файловую систему (если нужно):
sudo mount /dev/sdb1 /mntПотом запустите баланс с конверсией:
sudo btrfs balance start -dconvert=raid1 -mconvert=raid1 /mnt- -dconvert меняет профиль размещения данных;
- -mconvert меняет профиль метаданных;
- Можно конвертировать только данные или только метаданные по одной опции.
Ограничения: некоторые конверсии требуют минимального числа устройств (например raid10 — ≥4 устройств). Если не хватает места для выполнения перетасовки данных, команда может завершиться с ошибкой.
Диагностика и базовые команды обслуживания
Полезные команды для проверки состояния пула и устройств:
sudo btrfs filesystem show /mnt # показывает устройства, UUID и профили
sudo btrfs filesystem df /mnt # показывает использование пространства по профилям
sudo btrfs device stats /mnt # статистика ошибок устройств
sudo btrfs scrub start -B -R /mnt # запускает scrub и ждёт результата (-B), повторяет ошибки (-R)Scrub — фоновая проверка контрольных сумм, полезна для своевременного обнаружения проблем на дисках.
Что делать при отказе диска (пошагово)
Если диск в пуле вышел из строя, выполните следующие шаги:
- Временный монтируем с опцией degraded (если требуется):
sudo mount -o degraded /dev/sdb /mnt- Удаляем отсутствующее устройство из пула:
sudo btrfs device delete missing /mnt- После удаления запустите баланс и scrub, чтобы перераспределить данные и проверить целостность:
sudo btrfs filesystem balance start /mnt
sudo btrfs scrub start /mnt- Если диск подлежит замене, вставьте новый диск и добавьте его:
sudo btrfs device add /dev/sdf /mnt
sudo btrfs filesystem balance /mnt- Для замены конкретного устройства используйте replace (он выполняет копирование с минимальным простоя):
sudo btrfs replace start -B /dev/sdc /dev/sdf /mntImportant: если у вас не было зеркалирования (raid1/raid10) или другой избыточности, данные, находившиеся исключительно на отказавшем диске, будут потеряны.
Удаление устройства из пула
Чтобы убрать устройство, когда файловая система смонтирована в /mnt:
sudo btrfs device delete /dev/sdc /mntКоманда перемещает данные с удаляемого устройства на остальные. Операция может занять продолжительное время и завершиться неудачей, если на оставшихся устройствах недостаточно свободного места.
Автоматическое монтирование через /etc/fstab
Простой пример строки в /etc/fstab, чтобы монтировать пул автоматически:
/dev/sdb /mnt btrfs device=/dev/sdb,device=/dev/sdc,device=/dev/sdd,device=/dev/sde 0 0Важно: использование явных device= в fstab фиксирует список устройств, но при отказе диска и монтировании с опцией degraded потребуется ручная правка или mtab-опции. Альтернативный подход — монтировать по UUID или использовать systemd mount unit с опцией AllowDegraded=true.
Рекомендованные параметры монтирования
Для больших HDD-русов (архивного хранения):
compress-force=zlib,autodefrag,nospace_cacheПояснения:
- compress-force=zlib — принудительное сжатие (zlib даёт хорошее сжатие, но нагрузку на CPU);
- autodefrag — автоматическая дефрагментация мелких изменяемых файлов;
- nospace_cache/space_cache — управление внутренним кэшем распределения свободного места (в новых ядрах используется space_cache).
Для SSD обычно подходят другие опции:
noatime,compress=lzo,ssd,discard,space_cache,autodefrag,inode_cache- noatime уменьшает записи при чтении файлов;
- compress=lzo — быстрое сжатие с низкой нагрузкой CPU;
- discard — включение TRIM (проверьте поддержку контроллера/диска);
- space_cache / inode_cache — ускоряют резервирование и работу с метаданными.
Пример полной строки для SSD в /etc/fstab:
/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Практические рекомендации и чеклист перед развёртыванием
Чеклист перед созданием пула на реальной системе:
- Сделайте резервную копию критичных данных (backup). Btrfs удобен, но ошибки конфигурации и аппаратные отказы возможны.
- Проверяйте совместимость ядра / дистрибутива: используйте актуальные ядра и утилиты btrfs-progs.
- Планируйте мониторинг: настроить cron/ systemd-timers для регулярного scrub и проверки ‘btrfs device stats’.
- Тестируйте процедуру восстановления (замена диска) в тестовой среде.
- Не используйте btrfs в production без стратегии резервирования и восстановления.
Когда Btrfs не подходит или бывает проблемным
- Если у вас один диск и нужен максимально простой и проверенный FS — ext4 чаще предпочтителен.
- Если ожидается высокий уровень I/O с низкой задержкой на специфичных конфигурациях — профиль и опции надо тщательно тестировать.
- Для некоторых особых enterprise-решений с аппаратным RAID или с требованием специфических сертификаций возможно предпочтительнее использовать ПО/аппаратные решения с длительной историей эксплуатации.
Альтернативы и сравнение (кратко)
- mdadm + LVM + ext4/xfs: классический стек программного RAID + логический том + проверенные файловые системы. Даёт предсказуемость и широкую совместимость.
- ZFS: продвинутая файловая система с встроенным RAIDZ, снапшотами и самовосстановлением; требует дополнительных ресурсов и иногда лицензий/пакетов.
- Btrfs: гибкость, онлайн-операции, интеграция снапшотов и Pool/Volume без LVM.
Выбор зависит от приоритетов: гибкость и функциональность vs зрелость и стабильность в специфичных сценариях.
Методика безопасной замены диска (SOP)
- Убедитесь, что имеете резервную копию.
- Проверяйте логи и btrfs device stats:
sudo btrfs device stats /mnt. - Если диск деградировал, смонтируйте с degraded при необходимости:
sudo mount -o degraded /dev/sdb /mnt- Замените физический диск, подключите новый /dev/sdf.
- Замену в пуле можно выполнить командой replace:
sudo btrfs replace start -B /dev/sdc /dev/sdf /mnt- Дождитесь окончания и проверьте результат
btrfs filesystem df /mntиbtrfs filesystem show /mnt. - Запустите scrub и баланс:
sudo btrfs scrub start /mnt
sudo btrfs filesystem balance start /mntПрактические примеры команд проверки и восстановления
Проверка состояния:
sudo btrfs filesystem show
sudo btrfs filesystem df /mnt
sudo btrfs device stats /mntВосстановление при «missing» устройстве:
sudo mount -o degraded /dev/sdb /mnt
sudo btrfs device delete missing /mnt
sudo btrfs filesystem balance start /mntРиски и способы смягчения
Риск: потеря данных при отсутствии зеркалирования. Митигирование: регулярные внешние резервные копии.
Риск: несовместимость старых версий btrfs-progs/ядра с новыми возможностями. Митигирование: обновление ПО/тестирование в staging.
Риск: длительная операция балансировки и высокая нагрузка. Митигирование: планирование окон обслуживания и мониторинг нагрузок.
Краткая шпаргалка по наиболее важным командам
- mkfs.btrfs — форматирование
- mount /dev/sdX /mnt — монтирование
- btrfs device add/delete — добавление/удаление устройств
- btrfs replace — замена устройства
- btrfs balance — перераспределение данных
- btrfs scrub — проверка контрольных сумм
- btrfs filesystem df/show — диагностика использования и состояния
Критерии приёмки
- Файловая система успешно монтируется автоматически после перезагрузки.
- При удалении/замене устройства данные не теряются в режиме с зеркалированием.
- Scrub проходит без необработанных ошибок в течение запланированного окна.
- Мониторинг оповещает о проблемах устройств (SMART, btrfs device stats).
Сводка
Btrfs — мощный инструмент для объединения дисков в единый пул с опциями зеркалирования и онлайн-управлением. Он удобен для домашних серверов и гибких конфигураций, но требует внимания к резервированию, мониторингу и совместимости со стэком системы. Используйте chk-lists и тестовые сценарии перед применением в критичных средах.
Image Credit: William Hook
Похожие материалы
Резервная копия и восстановление Windows Terminal
Отключить звук запуска Windows
Как удалить профиль пользователя в Windows 11
Писк и щелчки в Sony WH-1000XM4 — исправление
Не запускается служба WLAN AutoConfig — решение