Saturday, January 29, 2011

Fixing a corrupted magic number in the file system superblock

If the superblock of a file system is damaged, the file system cannot be accessed. You can fix a corrupted magic number in the file system superblock.

Most damage to the superblock cannot be repaired. The following procedure describes how to repair a superblock in a JFS file system when the problem is caused by a corrupted magic number. If the primary superblock is corrupted in a JFS2 file system, use the fsck command to automatically copy the secondary superblock and repair the primary superblock.

In the following scenario, assume /home/myfs is a JFS file system on the physical volume /dev/lv02.

The information in this how-to scenario was tested using specific versions of AIX®. The results you obtain might vary significantly depending on your version and level of AIX.

Unmount the /home/myfs file system, which you suspect might be damaged, using the following command:
umount /home/myfs
To confirm damage to the file system, run the fsck command against the file system. For example:
fsck -p /dev/lv02
If the problem is damage to the superblock, the fsck command returns one of the following messages:
fsck: Not an AIXV5 file system
OR
Not a recognized filesystem type
With root authority, use the od command to display the superblock for the file system, as shown in the following example:
od -x -N 64 /dev/lv02 +0x1000
Where the -x flag displays output in hexadecimal format and the -N flag instructs the system to format no more than 64 input bytes from the offset parameter (+), which specifies the point in the file where the file output begins. The following is an example output:
0001000  1234 0234 0000 0000 0000 4000 0000 000a
0001010  0001 8000 1000 0000 2f6c 7633 0000 6c76
0001020  3300 0000 000a 0003 0100 0000 2f28 0383
0001030  0000 0001 0000 0200 0000 2000 0000 0000
0001040
In the preceding output, note the corrupted magic value at 0x1000 (1234 0234). If all defaults were taken when the file system was created, the magic number should be 0x43218765. If any defaults were overridden, the magic number should be 0x65872143.
Use the od command to check the secondary superblock for a correct magic number. An example command and its output follows:
$ od -x -N 64 /dev/lv02 +0x1f000
001f000  6587 2143 0000 0000 0000 4000 0000 000a
001f010  0001 8000 1000 0000 2f6c 7633 0000 6c76
001f020  3300 0000 000a 0003 0100 0000 2f28 0383
001f030  0000 0001 0000 0200 0000 2000 0000 0000
001f040
Note the correct magic value at 0x1f000.
Copy the secondary superblock to the primary superblock. An example command and output follows:
$ dd count=1 bs=4k skip=31 seek=1 if=/dev/lv02 of=/dev/lv02
dd: 1+0 records in.
dd: 1+0 records out.
Use the fsck command to clean up inconsistent files caused by using the secondary superblock. For example:
fsck /dev/lv02 2>&1 | tee /tmp/fsck.errs

No comments:

Post a Comment