Btrfs хранит данные не отдельными файлами, а блоками-группами (block group), для которых задан профиль: single, raid1, raid1c3, raid10. Со временем свободное место распределяется неравномерно, а после замены диска часть групп остаётся на старом устройстве. Команда btrfs balance перераспределяет такие группы и при необходимости меняет профиль. Операция полезна, но тяжёлая: перед запуском сделайте резервную копию и оцените нагрузку на диски.

Что именно делает balance

Balance проходит по выбранным блокам, читает занятые экстенты и записывает их заново с новым размещением или профилем. Пустые группы освобождаются, занятые уплотняются. Это не проверка целостности и не замена scrub: ошибки чтения balance не лечит, а при проблемном диске может усугубить ситуацию. Сначала посмотрите текущую картину и статистику ошибок.

btrfs filesystem usage -T /
btrfs filesystem df /
sudo btrfs device stats /
sudo btrfs balance status -v /

В выводе usage важны колонки Data, Metadata и System, а также строка Unallocated. Если метаданные близки к заполнению, балансировка может не запуститься или упасть с ENOSPC. Проверьте, что на файловой системе действительно есть свободное место, а не только «невыделенное».

Когда балансировка нужна, а когда нет

Типичные поводы: добавление или удаление устройства, смена профиля RAID, перераспределение после неудачного device remove, подготовка к сжатию или снятию снапшотов. Регулярный полный balance по расписанию не нужен: он создаёт лишнюю нагрузку и изнашивает диски. Для профилактики достаточно точечных запусков с фильтрами и периодического scrub.

  • Добавили диск и хотите задействовать его ёмкость — балансировка с фильтром по заполненности.
  • Меняете single на raid1 — нужен -dconvert и -mconvert.
  • Метаданные распухли из-за мелких файлов и снапшотов — помогает -musage.
  • Просто «для порядка» — не стоит, если нет конкретной задачи и метрик.

Резервная копия и окно обслуживания

Снапшот Btrfs — удобная точка отката, но он лежит на тех же дисках и не спасает от сбоя массива или ошибки оператора. Сделайте копию на отдельный носитель и проверьте, что она читается. Если используете btrfs send, заранее создайте каталог для снапшотов и приёмник на внешнем Btrfs-диске.

sudo mkdir -p /snapshots /mnt/backup
sudo btrfs subvolume snapshot -r / /snapshots/root-$(date +%F)
sudo btrfs send /snapshots/root-$(date +%F) | sudo btrfs receive /mnt/backup
sudo btrfs subvolume list / | tail -20

Balance запускайте в окно, когда пользователи не работают с диском, а мониторинг не считает кратковременные всплески загрузки аварией. На HDD перераспределение нескольких терабайт может идти часами и сопровождаться непрерывным треском головок. На SSD это быстрее, но всё равно создаёт заметный поток записи. Не запускайте одновременно balance, scrub и массовое копирование.

Фильтры: точечная балансировка

Полный запуск btrfs balance start / переписывает все блоки и на большой файловой системе почти всегда избыточен. Фильтр -dusage=50 выбирает только группы данных, заполненные менее чем на 50 процентов; -musage делает то же для метаданных. -dlimit ограничивает число обрабатываемых групп, а --bg переводит операцию в фон.

sudo btrfs balance start -dusage=50 -musage=70 /
sudo btrfs balance start -dusage=75 -dlimit=10 /
sudo btrfs balance start -mconvert=raid1c3 -dconvert=raid1 /
sudo btrfs balance start --bg -dusage=60 /

Начните с одного фильтра и посмотрите на объём работы: btrfs balance status -v / показывает, сколько блоков осталось. Если операция запущена в фоне, прогресс можно проверять в любой момент. Не ставьте -dusage=100 без понимания: это фактически полная перезапись, только записанная иначе.

Смена профиля RAID

Профиль задаётся отдельно для данных и метаданных. raid1 хранит две копии и требует минимум два устройства, raid1c3 — три копии и три устройства, raid10 — не менее четырёх. Перед конвертацией проверьте, что все устройства доступны и в массиве достаточно свободного места: новое размещение занимает больше блоков.

sudo btrfs device usage /
sudo btrfs balance start -dconvert=raid1 -mconvert=raid1 /
sudo btrfs balance status -v /
sudo btrfs filesystem df /

Если меняете профиль на лету, сначала освободите место и убедитесь, что в dmesg нет ошибок ввода-вывода. Конвертация на почти заполненной файловой системе может остановиться с ENOSPC; добавление устройства или удаление лишних снапшотов решает проблему, но требует отдельного планирования. Не отключайте питание во время смены профиля.

Мониторинг, пауза и отмена

Balance можно приостановить и продолжить, а отмена не повреждает уже перемещённые блоки: завершённые группы остаются в новом виде. Это важно, если операция мешает работе. Однако отмена не откатывает изменения, поэтому решение принимайте осознанно.

sudo btrfs balance status -v /
sudo btrfs balance pause /
sudo btrfs balance resume /
sudo btrfs balance cancel /

Следите за dmesg -w и iostat -x 5: рост очереди и время отклика показывают, что диск перегружен. Если появились ошибки checksum или ввода-вывода, остановите операцию, проверьте btrfs device stats и SMART, а затем займитесь носителем. Балансировка не должна выполняться на сомнительном диске.

Типичные ошибки

  • Запуск полного balance на многотерабайтном HDD без окна обслуживания.
  • Отсутствие проверенной резервной копии перед сменой профиля.
  • Игнорирование ENOSPC и попытки повторить операцию без освобождения места.
  • Одновременный scrub, balance и резервное копирование.
  • Ожидание, что balance исправит ошибки чтения или битые блоки.
  • Балансировка при включённых квотах без оценки их влияния на скорость.

Чек-лист

  • Резервная копия создана и проверена на чтение.
  • btrfs filesystem usage -T и device stats просмотрены.
  • Выбран точечный фильтр, а не полный прогон.
  • Окно обслуживания согласовано, мониторинг предупреждён.
  • Есть план отмены и проверки состояния после операции.
  • Профиль RAID соответствует числу устройств и задаче.

Итог

btrfs balance — инструмент перераспределения, а не универсальная починка. Он возвращает массиву равномерность после замены диска, меняет профиль и освобождает недозаполненные группы, но требует свободного места, терпения и копии данных. Запускайте его с фильтрами, следите за нагрузкой и не превращайте в ежемесячный ритуал: тогда польза будет реальной, а риск потерять данные или получить многочасовую деградацию — минимальным.

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.

Поделиться: Telegram ВКонтакте