kdave / btrfs-progs

Development of userspace BTRFS tools
GNU General Public License v2.0
527 stars 239 forks source link

Btrfs partition not mountable #753

Open arnogon opened 4 months ago

arnogon commented 4 months ago

Hi, I use Clonezilla to back up and restore a Btrfs partition, but afterwards the restored partition was unmountable. 292771498-8fa94c33-c4cb-4a84-9f90-083d02155cac

user@debian:~$ sudo mount /dev/mmcblk0p1 /media/user/mmcblk0p1
mount: /media/user/mmcblk0p1: can't read superblock on /dev/mmcblk0p1.
       dmesg(1) may have more information after failed mount system call.

dmesg:

[  733.101392] BTRFS info (device mmcblk0p1): using crc32c (crc32c-intel) checksum algorithm
[  733.101407] BTRFS info (device mmcblk0p1): using free space tree
[  733.111878] BTRFS info (device mmcblk0p1): bdev /dev/mmcblk0p1 errs: wr 0, rd 0, flush 0, corrupt 1, gen 0
[  733.379508] BTRFS info (device mmcblk0p1): enabling ssd optimizations
[  733.379516] BTRFS info (device mmcblk0p1): auto enabling async discard
[  733.380304] BTRFS info (device mmcblk0p1): checking UUID tree
[  733.381581] BTRFS error (device mmcblk0p1): level verify failed on logical 192339574784 mirror 1 wanted 2 found 0
[  733.382627] BTRFS error (device mmcblk0p1): level verify failed on logical 192339574784 mirror 2 wanted 2 found 0
[  733.383177] BTRFS error (device mmcblk0p1): level verify failed on logical 192339574784 mirror 1 wanted 2 found 0
[  733.383704] BTRFS error (device mmcblk0p1): level verify failed on logical 192339574784 mirror 2 wanted 2 found 0
[  733.383722] BTRFS warning (device mmcblk0p1): iterating uuid_tree failed -5

btrfs check:

[1/7] checking root items
[2/7] checking extents
ref mismatch on [13631488 12288] extent item 1, found 0
data extent[13631488, 12288] bytenr mimsmatch, extent item bytenr 13631488 file item bytenr 0
data extent[13631488, 12288] referencer count mismatch (root 256 owner 414370 offset 0) wanted 1 have 0
backpointer mismatch on [13631488 12288]
owner ref check failed [13631488 12288]
ref mismatch on [13643776 4096] extent item 1, found 0
data extent[13643776, 4096] bytenr mimsmatch, extent item bytenr 13643776 file item bytenr 0
data extent[13643776, 4096] referencer count mismatch (root 256 owner 966411 offset 0) wanted 1 have 0
backpointer mismatch on [13643776 4096]
owner ref check failed [13643776 4096]
ref mismatch on [13647872 122880] extent item 4, found 0
data extent[13647872, 122880] bytenr mimsmatch, extent item bytenr 13647872 file item bytenr 0
data extent[13647872, 122880] referencer count mismatch (root 256 owner 814943 offset 0) wanted 1 have 0
data extent[13647872, 122880] bytenr mimsmatch, extent item bytenr 13647872 file item bytenr 0
data extent[13647872, 122880] referencer count mismatch (root 256 owner 349720 offset 0) wanted 1 have 0
data extent[13647872, 122880] bytenr mimsmatch, extent item bytenr 13647872 file item bytenr 0
data extent[13647872, 122880] referencer count mismatch (root 256 owner 812128 offset 0) wanted 1 have 0
data extent[13647872, 122880] bytenr mimsmatch, extent item bytenr 13647872 file item bytenr 0
data extent[13647872, 122880] referencer count mismatch (root 256 owner 812808 offset 0) wanted 1 have 0
backpointer mismatch on [13647872 122880]
owner ref check failed [13647872 122880]
ref mismatch on [13770752 8192] extent item 1, found 0
data extent[13770752, 8192] bytenr mimsmatch, extent item bytenr 13770752 file item bytenr 0
data extent[13770752, 8192] referencer count mismatch (root 256 owner 966406 offset 0) wanted 1 have 0
backpointer mismatch on [13770752 8192]
owner ref check failed [13770752 8192]
ref mismatch on [13778944 4096] extent item 1, found 0
data extent[13778944, 4096] bytenr mimsmatch, extent item bytenr 13778944 file item bytenr 0
data extent[13778944, 4096] referencer count mismatch (root 256 owner 966410 offset 0) wanted 1 have 0
backpointer mismatch on [13778944 4096]
owner ref check failed [13778944 4096]
ref mismatch on [13783040 16384] extent item 1, found 0
data extent[13783040, 16384] bytenr mimsmatch, extent item bytenr 13783040 file item bytenr 0
data extent[13783040, 16384] referencer count mismatch (root 256 owner 344169 offset 0) wanted 1 have 0
backpointer mismatch on [13783040 16384]
owner ref check failed [13783040 16384]
...
ref mismatch on [590504337408 126976] extent item 1, found 0
data extent[590504337408, 126976] bytenr mimsmatch, extent item bytenr 590504337408 file item bytenr 0
data extent[590504337408, 126976] referencer count mismatch (root 256 owner 1193734 offset 140697600) wanted 1 have 0
backpointer mismatch on [590504337408 126976]
owner ref check failed [590504337408 126976]
ref mismatch on [590504464384 126976] extent item 1, found 0
data extent[590504464384, 126976] bytenr mimsmatch, extent item bytenr 590504464384 file item bytenr 0
data extent[590504464384, 126976] referencer count mismatch (root 256 owner 1193734 offset 140828672) wanted 1 have 0
backpointer mismatch on [590504464384 126976]
owner ref check failed [590504464384 126976]
ref mismatch on [590504591360 135168] extent item 1, found 0
data extent[590504591360, 135168] bytenr mimsmatch, extent item bytenr 590504591360 file item bytenr 0
data extent[590504591360, 135168] referencer count mismatch (root 256 owner 1193734 offset 142213120) wanted 1 have 0
backpointer mismatch on [590504591360 135168]
owner ref check failed [590504591360 135168]
ERROR: errors found in extent allocation tree or chunk allocation
[3/7] checking free space tree
[4/7] checking fs roots
parent transid verify failed on 192339574784 wanted 23952 found 23989
Ignoring transid failure
ERROR: root [256 0] level 0 does not match 2

