修复文件系统超块中损坏的幻数

如果文件系统的超块毁坏,将无法访问文件系统。 您可以修复文件系统超块中损坏的幻数。

超块的大多数毁坏无法修复。 以下过程描述了当问题由毁坏的幻数引起时如何修复 JFS 文件系统的超块。 如果 JFS2 文件系统中的主超块毁坏,那么使用 fsck 命令自动复制辅助超块并修复主超块。

在以下情形中,假设 /home/myfs 是物理卷 /dev/lv02 上的 JFS 文件系统。

中的信息是使用特定版本的AIX 测试的。 您获得的结果可能会因版本和AIX 级别的不同而有很大差异。

  1. 使用以下命令卸载您怀疑可能已损坏的 /home/myfs 文件系统:
    umount /home/myfs
  2. 要确认文件系统损坏,请对文件系统运行 fsck 命令。 例如:
    fsck -p /dev/lv02
    如果问题是超块损坏,那么 fsck 命令将返回下列任一消息:
    fsck: Not an AIXV5 file system
    Not a recognized filesystem type
  3. 使用 root 用户权限,使用 od 命令显示文件系统的超块,如以下示例中所示:
    od -x -N 64 /dev/lv02 +0x1000
    其中,-x 标志将输出以十六进制格式显示,-N 标志指示系统仅格式化从偏移参数 (+) 开始的 64 个输入字节,这指定了文件中文件输出开始的点。 以下是示例输出:
    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
    在前面的输出中,请注意 0x1000 (1234 0234) 处损坏的 magic 值。 如果在创建文件系统时采用了所有缺省值,那么幻数应该为 0x43218765。 如果覆盖任何缺省值,那么幻数应该为 0x65872143。
  4. 使用 od 命令检查辅助超块以获取正确的幻数。 以下是示例命令及其输出:
    $ 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
    注意 0x1f000 处正确的幻数值。
  5. 将辅助超块复制为主超块。 以下是示例命令及其输出:
    $ 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.
  6. 使用 fsck 命令可清除由于使用辅助超块而导致的不一致文件。 例如:
    fsck /dev/lv02 2>&1 | tee /tmp/fsck.errs