public inbox for linux-btrfs@vger.kernel.org
 help / color / mirror / Atom feed
* Recover btrfs partition after accidental reformat
@ 2022-03-07 20:10 Emil
  2022-03-07 23:29 ` Chris Murphy
  0 siblings, 1 reply; 4+ messages in thread
From: Emil @ 2022-03-07 20:10 UTC (permalink / raw)
  To: linux-btrfs

Hi,

I did a boo boo and reformatted my btrfs partition with NTFS (used the wrong /dev/sdX). It was a single drive with standard options (metadata dup, data single) and it was the only partition of the drive.

I have not written any data to the ntfs partition.

Is there any chance of data recovery? The only thing I found was a backup superblock:

[bluemond@BlueQ ~]$ sudo btrfs insp dump-su -s 2 /dev/sdh1
superblock: bytenr=274877906944, device=/dev/sdh1
---------------------------------------------------------
csum_type               0 (crc32c)
csum_size               4
csum                    0x69883d2a [match]
bytenr                  274877906944
flags                   0x1
                        ( WRITTEN )
magic                   _BHRfS_M [match]
fsid                    6dc337f5-2146-4aa5-a9c1-8faf1e2994c5
metadata_uuid           6dc337f5-2146-4aa5-a9c1-8faf1e2994c5
label
generation              7004
root                    436338688
sys_array_size          129
chunk_root_generation   7002
root_level              0
chunk_root              22020096
chunk_root_level        0
log_root                0
log_root_transid        0
log_root_level          0
total_bytes             2000397864960
bytes_used              125869297664
sectorsize              4096
nodesize                16384
leafsize (deprecated)   16384
stripesize              4096
root_dir                6
num_devices             1
compat_flags            0x0
compat_ro_flags         0x3
                        ( FREE_SPACE_TREE |
                          FREE_SPACE_TREE_VALID )
incompat_flags          0x341
                        ( MIXED_BACKREF |
                          EXTENDED_IREF |
                          SKINNY_METADATA |
                          NO_HOLES )
cache_generation        0
uuid_tree_generation    7004
dev_item.uuid           0c86cfd6-fc28-4f99-9b4a-6bd3546aa523
dev_item.fsid           6dc337f5-2146-4aa5-a9c1-8faf1e2994c5 [match]
dev_item.type           0
dev_item.total_bytes    2000397864960
dev_item.bytes_used     131021668352
dev_item.io_align       4096
dev_item.io_width       4096
dev_item.sector_size    4096
dev_item.devid          1
dev_item.dev_group      0
dev_item.seek_speed     0
dev_item.bandwidth      0
dev_item.generation     0



I tried using photorec, but the btrfs partition was pretty fresh and I had a ntfs partition with lots of data before that so it finds all kinds of data from the old ntfs partition.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Recover btrfs partition after accidental reformat
  2022-03-07 20:10 Recover btrfs partition after accidental reformat Emil
@ 2022-03-07 23:29 ` Chris Murphy
  2022-03-08 22:20   ` Emil
  0 siblings, 1 reply; 4+ messages in thread
From: Chris Murphy @ 2022-03-07 23:29 UTC (permalink / raw)
  To: Emil; +Cc: Btrfs BTRFS

On Mon, Mar 7, 2022 at 1:10 PM Emil <broetchenrackete@gmail.com> wrote:
>
> Hi,
>
> I did a boo boo and reformatted my btrfs partition with NTFS (used the wrong /dev/sdX). It was a single drive with standard options (metadata dup, data single) and it was the only partition of the drive.

You'll have damaged files most likely but there's some chance that
with DUP metadata the file system can self-repair its way out of this
mistake.

You could check out
https://raid.wiki.kernel.org/index.php/Irreversible_mdadm_failure_recovery#Simple_using_of_overlays
for guidance on how to use device-mapper to make the drive partition
read-only, and redirect any recovery attempts (writes) to a file so
that it's all reversible. Or take a chance and just apply the changes
to the partition directly... thought it could make things worse.

My thought is to start out with wiping the NTFS signature only, and
making a backup of it (optional, sorta boilerplate but it sounds like
you don't care about this NTFS file system anyway since it was a
mistake).

wipefs -b -t ntfs /dev/sdXY

Next, check status of superblocks before repairing them:

btrfs rescue super -v /dev/sdXY

If there are damaged superblocks it should give you a choice to repair
them from a good superblock. You can do that. Next, try to mount it.
If you're on overlay, just mount it normally and see what happens. If
not, you might go more conservative with

mount -o ro /dev/sdXY

I'm actually not fully sure that this prevents all writes. i.e. if
there's DUP metadata, and btrfs finds corruption with one copy, pretty
sure it tries to write fixups from a good copy. The ro is a VFS mount
option, and enforces no writes from user space, but the kernel code
can still write. I think. So it's a small risk.

I'd probably do this with a current stable or mainline kernel, i.e.
5.15+. This also allows you the option to use combinations of the
rescue= mount options along with ro, in case too much metadata is
damaged for normal mount, you can sometimes skip over the broken
parts. If you're lucky, you might just end up with only some corrupt
files. This will definitely produce a *lot* of btrfs kernel messages,
you will get around 1/2 dozen at least per 4KiB block damaged.

Good luck!


-- 
Chris Murphy

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Recover btrfs partition after accidental reformat
  2022-03-07 23:29 ` Chris Murphy
@ 2022-03-08 22:20   ` Emil
  2022-03-08 23:04     ` Chris Murphy
  0 siblings, 1 reply; 4+ messages in thread
From: Emil @ 2022-03-08 22:20 UTC (permalink / raw)
  To: Chris Murphy; +Cc: Btrfs BTRFS

Thanks for the tip with the overlay. Unfortunately recovering superblocks isn't working:


