应对 Linux 文件系统故障
当您使用术语“文件系统故障”时,您的意思是文件系统数据结构(或诸如 inode、目录、超级块等对象)损坏。这可能是由以下任何一个原因造成的:
* Linux/UNIX 系统管理员的错误
* 有缺陷的设备驱动程序或实用程序(尤其是第三方实用程序)
* 由于 UPS 故障导致断电(在生产系统上很少见)
* 内核错误(这就是为什么您不在生产 Linux/UNIX 系统上运行最新内核的原因,大多数时候您需要使用稳定的内核版本)
由于文件系统故障:
- 文件系统将拒绝挂载
- 整个系统挂起
- 即使文件系统挂载操作成功,用户在挂载时仍可能会注意到奇怪的行为,例如系统重启、目录列表中出现乱码等
那么你该如何应对文件系统故障呢?大多数情况下,fsck(ext2/ext3 实用程序的前端)可以解决问题,首先只需运行 e2fsck – 检查 Linux ext2/ext3 文件系统(假设 /home [/dev/sda3 分区] 文件系统用于演示目的),首先卸载 /dev/sda3,然后输入以下命令:
# e2fsck -f /dev/sda3
其中,
- -f:即使文件系统看起来干净,也强制检查。
请注意,如果未找到超级块,e2fsck 将因致命错误而终止。但是,Linux 在每个文件系统中都维护超级块的多个冗余副本,因此您可以使用 -b {alternative-superblock} 选项来摆脱此问题。备份超级块的位置取决于文件系统的块大小:
- 对于块大小为 1k 的文件系统,可以在块 8193 处找到备份超级块
- 对于块大小为 2k 的文件系统,位于块 16384
- 对于 4k 块大小,位于块 32768。
提示您还可以尝试以下任何一个命令来确定替代超级块位置:
# mke2fs -n /dev/sda3
或者
# dumpe2fs /dev/sda3|grep -i superblock
要通过替代超级块修复文件系统,请使用以下命令:
# e2fsck -f -b 8193 /dev/sda3
但是,强烈建议您在系统上运行 fsck 命令之前进行备份,使用 dd 命令创建备份(前提是 /disk2 下有空余空间)
# dd if=/dev/sda2 of=/disk2/backup-sda2.img
如果您使用的是 Sun Solaris UNIX,请参阅操作方法:恢复坏的超级块。
请注意,如果硬盘参与软件 RAID 阵列,事情就会变得复杂。请查看软件 RAID HOWTO – 错误恢复。本文/提示是了解 UNIX/Linux 文件系统系列的一部分,继续阅读了解 Linux 文件系统系列的其余部分(这是第三部分):