All of lore.kernel.org
 help / color / mirror / Atom feed
* Restoring BTRFS partition
@ 2010-04-20 14:56 Alli Quaknaa
  2010-04-20 15:55 ` Wengang Wang
  0 siblings, 1 reply; 10+ messages in thread
From: Alli Quaknaa @ 2010-04-20 14:56 UTC (permalink / raw)
  To: linux-btrfs

Hello,
Yesterday I have messed up my partition table and lost the information
of my BTRFS partition. Luckily I was able to find it's beginning, or
at least I think so. This is what I did:
- created a blank 300M file, formated with btrfs, examined with
hexedit. After 65536 zeros (at the position 0x10000) a sequence "1F 55
A8 7C" comes and at a position 0x10040 an ASCII sequence _BHRfS_M_ is
found.
- I found the same sequence ("_BHRfS_M_") in the raw image of my drive
and I've made another image to make my original look more like the
300M file - so in the beginning 65k of zeros and the sequence
_BHRfS_M_ is at the same position (basically I just deleted whatever
was before this sequence and prepended those zeros).

I don't think I have done anything that could have damaged the
filesystem itself and when viewing with hexedit I still see ELF data,
include files and so on, but I can't get the new image to mount or
btrfsck, it is simply not recognized as a btrfs image. Could anyone
please help me fix this? I have very little actual C/Linux knowledge
(from the programmers point of view) so I'd rather not go reading the
code.

Of course I can send whatever more information you need, just as a
starter - I have no idea what the sequence at 0x10000 is, but it is
different than the one of my blank 300M file - in my partition it says
"CB EE AE 02".

Thanks in advance,
al-Quaknaa

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

* Re: Restoring BTRFS partition
  2010-04-20 14:56 Restoring BTRFS partition Alli Quaknaa
@ 2010-04-20 15:55 ` Wengang Wang
  2010-04-20 16:50   ` Sean Bartell
  0 siblings, 1 reply; 10+ messages in thread
From: Wengang Wang @ 2010-04-20 15:55 UTC (permalink / raw)
  To: Alli Quaknaa; +Cc: linux-btrfs

Hi al-Quaknaa,

I guess the reason is that the 300M file btrfs and the one on your
partition have different block size. Thus 65k zeros on your file image
doesn't mean 65k on the partition. So maybe you will try with blocks
instead of bytes.

The man page for mkfs.btrfs is bad for having no description about what
will be going on if an option(-s this case) is not provided. A fix block
size such as 1k, 4k or calculated per the partition(s) size.

thanks,
wengang.

On 10-04-20 16:56, Alli Quaknaa wrote:
> Hello,
> Yesterday I have messed up my partition table and lost the information
> of my BTRFS partition. Luckily I was able to find it's beginning, or
> at least I think so. This is what I did:
> - created a blank 300M file, formated with btrfs, examined with
> hexedit. After 65536 zeros (at the position 0x10000) a sequence "1F 55
> A8 7C" comes and at a position 0x10040 an ASCII sequence _BHRfS_M_ is
> found.
> - I found the same sequence ("_BHRfS_M_") in the raw image of my drive
> and I've made another image to make my original look more like the
> 300M file - so in the beginning 65k of zeros and the sequence
> _BHRfS_M_ is at the same position (basically I just deleted whatever
> was before this sequence and prepended those zeros).
> 
> I don't think I have done anything that could have damaged the
> filesystem itself and when viewing with hexedit I still see ELF data,
> include files and so on, but I can't get the new image to mount or
> btrfsck, it is simply not recognized as a btrfs image. Could anyone
> please help me fix this? I have very little actual C/Linux knowledge
> (from the programmers point of view) so I'd rather not go reading the
> code.
> 
> Of course I can send whatever more information you need, just as a
> starter - I have no idea what the sequence at 0x10000 is, but it is
> different than the one of my blank 300M file - in my partition it says
> "CB EE AE 02".
> 
> Thanks in advance,
> al-Quaknaa
> --
> To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

* Re: Restoring BTRFS partition
  2010-04-20 15:55 ` Wengang Wang
