用fsck检查文件系统完整性
文件系统很复杂,因此易于发生错误 。可以用fsck 命令检查文件系统是否正确和有效 。它可以根据指令修复找到的小错误,并将未修复错误报告用户 。幸运的是,文件系统的代码非常有效,所以根本极少出现问题,并且问题通常原因是电源失败、硬件失败、或操作错误,例如没有正常关闭系统 。
大多数系统设置为启动时自动运行fsck ,因此任何错误将在系统使用前被检测到(并根据希望修正) 。使用有错误的文件系统可能使问题变得更坏:如果数据结构有问题,使用这个文件系统可能使之更糟,导致更多的数据丢失 。当然,在大的文件系统上运行fsck 会花一定的时间,如果系统正常关闭,几乎从不发生错误,因此有一些方法可以不进行检查 。如果文件/etc/fastboot 存在,就不检查 。另外,如果ext2文件系统在超级快中有一个特定的标记告知该文件系统在上次mount后没有正常unmount. 如果标记指出unmount正常完成(假设正常unmount指出没问题),e2fsck (fsck 的ext2文件系统版) 就不检查系统 。/etc/fastboot 是否影响系统依赖于你的启动手稿,但ext2标记则在你使用e2fsck 时发生作用--基于一个e2fsck 选项(参阅e2fsck 手册页)
自动检查只对启动时自动mount的文件系统发生作用 。使用fsck 手工检查其他文件系统,比如软盘 。
如果fsck 发现为修复的问题,你需要深入了解文件系统的一般工作原理和有问题的文件系统的细节,或好的备份 。最后一个办法容易(虽然冗长)安排,如果你自己不知道,有时可以通过朋友、Linux新闻组、电子邮件列表或其他支持源安排 。我很想告诉你更多,但我对这的学习和实践也并不多 。Theodore T"so的debugfs 程序应该有用 。
fsck 只能运行于未mount的文件系统,不要用于已mount的文件系统(除了启动时的只读根文件系统) 。这是因为它存取原始磁盘,在操作系统不知道的情况下修改文件系统 。There will be trouble, if the operating system is confused.
用badblocks检查磁盘错误
应该周期性地用badblocks 命令检查坏块它输出找到的所有坏块的编号的列表 。列表给fsck 记录在文件系统数据结构中,使操作系统存储数据时不使用这些坏块 。举例:
$ badblocks /dev/fd0H1440 1440 > bad-blocks
$ fsck -t ext2 -l bad-blocks /dev/fd0H1440
Parallelizing fsck version 0.5a (5-Apr-94)
e2fsck 0.5a, 5-Apr-94 for EXT2 FS 0.5, 94/03/10
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Check reference counts.
Pass 5: Checking group summary information.
/dev/fd0H1440: ***** FILE SYSTEM WAS MODIFIED *****
/dev/fd0H1440: 11/360 files, 63/1440 blocks
$
如果badblocks报告一个块已经使用,e2fsck 将试着将此块移到其他地方 。如果该块真的坏了,而不是在坏块边缘,文件内容可能丢失 。
Fighting fragmentation
文件写到磁盘时,不一定在连续的块中 。没在连续块中的文件叫碎片 。因为磁盘的读写头回更多地移动,读碎片文件会花较长的时间 。虽然如果有好的读前缓冲系统不会有什么问题,但最好还是避免碎片 。
Ext2文件系统试图使碎片最少,即使不能将一个文件的所有块存在连续扇区中,也尽量靠近 。Ext2通常有效地安排里文件其他块最近的空闲块,因此很少需要关心碎片问题 。Ext2文件系统有一个消除碎片程序,请看参考书目中的 [TV] 。
有许多MSDOS消碎片程序在文件系统中移动块以消除碎片 。其他一些文件系统,消碎片必须通过备份-重产生-回存文件系统来完成 。对于所有文件系统,消碎片应该备份文件系统,因为很多原因可能在消碎片过程中导致错误 。
推荐阅读
- 1 Linux管理员手册--系统概述
- 2 Linux管理员手册--目录树概述
- 2 Linux指令大全
- Linux指令大全
- Linux下Makefile的automake生成全攻略
- Linux中流媒体Helix Server的安装和配置
- 利用shell编程实现DOS风格的Linux命令行
- 设置一个高容量的Linux POP3服务器
- 如何在Linux环境模拟DOS命令
- 下 Linux系统文件命令精通指南
