BTRFS: возможно ли переключиться на другое корневое дерево?

Вопрос или проблема

Я повредил свой раздел BTRFS и

mount -o usebackuproot ...

не работает:

[ 9252.141767] BTRFS info (устройство dm-1): пытается использовать резервный корень во время монтирования
[ 9252.141779] BTRFS info (устройство dm-1): отключение кеширования дискового пространства
[ 9252.141784] BTRFS info (устройство dm-1): имеет худыеExtent
[ 9252.184586] BTRFS error (устройство dm-1): проверка идентификатора транзакции родителя не прошла на 7777276116992 хотели 100336 найдено 89751
[ 9252.186302] BTRFS error (устройство dm-1): проверка идентификатора транзакции родителя не прошла на 7777276116992 хотели 100336 найдено 89751
[ 9252.186306] BTRFS warning (устройство dm-1): не удалось прочитать корень дерева
[ 9252.186729] BTRFS error (устройство dm-1): проверка идентификатора транзакции родителя не прошла на 7777276116992 хотели 100336 найдено 89751
[ 9252.187091] BTRFS error (устройство dm-1): проверка идентификатора транзакции родителя не прошла на 7777276116992 хотели 100336 найдено 89751
[ 9252.187094] BTRFS warning (устройство dm-1): не удалось прочитать корень дерева
[ 9252.187372] BTRFS error (устройство dm-1): проверка идентификатора транзакции родителя не прошла на 7777213923328 хотели 100335 найдено 89750
[ 9252.187589] BTRFS error (устройство dm-1): проверка идентификатора транзакции родителя не прошла на 7777213923328 хотели 100335 найдено 89750
[ 9252.187592] BTRFS warning (устройство dm-1): не удалось прочитать корень дерева
[ 9252.187948] BTRFS error (устройство dm-1): проверка идентификатора транзакции родителя не прошла на 7777188921344 хотели 100334 найдено 100336
[ 9252.188281] BTRFS error (устройство dm-1): проверка идентификатора транзакции родителя не прошла на 7777188921344 хотели 100334 найдено 100336
[ 9252.188284] BTRFS warning (устройство dm-1): не удалось прочитать корень дерева
[ 9252.188661] BTRFS error (устройство dm-1): проверка идентификатора транзакции родителя не прошла на 7260661022720 хотели 100333 найдено 96460
[ 9252.189025] BTRFS error (устройство dm-1): проверка идентификатора транзакции родителя не прошла на 7260661022720 хотели 100333 найдено 96460
[ 9252.189029] BTRFS warning (устройство dm-1): не удалось прочитать корень дерева
[ 9252.236361] BTRFS: open_ctree не удалось

btrfs check тоже не работает:

btrfs check /dev/mapper/media
проверка идентификатора транзакции родителя не прошла на 7777276116992 хотели 100336 найдено 89751
проверка идентификатора транзакции родителя не прошла на 7777276116992 хотели 100336 найдено 89751
проверка идентификатора транзакции родителя не прошла на 7777276116992 хотели 100336 найдено 89751
проверка идентификатора транзакции родителя не прошла на 7777276116992 хотели 100336 найдено 89751
Игнорирование сбоя идентификатора транзакции
Не удалось настроить дерево Extent
Не удалось открыть файловую систему

Я нашел несколько корневых блоков деревьев, которые мог бы использовать с “btrfs restore“:

btrfs restore -t 8889016483840 -D -i -v /dev/mapper/media /dev/null | wc -l
2264442

Но я сталкиваюсь с проблемой здесь. Мой btrfs накопитель очень большой, он более 20 ТБ, и у меня нет запасных дисков такого размера для резервного копирования и восстановления. Возможно ли восстановить такую файловую систему или переключиться на данный блок корня дерева “на месте”, без форматирования?

Сначала убедитесь, что у вас есть действительные суперблоки:

btrfs rescue super-recover -v <устройство>

Используйте:

btrfs-find-root <устройство>

чтобы найти лучший корень дерева для использования в восстановлении:

  1. Корневой узел должен иметь самый высокий уровень
    2. Чем выше поколение, тем выше шанс, что файловая система может быть восстановлена с использованием этого корня.

Примечание: в вашем сообщении об ошибке wanted – это поколение в журнале, found – это поколение, основанное на корне дерева.

Найдите самый чистый вывод из следующих команд:

btrfs check --tree-root <блок> --super <суп>

Где:

  • <суп> это либо 0, 1 или 2.
  • <блок> дается командой btrfs find-root (примечание: не умножайте на размер блока, даже если справочник говорит <bytenr>)

Затем восстановите файловую систему следующим образом:

btrfs check --repair --tree-root <блок> --super <суп>

Обратите внимание на добавление --repair, чтобы фактически изменить файловую систему.

Ответ или решение

В ответ на ваш вопрос о возможности переключения на другой корень дерева (tree root) в файловой системе Btrfs при наличии повреждений, давайте рассмотрим несколько шагов, которые могут помочь в данной ситуации.

  1. Проверка наличия действующих суперблоков:
    Первым делом вам необходимо убедиться, что у вас есть действительные суперблоки. Для этого выполните команду:

    btrfs rescue super-recover -v <device>

    Замените <device> на тот, который у вас используется (например, /dev/mapper/media).

  2. Поиск подходящего корня дерева:
    Используйте команду btrfs-find-root для нахождения лучшего корня дерева, который можно использовать для восстановления:

    btrfs-find-root <device>

    Для эффективного выбора корня, обратите внимание на то, что root должен иметь наивысший уровень, и чем больше поколение, тем больше шансов на восстановление файловой системы.

  3. Проверка состояния файловой системы с указанным корнем дерева:
    Чтобы проверить состояние файловой системы с использованием найденного корня, выполните следующую команду:

    btrfs check --tree-root <block> --super <sup>

    Где <block> – это адрес, который вы получили через команду btrfs find-root, а <sup> может быть 0, 1 или 2.

  4. Ремонт файловой системы:
    Если на предыдущем шаге вы получили чистый вывод, что указывает на возможность ремонта, выполните команду для ремонта файловой системы:

    btrfs check --repair --tree-root <block> --super <sup>

    Обратите внимание на наличие ключа --repair, который изменяет файловую систему и восстанавливает её работоспособность.

  5. Дополнительные советы:

    • Будьте осторожны с командой btrfs check, особенно с флагом --repair, так как это может потенциально привести к потере данных, если данные уже в значительной степени повреждены.
    • Если вы получил много сообщений об ошибках, рекомендуется провести резервное копирование важных данных, если это еще возможно, особенно используя btrfs restore для извлечения информации из поврежденной файловой системы.

Если у вас нет возможности произвести резервное копирование данных из-за размера файловой системы, рассмотрите возможность временного использования другого хранилища для восстановления, чтобы избежать окончательной потери информации.

Оцените материал
Добавить комментарий

Капча загружается...