Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
LINUX-BTRFS-TROUBLESHOOTING Linux / DevOps

Гайд: Траблшутинг BTRFS: балансировка btrfs balance, очистка scrub и восстановление subvolumes

Обновлено: 21.08.2026  ·  Официальная база знаний

Архитектура 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=.
Файловая система BTRFS перешла в Read-Only или заблокировалась по ENOSPC?
Эксперты ITSTM проведут балансировку чанков метаданных, восстановят поврежденные субтома и вернут целостность CoW-деревьев.
Практический опыт инженера: Настройте периодический запуск btrfs balance (по cron раз в неделю с низкими порогами dusage=20/musage=20) и btrfs scrub (раз в месяц). Это гарантирует постоянную дефрагментацию пула чанков и предотвращает внезапные блокировки системы по ошибке ENOSPC.

Частые вопросы (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), что позволяет мгновенно создавать его атомарные снимки (снапшоты) и монтировать отдельно.