[bluemond@BlueQ btrfsoverlay]$ sudo btrfs rescue super -v /dev/mapper/sdh1
All Devices:
        Device: id = 1, name = /dev/mapper/sdh1

Before Recovering:
        [All good supers]:
                device name = /dev/mapper/sdh1
                superblock bytenr = 274877906944

        [All bad supers]:
                device name = /dev/mapper/sdh1
                superblock bytenr = 65536

                device name = /dev/mapper/sdh1
                superblock bytenr = 67108864


Make sure this is a btrfs disk otherwise the tool will destroy other fs, Are you sure? [y/N]: y
checksum verify failed on 22020096 wanted 0x00000000 found 0xb6bde3e4
checksum verify failed on 22020096 wanted 0x00000000 found 0xb6bde3e4
ERROR: cannot read chunk root
Failed to recover bad superblocks

[bluemond@BlueQ btrfsoverlay]$ uname -a
Linux BlueQ 5.16.12-arch1-1 #1 SMP PREEMPT Wed, 02 Mar 2022 12:22:51 +0000 x86_64 GNU/Linux

[bluemond@BlueQ btrfsoverlay]$ btrfs version
btrfs-progs v5.16.2

For some reason I can't find anything btrfs related in dmesg...

8 Mar 2022 00:29:30 Chris Murphy <lists@colorremedies.com>:

> On Mon, Mar 7, 2022 at 1:10 PM Emil <broetchenrackete@gmail.com> wrote:
>> 
>> Hi,
>> 
>> I did a boo boo and reformatted my btrfs partition with NTFS (used the wrong /dev/sdX). It was a single drive with standard options (metadata dup, data single) and it was the only partition of the drive.
> 
> You'll have damaged files most likely but there's some chance that
> with DUP metadata the file system can self-repair its way out of this
> mistake.
> 
> You could check out
> https://raid.wiki.kernel.org/index.php/Irreversible_mdadm_failure_recovery#Simple_using_of_overlays
> for guidance on how to use device-mapper to make the drive partition
> read-only, and redirect any recovery attempts (writes) to a file so
> that it's all reversible. Or take a chance and just apply the changes
> to the partition directly... thought it could make things worse.
> 
> My thought is to start out with wiping the NTFS signature only, and
> making a backup of it (optional, sorta boilerplate but it sounds like
> you don't care about this NTFS file system anyway since it was a
> mistake).
> 
> wipefs -b -t ntfs /dev/sdXY
> 
> Next, check status of superblocks before repairing them:
> 
> btrfs rescue super -v /dev/sdXY
> 
> If there are damaged superblocks it should give you a choice to repair
> them from a good superblock. You can do that. Next, try to mount it.
> If you're on overlay, just mount it normally and see what happens. If
> not, you might go more conservative with
> 
> mount -o ro /dev/sdXY
> 
> I'm actually not fully sure that this prevents all writes. i.e. if
> there's DUP metadata, and btrfs finds corruption with one copy, pretty
> sure it tries to write fixups from a good copy. The ro is a VFS mount
> option, and enforces no writes from user space, but the kernel code
> can still write. I think. So it's a small risk.
> 
> I'd probably do this with a current stable or mainline kernel, i.e.
> 5.15+. This also allows you the option to use combinations of the
> rescue= mount options along with ro, in case too much metadata is
> damaged for normal mount, you can sometimes skip over the broken
> parts. If you're lucky, you might just end up with only some corrupt
> files. This will definitely produce a *lot* of btrfs kernel messages,
> you will get around 1/2 dozen at least per 4KiB block damaged.
> 
> Good luck!
> 
> 
> -- 
> Chris Murphy

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Recover btrfs partition after accidental reformat
  2022-03-08 22:20   ` Emil
@ 2022-03-08 23:04     ` Chris Murphy
  0 siblings, 0 replies; 4+ messages in thread
From: Chris Murphy @ 2022-03-08 23:04 UTC (permalink / raw)
  To: Emil; +Cc: Chris Murphy, Btrfs BTRFS

On Tue, Mar 8, 2022 at 3:20 PM Emil <broetchenrackete@gmail.com> wrote:
>
> Thanks for the tip with the overlay. Unfortunately recovering superblocks isn't working:
>
>
> [bluemond@BlueQ btrfsoverlay]$ sudo btrfs rescue super -v /dev/mapper/sdh1
> All Devices:
>         Device: id = 1, name = /dev/mapper/sdh1
>
> Before Recovering:
>         [All good supers]:
>                 device name = /dev/mapper/sdh1
>                 superblock bytenr = 274877906944
>
>         [All bad supers]:
>                 device name = /dev/mapper/sdh1
>                 superblock bytenr = 65536
>
>                 device name = /dev/mapper/sdh1
>                 superblock bytenr = 67108864
>
>
> Make sure this is a btrfs disk otherwise the tool will destroy other fs, Are you sure? [y/N]: y
> checksum verify failed on 22020096 wanted 0x00000000 found 0xb6bde3e4
> checksum verify failed on 22020096 wanted 0x00000000 found 0xb6bde3e4
> ERROR: cannot read chunk root
> Failed to recover bad superblocks

If both copies of the chunk root are damaged, then the file system is
toast. It's a critical tree, if it can't be read then none of the
addresses for file locations can be figured out. Most mkfs write a lot
of zeros on purpose to wipe away portions of previous file systems
that could tend to confuse the new one and so it would seem NTFS's
mkfs has zero'd too much.

I don't really have any good suggestions.

-- 
Chris Murphy

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2022-03-08 23:05 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-03-07 20:10 Recover btrfs partition after accidental reformat Emil
2022-03-07 23:29 ` Chris Murphy
2022-03-08 22:20   ` Emil
2022-03-08 23:04     ` Chris Murphy

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox