Гайд: Траблшутинг BTRFS: балансировка btrfs balance, очистка scrub и восстановление subvolumes
Архитектура Copy-on-Write (CoW) и двухуровневого распределения пространства BTRFS
Файловая система BTRFS (B-tree File System) построена на парадигме Copy-on-Write (CoW) со встроенным пулом накопителей (Multi-device Pooling), поддержкой аппаратных снимков (Subvolumes/Snapshots) и контрольных сумм данных (Data Checksums). Пространство BTRFS разделено на два уровня: физические чанки (Chunks размером по 1 Гб под Data и Metadata) и виртуальные аллокации. Из-за архитектуры CoW и фрагментации чанков BTRFS подвержена специфическим критическим сбоям:
- Ложное переполнение диска (No space left on device / ENOSPC): Команда
df -hпоказывает десятки свободных гигабайт, но при записи возникает ошибка 28 из-за исчерпания аллоцированных метаданных чанков (Metadata Chunks Exhaustion); - BTRFS: checksum error at logical ...: Детектирование повреждения блоков данных или метаданных при чтении;
- Переход в аварийный Read-Only: Блокировка пула при ошибках целостности деревьев транзакций (B-tree root corruption).
Бизнес-риски
Остановка работы систем виртуализации (Proxmox / Docker / LXC), блокировка хостов резервного копирования, потеря актуальных снапшотов.
Сравнение системных команд обслуживания BTRFS
| Команда | Что выполняет | Влияние на работающую систему |
|---|---|---|
btrfs scrub | Фоновое побайтовое чтение всех данных и сверка контрольных сумм (Data Integrity Check). Автовосстановление в RAID1/RAID10. | Безопасно, выполняется на лету на смонтированной ФС. |
btrfs balance | Дефрагментация и перераспределение частично заполненных чанков (Chunk Compaction). Высвобождает сырое дисковое пространство. | Создает высокую нагрузку на дисковый I/O. |
btrfs check --repair | Низкоуровневое офлайн-восстановление поврежденных B-деревьев. | Опасно! Выполняется ТОЛЬКО на размонтированном диске в крайних случаях. |
Регламент обслуживания и восстановления файловой системы BTRFS
Сценарий 1: Решение проблемы «No space left on device» при наличии свободного места
Проверьте реальное распределение чанков данных и метаданных:
# 1. Просмотр детального распределения пула BTRFS:
sudo btrfs filesystem usage /mnt/btrfs-data
# Если в строке Metadata поле 'Free' близко к 0, а 'Unallocated' равно 0 -> чанки заблокированы!
# 2. Выполнение ступенчатой балансировки для уплотнения пустых чанков:
# Начинаем с чанков данных, заполненных менее чем на 10%:
sudo btrfs balance start -dusage=10 /mnt/btrfs-data
# Постепенно увеличиваем порог до 50%:
sudo btrfs balance start -dusage=50 /mnt/btrfs-data
# 3. Балансировка чанков метаданных:
sudo btrfs balance start -musage=50 /mnt/btrfs-data
# 4. Проверка статуса балансировки:
sudo btrfs balance status /mnt/btrfs-dataСценарий 2: Онлайн-проверка целостности и исправление ошибок через btrfs scrub
# 1. Запуск фоновой проверки всех контрольных сумм (Scrub):
sudo btrfs scrub start /mnt/btrfs-data
# 2. Мониторинг процесса проверки в реальном времени:
sudo btrfs scrub status /mnt/btrfs-data
# 3. При наличии RAID1/RAID10 BTRFS автоматически исправит поврежденные блоки из здорового зеркала!Сценарий 3: Аварийное монтирование в режиме Read-Only с пропуском CoW (usebackuproot)
Если BTRFS отказывается монтироваться в обычном режиме после краха сервера:
# 1. Монтирование с использованием резервного корня деревьев и очисткой кэша:
sudo mount -o ro,usebackuproot,clear_cache /dev/sda2 /mnt
# 2. Монтирование в экстремальном режиме спасения данных (Recovery):
sudo mount -o ro,rescue=usebackuproot,nologreplay,ignorebadroots /dev/sda2 /mnt
# 3. Снятие бэкапа критических данных на внешний диск.Сценарий 4: Очистка старых снапшотов Subvolumes
Скрытое пространство часто удерживается забытыми read-only снапшотами:
# 1. Список всех субтомов и снапшотов:
sudo btrfs subvolume list /mnt/btrfs-data
# 2. Удаление старого снапшота:
sudo btrfs subvolume delete /mnt/btrfs-data/.snapshots/snapshot_2025_01Типовые ошибки администраторов
- Запуск btrfs balance без фильтров: Команда
btrfs balance start /mntбез параметров-dusageзаставит файловую систему переписать 100% данных на диске, что вызовет многочасовой простой и зависание ввода-вывода. - Запуск btrfs check --repair без крайней необходимости: Офлайн-восстановитель BTRFS может окончательно удалить поврежденные субтома при сложных сбоях. Используйте его только тогда, когда исчерпаны все варианты монтирования в
rescue=.
Эксперты ITSTM проведут балансировку чанков метаданных, восстановят поврежденные субтома и вернут целостность CoW-деревьев.
Частые вопросы (FAQ)
Почему BTRFS RAID5/6 считается нестабильным (Write Hole)?
В коде BTRFS RAID5/6 исторически присутствует проблема Write Hole: при аварийном отключении питания во время записи блоков четности и данных контрольные суммы расходятся, что может повредить весь пул. Рекомендуется использовать BTRFS RAID1 или RAID10.
Как отключить Copy-on-Write (CoW) для папки с базами данных или виртуальными дисками VM?
Выполните команду chattr +C /path/to/folder ДО создания файлов внутри нее (отключает фрагментацию и поднимает производительность I/O для СУБД).
Как включить прозрачное сжатие данных (ZSTD) в BTRFS?
Добавьте опцию compress=zstd:3 в параметры монтирования в /etc/fstab.
Чем subvolume отличается от обычной директории?
Subvolume в BTRFS ведет себя как независимая файловая система со своим корнем инодов (Inode Root), что позволяет мгновенно создавать его атомарные снимки (снапшоты) и монтировать отдельно.