Почему я не могу прочитать суперблок в btrfs?

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

Почему я не могу прочитать Superblock в btrfs?

Я использовал свой ПК (Arch) как обычно с запущенным Android Studio, внезапно он стал поврежден и запросил перезапуск IDE, так как файловая система стала доступна только для чтения. Я перезагрузил весь ПК, и теперь не могу смонтировать систему btrfs. Использую Linux 6.6.60-1-lts, btrfs-progs v6.11

Я выбрал btrfs, так как он становится новым стандартом.

Как мне это исправить? На данный момент я пытался:

liveuser@localhost-live:~$ sudo btrfs rescue super-recover /dev/sdb3
Все суперблоки действительны, восстановление не требуется

liveuser@localhost-live:~$ sudo btrfs rescue zero-log /dev/sdb3
проверка parent transid на 711704576 провалилась, ожидалось 368940 найдено 368652
проверка parent transid на 711704576 провалилась, ожидалось 368940 найдено 368652
ВНИМАНИЕ: не удалось настроить csum tree, пропускаем его
проверка parent transid на 711655424 провалилась, ожидалось 368940 найдено 368652
проверка parent transid на 711655424 провалилась, ожидалось 368940 найдено 368652
ОШИБКА: не удалось открыть ctree

liveuser@localhost-live:~$ sudo btrfs scrub start /dev/sdb3
ОШИБКА: '/dev/sdb3' не смонтировано как устройство btrfs

liveuser@localhost-live:~$ sudo btrfs scrub status /dev/sdb3
ОШИБКА: '/dev/sdb3' не смонтировано как устройство btrfs

liveuser@localhost-live:~$ sudo mount -o usebackuproot /dev/sdb3 /mnt
mount: /mnt: системный вызов fsconfig завершился неудачей: Файл существует.
       dmesg(1) может содержать больше информации после неудачного системного вызова монтирования.

liveuser@localhost-live:~$ sudo btrfs check /dev/sdb3
Открытие файловой системы для проверки...
проверка parent transid на 711704576 провалилась, ожидалось 368940 найдено 368652
проверка parent transid на 711704576 провалилась, ожидалось 368940 найдено 368652
проверка parent transid на 711704576 провалилась, ожидалось 368940 найдено 368652
Игнорирование сбоя transid
ОШИБКА: корень [7 0] уровень 0 не совпадает с 2

ОШИБКА: не удалось настроить csum tree
ОШИБКА: не удается открыть файловую систему

Также запускал rescue:

liveuser@localhost-live:~$ sudo btrfs rescue chunk-recover /dev/sdb3
Сканирование: ЗАВЕРШЕНО в dev0                        
поврежденный leaf: root=1 block=713392128 слот=0, неожиданный конец элемента, имеем 16283 ожидаем 0
пустое место leaf ret -3574, размер данных leaf 0, использовано 3574 nritems 11
leaf 713392128 элементы 11 свободное пространство -3574 поколение 368940 владелец ROOT_TREE
leaf 713392128 флаги 0x1(WRITTEN) backref версия 1
uuid файловой системы 6d8d36ba-d266-4b34-88ad-4f81c383a521
uuid чанка 52ed2048-4a76-4a75-bb75-e1a118ec8118
ОШИБКА: leaf 713392128 слот 0 указатель недействителен, смещение 15844 размер 439 предел данных leaf 0
ОШИБКА: пропуск оставшихся слотов
поврежденный leaf: root=1 block=713392128 слот=0, неожиданный конец элемента, имеем 16283 ожидаем 0
пустое место leaf ret -3574, размер данных leaf 0, использовано 3574 nritems 11
leaf 713392128 элементы 11 свободное пространство -3574 поколение 368940 владелец ROOT_TREE
leaf 713392128 флаги 0x1(WRITTEN) backref версия 1
uuid файловой системы 6d8d36ba-d266-4b34-88ad-4f81c383a521
uuid чанка 52ed2048-4a76-4a75-bb75-e1a118ec8118
ОШИБКА: leaf 713392128 слот 0 указатель недействителен, смещение 15844 размер 439 предел данных leaf 0
ОШИБКА: пропуск оставшихся слотов
Не удалось прочитать дерево корней
ошибка открытия с поврежденным чанком

А затем восстановление после rescue:

liveuser@localhost-live:~$ sudo btrfs restore /dev/sdb3 /dev/sda5
проверка parent transid на 711704576 провалилась, ожидалось 368940 найдено 368652
проверка parent transid на 711704576 провалилась, ожидалось 368940 найдено 368652
проверка parent transid на 711704576 провалилась, ожидалось 368940 найдено 368652
Игнорирование сбоя transid
ОШИБКА: корень [7 0] уровень 0 не совпадает с 2

