V6JLinux联盟
清单 22. 一些 fsck 程序
ian@pinguino:~$ ls /sbin/*fsck*
/sbin/dosfsck /sbin/fsck.ext3 /sbin/fsck.reiser4 /sbin/jfs_fscklog
/sbin/e2fsck /sbin/fsck.jfs /sbin/fsck.reiserfs /sbin/reiserfsck
/sbin/fsck /sbin/fsck.minix /sbin/fsck.vfat
/sbin/fsck.cramfs /sbin/fsck.msdos /sbin/fsck.xfs
/sbin/fsck.ext2 /sbin/fsck.nfs /sbin/jfs_fsck
|
系统引导过程使用 fsck 检查根文件系统和 /etc/fstab 控制文件中指定的所有其他文件系统。如果文件系统没有干净地卸载,那么执行一致性检查。这受 /etc/fstab 项的 pass(或 passno)字段(第六个字段)控制。在引导时,不检查 pass 设置为零的文件系统。根文件系统的 pass 值是 1,它先被检查。其他文件系统的 pass 值常常是 2(或更大),这些值表示应该以什么次序检查它们。多个 fsck 操作可以同时运行,所以不同的文件系统可以具有相同的 pass 值,我们例子中的 /boot 和 /home 文件系统就是这种情况。
V6JLinux联盟
清单 23. 用 fstab 项指定文件系统的引导检查
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
/dev/hda6 / reiserfs defaults 0 1
/dev/hda2 /boot ext3 defaults 0 2
/dev/hda8 /dos vfat defaults 0 0
/dev/hda7 /home xfs defaults 0 2
|
注意,某些日志型文件系统(比如 ReiserFS 和 xfs)的 pass 值可能是零,因为由日志代码(而不是 fsck)进行文件系统一致性检查和修复。
修复文件系统
如果文件系统的引导时自动检查无法恢复一致性,那么用户常常被转入一种单用户 shell,可以在这里用一些指令手工运行 fsck。对于非日志型的 ext2 文件系统,会向您提出一系列请求,请您确认建议的操作以修复文件系统上的特定块。一般应该回答 y(表示 yes),让 fsck 尝试修复问题。在系统重新启动时,检查任何丢失的数据或文件。
如果怀疑文件系统损坏了,或者希望手工运行检查,大多数检查程序要求先卸载文件系统。因为不能卸载正在运行的系统上的根文件系统,最好进入单用户模式(使用 telinit 1),然后以只读模式重新挂载根文件系统,这时应该能够执行一致性检查。(下一节 挂载和卸载文件系统 讨论挂载文件系统。)检查文件系统的更好方式是引导一个恢复系统,比如 live CD 或 USB 内存密钥,然后从那里检查未挂载的文件系统。
为什么要采用日志?
对 ext2 硬盘进行 fsck 扫描要花费相当长的时间,因为必须完整地扫描文件系统的内部数据结构(即元数据)。随着文件系统越来越大,尽管硬盘的速度快了,但是这个过程花的时间仍然越来越长,所以一次完整的检查可能要花一小时,甚至更长时间。
这个问题导致了日志型(journaling) 文件系统的出现。日志型文件系统维护着最近对文件系统元数据的修改的日志。在系统崩溃之后,文件系统驱动程序检查这个日志,判断文件系统最近修改的部分是否有错误。由于采用了这种设计,检查日志型文件系统的一致性通常只需几秒时间,无论文件系统有多大。而且,文件系统驱动程序常常在挂载时检查文件系统,所以外部的 fsck 检查一般是不需要的。实际上,对于 xfs 文件系统,fsck 不做任何事!
如果要运行文件系统手工检查,请查看适当 fsck 命令(fsck.ext3、e2fsck 、reiserfsck 等等)的手册页以决定合适的参数。一些例子见清单 24,这里使用一个 Ubuntu live CD 映像运行 fsck 命令。
V6JLinux联盟
清单 24. 手工运行 fsck
root@ubuntu:~# fsck -p /dev/hda6
fsck 1.38 (30-Jun-2005)
Reiserfs super block in block 16 on 0x306V6JLinux联盟 of format 3.6 with standard journal
Blocks (total/free): 5002224/4608416 by 4096 bytes
Filesystem is clean
Replaying journal..
Reiserfs journal '/dev/hda6' in blocks [18..8211]: 0V6JLinux联盟 transactions replayed
Checking internal tree..finished
root@ubuntu:~# fsck -p /dev/hda2
fsck 1.38 (30-Jun-2005)
BOOT: clean, 34/26208 files, 22488/104420 blocks
root@ubuntu:~# fsck -p /dev/hda7
fsck 1.38 (30-Jun-2005)
root@ubuntu:~# fsck -a /dev/hda8
fsck 1.38 (30-Jun-2005)
dosfsck 2.11, 12 Mar 2005, FAT32, LFN
/dev/hda8: 1 files, 2/501039 clusters
|
高级工具
有一些更高级的工具可以用来检查或修复文件系统。通过手册页了解正确的使用方法,并参考 Linux Documentation Project(参见 参考资料)中的 how-to 信息。这些工具几乎都要求先卸载文件系统,但是有些功能可以应用于以只读模式挂载的文件系统。下面描述了几个命令。
在尝试进行任何恢复之前,应该对文件系统进行备份。
用于 ext2 和 ext3 文件系统的工具
tune2fs
调整 ext2 和 ext3 文件系统上的参数。使用它将日志添加到 ext2 文件系统上,使它成为 ext3 系统,以及显示或设置实施检查之前进行挂载的最大次数。还可以分配标签,以及设置或禁用各种可选特性。
dumpe2fs
输出 ext2 或 ext3 文件系统的超级块和块组描述符信息。
debugfs
这是一个交互式的文件系统调试器。使用它检查或修改 ext2 或 ext3 文件系统的状态。
用于 Reiserfs 文件系统的工具
reiserfstune
显示和调整 ReiserFS 文件系统上的参数。
debugreiserfs
它对 ReiserFS 文件系统执行与 dumpe2fs 和 debugfs 相似的功能。
用于 XFS 文件系统的工具
xfs_info
显示 XFS 文件系统信息。
xfs_growfs
扩展 XFS 文件系统(假设有另一个分区可用)。
xfs_admin
修改 XFS 文件系统的参数。
xfs_repair
当挂载检查不足以修复系统时,修复 XFS 文件系统。
xfs_db
检查或调试 XFS 文件系统。
Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论