Ошибка баланса BTRFS в ядре 5.14.x

Osibka Balansa Btrfs V Adre 5 14 X



В ядре 5.14.x есть ошибка, из-за которой файловая система btrfs становится доступной только для чтения при преобразовании профиля метаданных из не замужем к дурак . Файловая система переходит в состояние только для чтения. Решение этой проблемы требует нестандартного решения.

О профилях BTRFS

Одной из замечательных особенностей btrfs является возможность использовать различные профили рейдов. Поскольку btrfs хранит данные и метаданные отдельно, вы можете распределить данные по дискам как raid0 и отразить все метаданные как raid1. Эта избыточность метаданных занимает немного дополнительного места. И это рекомендуется в настройках btrfs raid0.

Всегда предлагалось дублировать метаданные даже на одном диске, поскольку потеря метаданных означает также потерю данных.







Btrfs может изменить профиль рейда в работающей системе, преобразовав данные и метаданные, чтобы обеспечить (или удалить) избыточность. Это происходит с остаток средств . Баланс btrfs перезаписывает все блоки файловой системы и подстраивается под новые профили.



Баг

Я попытался изменить профиль метаданных на моем единственном диске с не замужем к дурак за избыточность.



$ судо запуск баланса btrfs -mconvert = дублировать / мин





Файловая система сразу же перешла в состояние только для чтения. Система вышла из строя. Когда он перезагрузился, я не мог пройти восстановление initramfs. Данные не могут быть записаны на диск.

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



$ судо устанавливать skip_balance, RW / разработчик / СДХ / мин

Затем отмените, если необходимо, используя следующую команду:

$ судо отмена баланса btrfs / мин

Однако ошибка не только приводила к блокировке баланса, но и игнорировались параметры монтирования, препятствующие его продолжению. Каждый раз, когда файловая система монтируется, балансировка пытается возобновиться. Это не удалось, и файловая система стала доступна только для чтения. Если вы столкнулись с этим, вы должны загрузить любой дистрибутив с более старым ядром. В моем случае это был Arch с 4.18.

Смонтируйте файловую систему со старым kenel:

$ судо устанавливать skip_balance, RW / разработчик / СДХ / мин

Отмените баланс:

$ судо отмена баланса btrfs / мин

Повторите балансировку:

$ судо запуск баланса btrfs -mconvert = дублировать / мин

Как только баланс будет завершен, вы можете безопасно загрузиться в более новое ядро, теперь с дублированными метаданными в файловой системе. Проверьте профили, используемые файловой системой. Вы увидите, что у вас есть две копии метаданных файловой системы и только одна копия данных:

$ судо бтрфс быть Применение < Точка монтирования >

Вывод

Btrfs — потрясающая файловая система, поддерживающая множество дополнительных параметров. Однако при использовании btrfs у вас должны быть работающие резервные копии, а также загрузочное ядро ​​из дистрибутива LTS для восстановления системы. Несмотря на то, что балансировку можно запустить на смонтированной корневой файловой системе, делать это не всегда рекомендуется. В файловой системе все еще много ошибок. Вы должны быть готовы к спасению файловой системы, когда модуль btrfs не был полностью протестирован на новейших ядрах.