@ 2010-04-20 16:50   ` Sean Bartell
  2010-04-20 17:14     ` Alli Quaknaa
  2010-04-21  2:49     ` Wengang Wang
  0 siblings, 2 replies; 10+ messages in thread
From: Sean Bartell @ 2010-04-20 16:50 UTC (permalink / raw)
  To: Wengang Wang; +Cc: Alli Quaknaa, linux-btrfs

On Tue, Apr 20, 2010 at 11:55:38PM +0800, Wengang Wang wrote:
> I guess the reason is that the 300M file btrfs and the one on your
> partition have different block size. Thus 65k zeros on your file image
> doesn't mean 65k on the partition. So maybe you will try with blocks
> instead of bytes.

Actually, the block size doesn't matter for this--the superblock is
always at 0x10000. Alli, I think you'll have to upload the start of the
partition so someone can take a look at it.

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

* Re: Restoring BTRFS partition
  2010-04-20 16:50   ` Sean Bartell
@ 2010-04-20 17:14     ` Alli Quaknaa
  2010-04-20 18:13       ` Alli Quaknaa
  2010-04-21  2:49     ` Wengang Wang
  1 sibling, 1 reply; 10+ messages in thread
From: Alli Quaknaa @ 2010-04-20 17:14 UTC (permalink / raw)
  To: Wengang Wang, Alli Quaknaa, linux-btrfs

I will do so soon. How big of a chunk would be most useful? The
original partition was about 15GB.
Thanks,
al-Quaknaa

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

* Re: Restoring BTRFS partition
  2010-04-20 17:14     ` Alli Quaknaa
@ 2010-04-20 18:13       ` Alli Quaknaa
  2010-04-20 20:30         ` Sean Bartell
  0 siblings, 1 reply; 10+ messages in thread
From: Alli Quaknaa @ 2010-04-20 18:13 UTC (permalink / raw)
  To: Wengang Wang, Alli Quaknaa, linux-btrfs

So here are first ~12M of the partition. There was some junk preceding
what is in the file, but it mostly looked like my swap or something
(cached css, javascript and webpages I've recently visited - though I
hope the beginning of the partition isn't somewhere else. Hopefuly you
would be able to tell from the dump).

http://pub.yweb.cz/sda7_head.dump

Thank you all for your time and effort!
al-Quaknaa

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

* Re: Restoring BTRFS partition
  2010-04-20 18:13       ` Alli Quaknaa
@ 2010-04-20 20:30         ` Sean Bartell
  2010-04-20 22:25           ` Alli Quaknaa
  0 siblings, 1 reply; 10+ messages in thread
From: Sean Bartell @ 2010-04-20 20:30 UTC (permalink / raw)
  To: Alli Quaknaa; +Cc: Wengang Wang, linux-btrfs

On Tue, Apr 20, 2010 at 06:13:41PM +0000, Alli Quaknaa wrote:
> So here are first ~12M of the partition. There was some junk preceding
> what is in the file, but it mostly looked like my swap or something
> (cached css, javascript and webpages I've recently visited - though I
> hope the beginning of the partition isn't somewhere else. Hopefuly you
> would be able to tell from the dump).
> 
> http://pub.yweb.cz/sda7_head.dump

The superblock in that file (starting at byte 0x10) is actually a mirror
of the real superblock. Aside from the real superblock at 0x10000,
Btrfs stores mirror copies of the superblock at 0x4000000 (64 MiB),
0x4000000000 (256 GiB), and 0x4000000000000 (1 PiB). Each superblock has
a field that indicates where it is; when you made your image, you put
the mirror superblock where the real superblock was supposed to be, and
btrfs refused to mount it because that field was wrong. 

The real start of the btrfs partition is 0x4000000 bytes (64 MiB) before
the place you found that mirror superblock; the real superblock should
be 0x3ff0000 bytes before the mirror. Even if the real superblock is
corrupt, if the mirror is at 0x4000000, where it's supposed to be, you
should be able to get btrfs to mount it (though I think you might need a
mount option or a patch).

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

* Re: Restoring BTRFS partition
  2010-04-20 20:30         ` Sean Bartell
@ 2010-04-20 22:25           ` Alli Quaknaa
  2010-04-21  0:32             ` Sean Bartell
  0 siblings, 1 reply; 10+ messages in thread
From: Alli Quaknaa @ 2010-04-20 22:25 UTC (permalink / raw)
  To: Alli Quaknaa, Wengang Wang, linux-btrfs

Oh, thank you very much!

I think I have found the real superblock you are talking about, but
I'm afraid I may have written something in the first 64MiB. Is there a
chance btrfsck will recover it?

Also, I think there's gotta be a better way to manipulate those huge
files then dd and hexedit for examination - I'd like to take the raw
file, open it in some hex editor and be able to cut of some of it's
beginning - I can't seem to be able to do it with hexedit. Is there a
tool you'd recomment?

al-Quaknaa

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

