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

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: безопасная замена диска — пошагово
- Проверить состояние пула: sudo btrfs filesystem df /mnt и sudo btrfs device stats /mnt.
- Если нужно — добавить временное устройство (если места мало): sudo btrfs device add /dev/sdx /mnt; sudo btrfs filesystem balance /mnt.
- Удалить старый диск: sudo btrfs device delete /dev/sdy /mnt.
- Дождаться завершения балансировки и проверки: sudo btrfs device scan; sudo btrfs scrub start /mnt.
- Установить новый диск и добавить его в пул: 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 при отказе диска
- Увидели ошибку SMART или потерю устройства.
- Попробуйте примонтировать пул: sudo mount -o degraded /dev/sdb /mnt.
- Удалите missing-устройство: sudo btrfs device delete missing /mnt.
- Добавьте новый диск: sudo btrfs device add /dev/sdz /mnt.
- Запустите балансировку и scrub: sudo btrfs filesystem balance /mnt && sudo btrfs scrub start -Bd /mnt.
- Мониторьте логи и статус до завершения.
Краткое резюме
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
Похожие материалы
Удалённые рейды в Pokémon GO — руководство

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

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

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

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