Mamy system SLES12 SP1 działający jako VM w środowisku MS HyperV.

Po ponownym uruchomieniu system nie uruchamia się, ponieważ vmlinux już go nie ma. Grub mówi „musisz najpierw załadować jądro Linux” lub mniej więcej (nie byłem w stanie skopiować dokładnego komunikatu o błędzie). Po głębszym kopaniu i próbowaniu załadowania starszego jądra zdałem sobie sprawę, że w systemie btrfs nadal wiszą transakcje, przynajmniej korumpujące sumy kontrolne.

Pobrałem więc najnowszą płytę ratunkową OpenSUSE i próbowałem zamontować urządzenia. Mogę zamontować partycję domową, ale partycja z / boot itp. Nie chce się zamontować:

linux@localhost:~> sudo mount -t btrfs -o ro,usebackuproot /dev/sda2 /mnt
mount: /mnt: wrong fs type, bad option, bad superblock on /dev/sda2, missing codepage or helper program, or other error.

Wykonałem więc następujące kroki: https://lists.opensuse.org/opensuse/2017-02/msg00930.html

Montowanie w ogóle nie działa, próbowałem różnych opcji, takich jak wyłączenie pamięci podręcznej itp., Więc czyszczenie również nie działało.

btrfs check mówi:

linux@localhost:~> sudo btrfs check /dev/sda2
checksum verify failed on 75659116544 found 61415E80 wanted 96E73A64
checksum verify failed on 75659116544 found 61415E80 wanted 96E73A64
checksum verify failed on 75659116544 found E4E3BDB6 wanted 00000000
checksum verify failed on 75659116544 found 61415E80 wanted 96E73A64
bytenr mismatch, want=75659116544, have=5432601639048425051
ERROR: cannot open file system

Przywracanie nie działa również:

linux@localhost:~> sudo btrfs restore /dev/sda2 /run/media/linux/c03ad26a-a896-468d-bf9d-9953f87b2661/Administrator/Backup_sda2/
checksum verify failed on 75659116544 found 61415E80 wanted 96E73A64
checksum verify failed on 75659116544 found 61415E80 wanted 96E73A64
checksum verify failed on 75659116544 found E4E3BDB6 wanted 00000000
checksum verify failed on 75659116544 found 61415E80 wanted 96E73A64
bytenr mismatch, want=75659116544, have=5432601639048425051
Could not open root, trying backup super
checksum verify failed on 75659116544 found 61415E80 wanted 96E73A64
checksum verify failed on 75659116544 found 61415E80 wanted 96E73A64
checksum verify failed on 75659116544 found E4E3BDB6 wanted 00000000
checksum verify failed on 75659116544 found 61415E80 wanted 96E73A64
bytenr mismatch, want=75659116544, have=5432601639048425051
Could not open root, trying backup super
ERROR: superblock bytenr 274877906944 is larger than device size 42952818688
Could not open root, trying backup super

Więc utworzyłem kopię zapasową obrazu używając dd.

super odzyskać:

linux@localhost:~> sudo btrfs rescue super-recover /dev/sda2 
All supers are valid, no need to recover

btrfs ratuje zerowy dziennik:

linux@localhost:~> sudo btrfs rescue zero-log /dev/sda2
checksum verify failed on 75659116544 found 61415E80 wanted 96E73A64
checksum verify failed on 75659116544 found 61415E80 wanted 96E73A64
checksum verify failed on 75659116544 found E4E3BDB6 wanted 00000000
checksum verify failed on 75659116544 found 61415E80 wanted 96E73A64
bytenr mismatch, want=75659116544, have=5432601639048425051
ERROR: could not open ctree

Odzyskiwanie fragmentów również nie działało, ale mimo to próbowałem zamontować:

linux@localhost:~> sudo btrfs rescue chunk-recover /dev/sda2
Scanning: DONE in dev0                       
checksum verify failed on 75659116544 found 61415E80 wanted 96E73A64
checksum verify failed on 75659116544 found 61415E80 wanted 96E73A64
checksum verify failed on 75659116544 found E4E3BDB6 wanted 00000000
checksum verify failed on 75659116544 found 61415E80 wanted 96E73A64
bytenr mismatch, want=75659116544, have=5432601639048425051
open with broken chunk error
Chunk tree recovery failed
linux@localhost:~> sudo mount -t btrfs -o ro,usebackuproot /dev/sda2 /mnt
mount: /mnt: wrong fs type, bad option, bad superblock on /dev/sda2, missing codepage or helper program, or other error.

sprawdź naprawę:

linux@localhost:~> sudo btrfs check --repair /dev/sda2
enabling repair mode
checksum verify failed on 75659116544 found 61415E80 wanted 96E73A64
checksum verify failed on 75659116544 found 61415E80 wanted 96E73A64
checksum verify failed on 75659116544 found E4E3BDB6 wanted 00000000
checksum verify failed on 75659116544 found 61415E80 wanted 96E73A64
bytenr mismatch, want=75659116544, have=5432601639048425051
ERROR: cannot open file system

Otrzymuję prawie ten sam błąd z drzewem init-scope-tree:

linux@localhost:~> sudo btrfs check --repair --init-extent-tree /dev/sda2
enabling repair mode
Checking filesystem on /dev/sda2
UUID: b70dc1a4-4c19-446c-98c9-eeee88c4fd47
Creating a new extent tree
checksum verify failed on 75638358016 found 9B64BB37 wanted 6156F702
checksum verify failed on 75638358016 found 9B64BB37 wanted 6156F702
checksum verify failed on 75638358016 found E4E3BDB6 wanted 00000000
checksum verify failed on 75638358016 found 9B64BB37 wanted 6156F702
bytenr mismatch, want=75638358016, have=267958633426704061
Error reading tree block
error pinning down used bytes
ERROR: attempt to start transaction over already running one
extent buffer leak: start 89771360256 len 16384

także init-csum-tree:

linux@localhost:~> sudo btrfs check --repair --init-csum-tree /dev/sda2
enabling repair mode
Creating a new CRC tree
checksum verify failed on 75659116544 found 61415E80 wanted 96E73A64
checksum verify failed on 75659116544 found 61415E80 wanted 96E73A64
checksum verify failed on 75659116544 found E4E3BDB6 wanted 00000000
checksum verify failed on 75659116544 found 61415E80 wanted 96E73A64
bytenr mismatch, want=75659116544, have=5432601639048425051
ERROR: cannot open file system

Nie znalazłem więcej informacji dotyczących tego błędu, dlatego próbuję uzyskać pomoc dotyczącą wymiany stosów, wiedząc, że są już pytania i odpowiedzi na ten temat. Mamy tylko kopię zapasową serwera hosta, więc naprawdę chcemy ją uruchomić. Musi być lepszy sposób na odzyskanie partycji btrfs :(

Z góry dziękuję!

Lukas Florea
źródło