ERROR: errors found in fs roots
Opening filesystem to check...
Checking filesystem on /dev/mmcblk0p1
UUID: 5690ec67-0e23-4592-a381-01432a8abbb0
found 386806038528 bytes used, error(s) found
total csum bytes: 376931744
total tree bytes: 509050880
total fs tree bytes: 81920
total extent tree bytes: 100974592
btree space waste bytes: 34763056
file data blocks allocated: 5087232
 referenced 9916416

btrfs check --repair:

1/7] checking root items
Fixed 0 roots.
[2/7] checking extents
ref mismatch on [13631488 12288] extent item 1, found 0
data extent[13631488, 12288] bytenr mimsmatch, extent item bytenr 13631488 file item bytenr 0
data extent[13631488, 12288] referencer count mismatch (root 256 owner 414370 offset 0) wanted 1 have 0
backpointer mismatch on [13631488 12288]
owner ref check failed [13631488 12288]
parent transid verify failed on 192339574784 wanted 23952 found 23989
Ignoring transid failure
ERROR: root [256 0] level 0 does not match 2

failed to repair damaged filesystem, aborting

Starting repair.
Opening filesystem to check...
Checking filesystem on /dev/mmcblk0p1
UUID: 5690ec67-0e23-4592-a381-01432a8abbb0

I'm trying to see if there's any way I could recover this partition, or at the very least salvage the data.

adam900710 commented 4 months ago

Transid mismatch mostly means the death sentence to a btrfs. It can either be some bad firmware or some critical bugs.

But considering it's mmc, and non-kernel btrfs operations, it's pretty unlikely to be a kernel bug.

Repair to a status which can pass btrfs check is almost impossible, for data salvage, you can try mount with "-o ro,rescue=all" some some recent kernels, if that mounts, you can try to grab the data.

arnogon commented 4 months ago

I got the same error mounting with "-o ro,rescue=all". dmesg:

[  180.177270] BTRFS info (device mmcblk0p1): using crc32c (crc32c-intel) checksum algorithm
[  180.177292] BTRFS info (device mmcblk0p1): enabling all of the rescue options
[  180.177294] BTRFS info (device mmcblk0p1): ignoring data csums
[  180.177296] BTRFS info (device mmcblk0p1): ignoring bad roots
[  180.177298] BTRFS info (device mmcblk0p1): disabling log replay at mount time
[  180.177301] BTRFS info (device mmcblk0p1): using free space tree
[  180.183840] BTRFS info (device mmcblk0p1: state C): bdev /dev/mmcblk0p1 errs: wr 0, rd 0, flush 0, corrupt 1, gen 0
[  180.443630] BTRFS info (device mmcblk0p1: state C): enabling ssd optimizations
[  180.443638] BTRFS info (device mmcblk0p1: state C): auto enabling async discard
[  180.445072] BTRFS error (device mmcblk0p1: state C): level verify failed on logical 192339574784 mirror 1 wanted 2 found 0
[  180.445766] BTRFS error (device mmcblk0p1: state C): level verify failed on logical 192339574784 mirror 2 wanted 2 found 0

Any more I could do to recover the data?

Forza-tng commented 3 months ago

I got the same error mounting with "-o ro,rescue=all". dmesg:

Any more I could do to recover the data?

You said you did a restore, does it mean you have the backup available and not the original filesystem? You could attempt to restore to another disk, possibly on another computer.

I read on CloneZilla website it uses knowledge of btrfs to reduce amount that is copied. It is possible that there is a problem in how that code works, and thus didn't copy important metadata or couldn't recreate it properly, or it placed things misaligned (so btrfs couldn't find all metadata). Perhaps there is some help to be found from clonezilla/forums/etc.

Did you have a different partition layout or disk size when you restored?

One thing to try is btrfs-restore, which sometime can read data off a broken filesystem.

I am sorry the backup/restore didn't work. And when you're back up and running again, perhaps look at btrfs send | btrfs receive which are native tools to copy btrfs subvolumes.