Hi Qu, thank you once again for your advice. I could indeed recover all my data, even the snapshots docker had created. Everything's working as if nothing had ever happened. Here's what I've did in the end:
btrfs recover <src> <dest> worked flawless, but only recovered some data. mount -o ro,notreelog,nologreplay was the only way to mount the broken partition and it showed me a lot more data than btrfs recover could recover. However when trying to access these additional files I had input/output errors. btrfs recover -sxmS <src> <dest> was the magic command that recovered all my data (which I could "cp -a" back to my device after creating a new btrfs file system). After reading the help of btrfs-recover it's obvious that the arguments are required, but in the btrfs wiki it says "If you're really lucky, this might be enough"[1] describing the command w/o arguments. I think this is misleading. The arguments are always necessary if you want to recover all your data. Well, at least I think the wiki page makes mores sense if the arguments were included. If there's anything I can provide to help you improve btrfs or its recovery tools please don't hesitate to ask. Although I don't have an image of the broken partition, at least I still have the core dump of "btrfs check --clear-space-cache v1". [1] https://btrfs.wiki.kernel.org/index.php/Restore Thorsten Hirsch P.S.: btrfs check --repair was of no use. It crashed almost immediately. I tried it only after recovering all my data, to see if it would've helped as well. Am Sa., 23. März 2019 um 14:57 Uhr schrieb Qu Wenruo <quwenruo.bt...@gmx.com>: > > > > On 2019/3/23 下午6:48, Thorsten Hirsch wrote: > > Hi Qu, > > > > sorry for this direct reply. I've been trying to answer to the mailing > > list since yesterday, but my mails seem to get dropped. So please see > > my answer to your mail enclosed. > > > > Thorsten > > > > > > ---------- Forwarded message --------- > > From: Thorsten Hirsch <t.hir...@web.de> > > Date: Sa., 23. März 2019 um 09:29 Uhr > > Subject: Re: Fw: kernel oops when mounting btrfs > > To: <linux-btrfs@vger.kernel.org> > > > > > > Hi Qu, > > > > thank you, but unfortunately that didn't work out so well. The tree > > dump was no problem [1], but clearing the space cache resulted in a > > core dump. Now btrfs check --readonly reports some errors. I attached > > the output of these commands. > > > > Thorsten > > > > [1] https://gist.github.com/thorstenhirsch/65d4308ce54729c902cb09c0d4ad2baf > > This explains why a lot of things doesn't go correct. > > The inode item of your free space cache tree is wrong. > According to my experimental with latest kernel, it looks like some > older kernel is the culprit. > > Your free space cache inode lacks the correct mode. > Normally the mode should be 0100600. But your fs only has 0, and kernel > panics for that reason. > > > > > # btrfs check --clear-space-cache v1 /dev/nvme0n1p3 > > Opening filesystem to check... > > Checking filesystem on /dev/nvme0n1p3 > > UUID: 4284a794-ad75-450d-b023-ebc5e75f31f5 > > Failed to find [544448348160, 168, 16384] > > Then this means something bad happened in extent tree. > > > btrfs unable to find ref byte nr 544448364544 parent 0 root 2 owner 0 > > offset 0 > > transaction.c:195: btrfs_commit_transaction: BUG_ON `ret` triggered, value > > -5 > > btrfs(+0x3be68)[0x556936269e68] > > btrfs(btrfs_commit_transaction+0x12a)[0x55693626a2ec] > > btrfs(btrfs_clear_free_space_cache+0x32a)[0x55693625fecf] > > btrfs(+0x4be5b)[0x556936279e5b] > > btrfs(cmd_check+0x5c2)[0x556936284d86] > > btrfs(main+0x1f6)[0x556936241ef6] > > /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xeb)[0x7fb9a7911b6b] > > btrfs(_start+0x2a)[0x556936241f3a] > > Aborted (core dumped) > > > > > > # btrfs check --readonly /dev/nvme0n1p3 > > Opening filesystem to check... > > parent transid verify failed on 419860414464 wanted 30188 found 30105 > > parent transid verify failed on 419860414464 wanted 30188 found 30105 > > So extent tree get corrupted in that repair attempt, which looks pretty > strange, as aborted transaction shouldn't cause any impact on the > existing fs. > > I'm afraid you can only try btrfs check --repair. > > If no good result, then I'm afraid you have to go to salvage the data, > which I believe over 99% of your data should be safe. > > To salvage the data, either use btrfs-restore, or you my experimental > 'skip_bg' kernel patches: > https://github.com/adam900710/linux/tree/rescue_options > > The 'skip_bg' kernel patches introduce a new mount option, > 'ro,rescue=skip_bg', which can skip the whole (corrupted) extent tree, > and since you have all trees consistent but extent tree, you have all > the readonly btrfs features, like subvolume list, csum check. > > Thanks, > Qu >