Поврежденный лист BTRFS / не удалось открыть дерево

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

после обновления с Ubuntu 22.02.1 (ядро 5.15) до Ubuntu 24.04 с ядром 6.8 (а также 6.11), я больше не могу подключить свои BTRFS диски.

dmesg выдает мне:

[Sun Feb 23 15:08:11 2025] BTRFS info (device dm-5): first mount of filesystem d560d735-e812-49a7-bcc2-d883cbeae2f4
[Sun Feb 23 15:08:11 2025] BTRFS info (device dm-5): using crc32c (crc32c-intel) checksum algorithm
[Sun Feb 23 15:08:11 2025] BTRFS info (device dm-5): disk space caching is enabled
[Sun Feb 23 15:08:12 2025] BTRFS critical (device dm-5): corrupt leaf: block=20387303407616 slot=33 extent bytenr=9103199440896 len=8238972779538548086 invalid extent data backref objectid value 13163
[Sun Feb 23 15:08:12 2025] BTRFS error (device dm-5): read time tree block corruption detected on logical 20387303407616 mirror 1
[Sun Feb 23 15:08:12 2025] BTRFS critical (device dm-5): corrupt leaf: block=20387303407616 slot=33 extent bytenr=9103199440896 len=8238972779538548086 invalid extent data backref objectid value 13163
[Sun Feb 23 15:08:12 2025] BTRFS error (device dm-5): read time tree block corruption detected on logical 20387303407616 mirror 2
[Sun Feb 23 15:08:12 2025] BTRFS error (device dm-5): failed to read block groups: -5
[Sun Feb 23 15:08:12 2025] BTRFS error (device dm-5): open_ctree failed

Были выполнены следующие проверки:

1. btrfsck –readonly /dev/mapper/data1_crypt

Открытие файловой системы для проверки...
Проверка файловой системы на /dev/mapper/data1_crypt
UUID: d560d735-e812-49a7-bcc2-d883cbeae2f4
[1/7] проверка корневых элементов
[2/7] проверка экстентов
[3/7] проверка кэша свободного места
[4/7] проверка корней файловой системы
[5/7] проверка только csums элементов (без проверки данных)
[6/7] проверка корневых ссылок
[7/7] проверка квотных групп пропущена (не включена на этой FS)
обнаружено 5883597525113 байт использовано, ошибок не найдено
всего csums байт: 5729361204
всего байт дерева: 15929737216
всего байт дерева fs: 9227829248
всего байт дерева экстентов: 635011072
отходы места btree байт: 1907771393
блоки данных файлов выделены: 57498707316736
 ссылается 46500400185344

2. btrfs-find-root /dev/mapper/data1_crypt

Суперблок считает, что поколение 294543
Суперблок считает, что уровень 1
Найдено корневое дерево на 19305371582464 gen 294543 level 1
Блок 19305203253248 (gen: 294542 level: 1) кажется хорошим, но поколение/уровень не совпадает, требуется gen: 294543 level: 1
Блок 19305194897408 (gen: 294541 level: 1) кажется хорошим, но поколение/уровень не совпадает, требуется gen: 294543 level: 1
Блок 19305183739904 (gen: 294540 level: 0) кажется хорошим, но поколение/уровень не совпадает, требуется gen: 294543 level: 1
Блок 19305371500544 (gen: 294538 level: 0) кажется хорошим, но поколение/уровень не совпадает, требуется gen: 294543 level: 1
Блок 19305367502848 (gen: 294538 level: 0) кажется хорошим, но поколение/уровень не совпадает, требуется gen: 294543 level: 1

3. btrfs rescue super-recover -v /dev/mapper/data1_crypt

Все устройства:
        Устройство: id = 2, name = /dev/mapper/data2_crypt
        Устройство: id = 1, name = /dev/mapper/data1_crypt
До восстановления:
        [Все хорошие суперблоки]:
                имя устройства = /dev/mapper/data2_crypt
                суперблок bytenr = 65536
                имя устройства = /dev/mapper/data2_crypt
                суперблок bytenr = 67108864
                имя устройства = /dev/mapper/data2_crypt
                суперблок bytenr = 274877906944
                имя устройства = /dev/mapper/data1_crypt
                суперблок bytenr = 65536
                имя устройства = /dev/mapper/data1_crypt
                суперблок bytenr = 67108864
                имя устройства = /dev/mapper/data1_crypt
                суперблок bytenr = 274877906944
        [Все плохие суперблоки]:

Все суперблоки действительны, восстановление не требуется

4. smartctl -a

--> Нет ошибок, нет проблем

5. btrfs scrub выполняется ежемесячно:

sudo btrfs device stats /dev/mapper/data1_crypt
[/dev/mapper/data1_crypt].write_io_errs    0
[/dev/mapper/data1_crypt].read_io_errs     0
[/dev/mapper/data1_crypt].flush_io_errs    0
[/dev/mapper/data1_crypt].corruption_errs  0
[/dev/mapper/data1_crypt].generation_errs  0

Что я пробовал до сих пор (с чистой загрузкой с Ubuntu 22.04 Live-ISO):

6. Несколько попыток монтирования (без успеха на kernel 6.8/6.11):

mount -o recovery /dev/mapper/data1_crypt /media/ddd

mount -vs -t btrfs  -o ro,recovery,errors=continue /dev/mapper/data1_crypt /media/ddd

mount -t btrfs -o degraded,noatime,nodiratime,clear_cache /dev/mapper/data1-crypt /mnt/Daten

7. btrfs rescue zero-log /dev/mapper/data1-crypt

8. btrfs rescue clear-ino-cache /dev/mapper/data1-crypt