* Re: Restoring BTRFS partition
  2010-04-20 22:25           ` Alli Quaknaa
@ 2010-04-21  0:32             ` Sean Bartell
  2010-04-21  7:45               ` Alli Quaknaa
  0 siblings, 1 reply; 10+ messages in thread
From: Sean Bartell @ 2010-04-21  0:32 UTC (permalink / raw)
  To: Alli Quaknaa; +Cc: Wengang Wang, linux-btrfs

On Tue, Apr 20, 2010 at 10:25:34PM +0000, Alli Quaknaa wrote:
> I think I have found the real superblock you are talking about, but
> I'm afraid I may have written something in the first 64MiB. Is there a
> chance btrfsck will recover it?
btrfsck is currently very limited; it only detects a limited number of
problems, and it can't fix anything. Btrfs focuses on handling problems
when they are discovered while using the FS; generally, it should handle
corruption relatively gracefully. However, if anything really crucial
was overwritten and the FS can't be mounted, there aren't any tools to
repair it.

> Also, I think there's gotta be a better way to manipulate those huge
> files then dd and hexedit for examination - I'd like to take the raw
> file, open it in some hex editor and be able to cut of some of it's
> beginning - I can't seem to be able to do it with hexedit. Is there a
> tool you'd recomment?
For viewing, you can use less, head, and tail with hexdump:
    tail -c +$((0x10000+1)) /dev/sda1|hexdump -C|less
will view the disk starting at the superblock. For editing, dd is
probably best, though you could use a hex editor like Okteta. I've also
heard of Radare, supposedly a very advanced command-line tool. Keep in
mind that any tool that deletes the first part of a huge file will be
forced to rewrite the entire file.

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

* Re: Restoring BTRFS partition
  2010-04-20 16:50   ` Sean Bartell
  2010-04-20 17:14     ` Alli Quaknaa
@ 2010-04-21  2:49     ` Wengang Wang
  1 sibling, 0 replies; 10+ messages in thread
From: Wengang Wang @ 2010-04-21  2:49 UTC (permalink / raw)
  To: linux-btrfs

On 10-04-20 12:50, Sean Bartell wrote:
> On Tue, Apr 20, 2010 at 11:55:38PM +0800, Wengang Wang wrote:
> > I guess the reason is that the 300M file btrfs and the one on your
> > partition have different block size. Thus 65k zeros on your file image
> > doesn't mean 65k on the partition. So maybe you will try with blocks
> > instead of bytes.
> 
> Actually, the block size doesn't matter for this--the superblock is
> always at 0x10000. Alli, I think you'll have to upload the start of the
> partition so someone can take a look at it.

I see.
Thanks all for my knowledge!

regards,
wengang.

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

* Re: Restoring BTRFS partition
  2010-04-21  0:32             ` Sean Bartell
@ 2010-04-21  7:45               ` Alli Quaknaa
  0 siblings, 0 replies; 10+ messages in thread
From: Alli Quaknaa @ 2010-04-21  7:45 UTC (permalink / raw)
  To: Alli Quaknaa, Wengang Wang, linux-btrfs

Okay,
I've got it working! Huge thanks to everybody and especially to Sean
for identifying that what I was seeing wasn't the real superblock.
So my steps to fix it were (for future generations searching through
the archives):
1. Find the real superblock
2. play with dd ibs=1 skip=nnnnnnn for a while to get an image where
the checksum is at 0x0 and the _BHRfS_ starts at 0x40
3. create the zeros - dd if=/dev/zero of=pad bs=1 count=65536
4. append the data with dd if=/dev/sda of=pad oflag=append
conv=notrunc skip=nnnnnnn ibs=1
~ that's basically it. Converting the skip offset to some bigger units
(512 in my case) helps speed, also some garbage at the end of the file
doesn't seem to cause any harm, so if one doesn't know the exact end
of the partition, it is better to get some more but not necessary to
compute the exact size.
al-Quaknaa

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

end of thread, other threads:[~2010-04-21  7:45 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-04-20 14:56 Restoring BTRFS partition Alli Quaknaa
2010-04-20 15:55 ` Wengang Wang
2010-04-20 16:50   ` Sean Bartell
2010-04-20 17:14     ` Alli Quaknaa
2010-04-20 18:13       ` Alli Quaknaa
2010-04-20 20:30         ` Sean Bartell
2010-04-20 22:25           ` Alli Quaknaa
2010-04-21  0:32             ` Sean Bartell
2010-04-21  7:45               ` Alli Quaknaa
2010-04-21  2:49     ` Wengang Wang

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.