[Top] [All Lists]

Re: XFS: SB validate failed

To: Hamid <spam.wax@xxxxxxxxx>
Subject: Re: XFS: SB validate failed
From: Stefan Smietanowski <stesmi@xxxxxxxxxx>
Date: Sat, 31 May 2008 02:19:13 +0200
Cc: Timothy Shimmin <tes@xxxxxxx>, Eric Sandeen <sandeen@xxxxxxxxxxx>, xfs@xxxxxxxxxxx
In-reply-to: <48408D3E.3090401@xxxxxxxxx>
References: <3607657a0805291005k457791cej1c5f867da0f95965@xxxxxxxxxxxxxx> <483EE5BD.8020407@xxxxxxxxxxx> <3607657a0805291255i59fd006fi9d6836cf528d19a6@xxxxxxxxxxxxxx> <483F0BC3.2050901@xxxxxxxxxxx> <3607657a0805291400h3c50165lea6fbea919deed0f@xxxxxxxxxxxxxx> <483F1AED.3010808@xxxxxxxxxxx> <3607657a0805291446t79808c63l664780c1cbc3d871@xxxxxxxxxxxxxx> <483F907A.3020108@xxxxxxx> <3607657a0805301019h4a49dc86ne8f1f019629a1c41@xxxxxxxxxxxxxx> <4840406F.50402@xxxxxxxxxx> <48408D3E.3090401@xxxxxxxxx>
Sender: xfs-bounce@xxxxxxxxxxx
User-agent: Thunderbird (Windows/20080421)
Hamid wrote:
Stefan Smietanowski wrote:

Are you dd'ing the whole disk or just the partition(s) you want ? I
recommend just doing the partition(s) into seperate files. I'm uncertain
if loopback nowadays handles partitions or not. I know it didn't before
but there were patches back then.

// Stefan

I did the whole disk under Linux:

$ dd if=/dev/sdb of=disk.img conv=noerror,sync

This is how fdisk sees my image:

$ sudo fdisk -ul disk.img
Disk disk.img (SGI disk label): 255 heads, 63 sectors, 0 cylinders
Units = sectors of 1 * 512 bytes

----- partitions -----
Pt#    Device  Info     Start       End   Sectors  Id  System
8: disk.img1            4096   3915599   3911504   a  SGI xfs
9: disk.img2               0      4095      4096   0  SGI volhdr
11: disk.img3               0   3915599   3915600   6  SGI volume
----- Bootinfo -----
Bootfile: /unix
----- Directory Entries -----
0: sgilabel   sector    2 size     512

I could mount the image of the healthy disk using:

$ sudo mount -t xfs -o loop,offset=$((512*4096)) disk.img /mnt

and I was able to browse the content of /mnt :)

Excellent, that's one step on the way.

Trying to mount the whole image didn't work. I was hoping I could do

Well of course, since "mounting" implies a filesystem and how is
the mount command to know which partition you want to mount and
what filesystem it is to mount? For all it knows you can have 4
partitions with 4 different filesystems on it and how is it to
choose the correct one?

Remember mounting = enabling a filesystem (in a device or file or...)
to be used via a filesystem driver and exported to a mountpoint (/mnt
for example).

In order to do what you're really after you either use your offset
trickery OR use a kernel that can mount partitioned loopback OR write
the image to another disk.

that so it gives me the possibility of modifying the partition table of the bad disks that refuse to mount under either OS.

If you want to play with the whole device (ie not files) then you can
just run your favorite partition program on your image file or your
favorite binary patching program on the image file.

Basically I want to play with bad disks' images to see if I can recover any data without actually modifying the disks.
Is there any work around for this ?
Should I create a device (rather than a loop) for the whole image ?

I think you have the terminology a little mixed up.

If you mount a something without supplying -o loop "mount" will assume
the filesystem resides in a DEVICE.

If you mount a something WHILE supplying -o loop you tell "mount" that
it should mount it using a loop device. Note device here, it's trickery
really as what it does is that "mount" will FIRST create a new device
node "/dev/loop0" for example and then it will mount from that device

So "should I create a device .." is a little mixed up as that's what
mount is doing deep inside.

I should mention that creating the whole disk image by using dd under Irix6.5 and using the same mount command as above in Linux didn't work! Something might have gone wrong during the file transfer from Irix to Linux. If I get a chance I'll try it again.

If you do, then create a checksum (sha1sum och md5sum or something) and
compare the image before and after transfer to make sure it's identical.

// Stefan

<Prev in Thread] Current Thread [Next in Thread>