ВНИМАНИЕ: не удалось настроить csum tree, пропускаем его
проверка parent transid на 711655424 провалилась, ожидалось 368940 найдено 368652
проверка parent transid на 711655424 провалилась, ожидалось 368940 найдено 368652
проверка parent transid на 711655424 провалилась, ожидалось 368940 найдено 368652
Игнорирование сбоя transid
ОШИБКА: корень [5 0] уровень 0 не совпадает с 2

Не удалось открыть корень, пытаюсь восстановить резервную супер
проверка parent transid на 711704576 провалилась, ожидалось 368940 найдено 368652
проверка parent transid на 711704576 провалилась, ожидалось 368940 найдено 368652
проверка parent transid на 711704576 провалилась, ожидалось 368940 найдено 368652
Игнорирование сбоя transid
ОШИБКА: корень [7 0] уровень 0 не совпадает с 2

ВНИМАНИЕ: не удалось настроить csum tree, пропускаем его
проверка parent transid на 711655424 провалилась, ожидалось 368940 найдено 368652
проверка parent transid на 711655424 провалилась, ожидалось 368940 найдено 368652
проверка parent transid на 711655424 провалилась, ожидалось 368940 найдено 368652
Игнорирование сбоя transid
ОШИБКА: корень [5 0] уровень 0 не совпадает с 2

Не удалось открыть корень, пытаюсь восстановить резервную супер
ОШИБКА: суперблок bytenr 274877906944 больше, чем размер устройства 209715200000
Не удалось открыть корень, пытаюсь восстановить резервную супер

Жесткий диск исправен согласно smartctl. Нет переназначенных секторов, и другие разделы ntfs/ext4 работают нормально.

Если возможно восстановить данные. Спасибо!

Я в полном расстройстве, потерял данные, на которые потратил годы. Единственный резервный вариант у меня за несколько месяцев, так как после этого было внесено много изменений. :'(

Мне удалось восстановить данные следующим образом:

sudo btrfs-find-root /dev/sdb3  

вывод :

проверка parent transid на 711704576 провалилась, ожидалось 368940 найдено 368652
проверка parent transid на 711704576 провалилась, ожидалось 368940 найдено 368652
ВНИМАНИЕ: не удалось настроить csum tree, пропускаем его
проверка parent transid на 711655424 провалилась, ожидалось 368940 найдено 368652
проверка parent transid на 711655424 провалилась, ожидалось 368940 найдено 368652
Суперблок считает, что поколение 368940
Суперблок считает, что уровень 0
Найдено дерево корней на 713392128 ген 368940 уровень 0
Хороший блок 711639040(ген: 368939 уровень: 0)

затем

sudo btrfs restore -sxmSi -t 711639040 /dev/sdb3 /path/to/dest/

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

Почему я не могу прочитать суперблок в btrfs?

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

Причины проблемы

  1. Повреждение метаданных: Судя по вашему лог-файлу, основной причиной невозможности чтения суперблока являются проблемы с метаданными, в частности, с транзакционными идентификаторами. Сообщение "parent transid verify failed" указывает на несоответствие между ожидаемой и фактической версией транзакции, что говорит о том, что данные могли быть повреждены.

  2. Состояние файловой системы: Указанные вами ошибки показывают, что структура файловой системы была нарушена, из-за чего невозможен доступ к корню дерева (root tree) и контрольной сумме (csum tree).

  3. Свойства диска: Хотя вы упомянули о том, что состояние физического устройства здоровое, сбой в работе файловой системы может происходить и без явных физических проблем на диске. Например, сбои питания или резкие отключения системы могут привести к повреждениям.

Шаги по восстановлению данных

  1. Используйте btrfs rescue super-recover: Поскольку вы уже выполнили эту команду, она не обнаружила необходимости восстанавливать суперблоки, однако это первый шаг при подобных проблемах.

  2. Команда btrfs check: Убедитесь, что вы используете её правильно. Если вы использовали btrfs check, но получили ошибки, это говорит о том, что файловая система уже повреждена и может потребоваться более глубокое восстановление.

  3. Команда btrfs find-root: Это именно то, что вам нужно для поиска ссылки на корень файловой системы. Судя по вашему отчёту, команда успешно нашла примерный корень в блоке 711639040. Это хороший знак, указывающий на возможность восстановить файлы.

  4. Использование btrfs restore: Вы уже использовали эту команду для восстановления. Убедитесь, что вы включаете все необходимые параметры, чтобы попытаться восстановить максимально возможное количество данных.

  5. Целостность данных: Обязательно проверьте целостность восстановленных данных. Используйте MD5 или SHA1 для подтверждения целостности файлов после восстановления.

Профилактические меры

  1. Регулярное резервное копирование: Это одно из наиболее важных мероприятий для минимизации потерь данных. Таким образом, даже при возникновении проблем с файловой системой, вы сможете восстановить последние рабочие версии ваших файлов.

  2. Использование инструментария для мониторинга жесткого диска: Например, smartctl и другие утилиты могут помочь отслеживать состояние дисков и их возможные неисправности до того, как они приведут к потере данных.

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

Заключение

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

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

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

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