[Linux-cluster] Unformatting a GFS cluster disk

Bob Peterson rpeterso at redhat.com
Tue Mar 25 21:54:25 UTC 2008


On Tue, 2008-03-25 at 18:47 +0000, DRand at amnesty.org wrote:
> 
> Help! 
> 
> We have accidentally formatted a GFS cluster with this command. 
> 
> mkfs.gfs -J 1024 -j 4 -p lock_gulm -t aicluster:cmsgfs /dev/sda 
> 
> We were using the disk as a backup system. We need to unformat it..
> Are there any tools that will let us get at the disk directory? 
> 
> Damon. 

Hi Damon,

The short answer is no.
There are no tools I'm aware of to "unformat" a gfs file system.
However:

Your ability to get back data depends on how the file system
looked before the mkfs.  If /dev/sda was ext3 before, I don't know
what you can do to recover it.  I do know that gfs and ext3 have
their superblocks in different places, and I don't know ext3.
The same pretty much goes for every other file system (xfs, vfat, etc.).

If, however, /dev/sda was a gfs file system before the mkfs, then
you stand a better chance of retrieving some data.  If /dev/sda
was NOT formatted with the exact same options to mkfs.gfs as before,
(i.e. same rg size, same journal size, same number of journals) then
your chances are very slim.

If it were my file system, and I didn't have a backup, and I had
data on it that I absolutely needed to get back, I personally would
use the gfs2_edit tool (assuming RHEL5, Centos5 or similar) which can
mostly operate on gfs1 file systems.  The "gfs_edit" tool will also
work, but it is much more primitive than gfs2_edit (but at least it
exists on RHEL4, Centos4 and similar).

Bear in mind that this is completely theoretical, dangerous, untested
and likely to NOT work properly, but there is a slim chance it might.

Before I started to mess around with this, I would make a block-by-block
backup of the entire device so I can always go back to where I started.
Something like:  dd if=/dev/sda of=/home/bob/sda.backup bs=1M
(Assuming you have enough space available in /home/bob/)

Assuming that the file system is not mounted from any node in your
cluster, I would use gfs2_edit to go through every entry in the rindex
file, use "j" to jump to each of the resource groups and "F" to go
forward to each of their bitmaps, and for each of those blocks, I would
change every byte in the block map to 0xff.  This would basically tell
gfs that every single block is "in use" and is "metadata".  Then I would
run gfs_fsck with "-y" to see if it could sort it all out.  It may run
for a very long time, and you'll get thousands of messages saying that
everything is in the wrong state.  Anything it finds would probably get
put into the "lost+found" directory, since the mkfs would have erased
your root directory.

I would probably leave the last resource group bitmap all 0x00, though,
otherwise gfs_fsck won't have any place to allocate a new lost+found
directory, etc.

And if I got anything valuable back from it, I'd thank the deity of my
choice.  :7)

Regards,

Bob Peterson
Red Hat GFS





More information about the Linux-cluster mailing list