Не удается найти группу блоков для 0
ОШИБКА: не удалось очистить кэш inos: недостаточно места на устройстве

9. btrfs rescue clear-space-cache v1 /dev/mapper/data1-crypt

Не удается найти группу блоков для 0
ОШИБКА: не удалось очистить кэш свободного места
утечка буфера экстентов: начало 20449393967104 длина 16384

10. btrfs inspect-internal tree-stats /dev/mapper/data1-crypt

предупреждение, устройство 2 отсутствует

Вычисление размера корневого дерева

    Общий размер: 2.28MiB

           Встроенные данные: 0.00B

    Общее количество обращений: 140

            Прямых обращений: 70

            Обратных обращений: 70

            Средняя длина обращения: 2.09TiB

    Гистограмма обращений

                     16384 -      185712640:             21 ###

                 290275328 -    50034622464:             21 ###

               61473767424 -   490582196224:             21 ###

              490944790528 -   932145905664:             21 ###

              992462012416 -  1556186071040:             21 ###

             1556985511936 - 10512543825920:             21 ###

            10512621191168 - 12069176721408:              8 #

    Общее количество кластеров: 4

            Средний размер кластера: 36.00KiB

            Минимальный размер кластера: 32.00KiB

            Максимальный размер кластера: 48.00KiB

    Общий диапазон диска: 11.00TiB

    Общее время чтения: 0 s 29 μs

    Уровни: 2

    Общее количество узлов: 146

            На уровне 0:      145

            На уровне 1:        1  (средняя загрузка 145)

Вычисление размера дерева экстентов

Ошибка сегментации

dmesg

[Tue Mar 4 08:50:46 2025] btrfs[7804]: ошибка сегментации в 0 ip 0000564b44894e65 sp 00007ffe6b099710 ошибка 4 в btrfs[564b4482b000+71000]

[Tue Mar 4 08:50:46 2025] Код: 8d 74 24 30 48 8d ac 24 98 00 00 00 49 89 c4 4c 89 f7 e8 43 a5 f9 ff 31 c0 b9 30 00 00 00 48 89 ef f3 ab 31 f6 48 8d 7c 24 10 <49> 8b 04 24 48 c7 84 24 e8 00 00 00 ff ff ff ff 0f b6 98 dc 00 00

Теперь я не знаю, что ещё можно сделать, и надеюсь, кто-то сможет мне помочь.

И, тем не менее, мне кажется странным, что я могу монтировать диск с ядром 5.15 и никаких ошибок не возникает…

Спасибо и с уважением,
Маркус

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

Проблема, с которой столкнулся Маркус, связана с невозможностью монтирования файловой системы Btrfs после обновления ядра с версии 5.15 на 6.8 и 6.11 Ubuntu. Применяя структуру TEA (теория, пример, применение), рассмотрим данную ситуацию подробно.

Теория

Btrfs, или B-Tree File System, является прогрессивной файловой системой, ориентированной на высокую надёжность и масштабируемость. Она поддерживает такие функции, как снепшоты, контрольные суммы данных и файлов, динамическое распределение дискового пространства и многие другие. Однако, несмотря на её преимущества, Btrfs иногда демонстрирует сложности с совместимостью между версиями различных ядер Linux.

Одним из наиболее распространенных видов ошибок при работе с Btrfs являются проблемы с "corrupt leaf" (повреждённый лист), как указано в логах dmesg. Листья в Btrfs — это конечные узлы структуры дерева, которые содержат данные файлов и метаданные. Если лист поврежден, это может привести к несогласованности данных или невозможности доступа к ним.

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

Пример

Рассмотрим логи dmesg, предоставленные Маркусом:

BTRFS critical (device dm-5): corrupt leaf: block=20387303407616 slot=33 ...
BTRFS error (device dm-5): read time tree block corruption detected...
BTRFS error (device dm-5): failed to read block groups: -5
BTRFS error (device dm-5): open_ctree failed

Здесь указано, что ошибка возникает из-за "corrupt leaf", что вызывает невозможность чтения блоков и приводит к сбою при операции open_ctree.

При использовании btrfs check в режиме --readonly результаты не показывают никаких явных ошибок, что может указывать на известную проблему контролируемого восстановления, которую фиксируют более старые версии драйверов.

Применение

Для решения проблемы Майкросу необходимо руководство по нескольким направлениям:

1. Проверка совместимости между драйверами Btrfs и ядром: Один из первых шагов — убеждение в том, что используемое ядро поддерживает необходимую версию Btrfs. Проверять, обновилось ли программное обеспечение ядра Btrfs до той версии, которая может иметь улучшенные алгоритмы работы с данными.

2. Использование инструмента btrfs rescue: Несмотря на то, что Майкрос уже использовал btrfs rescue zero-log, можно попробовать другие команды этой утилиты, например, btrfs rescue chunk-recover, для попытки восстановления логических структур файловой системы.

3. Попытка монтирования с использованием параметров восстановления:
Маркус может попробовать монтировать с рядом опций восстановления. Например:

mount -o ro,nodatacow,recovery,degraded /dev/mapper/data1_crypt /media/ddd

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

4. Диагностика и действия, относящиеся к повреждённым данным:
Если рабочие данные не слишком критичны или у Маркуса есть резервные копии, можно попытаться играющим методом исправить это, используя btrfs check --repair, важно, что это может привести к потере данных.

5. Контактирование с сообществом или профессиональной поддержка:
Если никакие ущождения не решат проблему, Маркус может обратиться за помощью к сообществу Ubuntu или специализированной поддержке Btrfs для более детального анализа проблемы.

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

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

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