分类: LINUX
2009-11-23 20:24:58
fsck [-aANPrRsTV][-t <文件系统类型>][文件系统...]
(有待实践)
【功能】
检查文件系统并尝试修复错误。
补充说明:当文件系统发生错误四化,可用fsck指令尝试加以修复。
【举例】
*检查 msdos 档案系统的 /dev/hda5 是否正常,如果有异常便自动修复::
$fsck -t msdos -a /dev/hda5
此指令可与 /etc/fstab 相互参考操作来加以了解。
*检查所有的缺省文件系统:
$fsck
这个命令检查在 /etc/filesystems 文件中所有标记 check=true 的文件系统。fsck 命令这种形式在对文件系统做出任何更改之前会向您请求许可。
*利用缺省的文件系统自动修复较次要的问题:
$fsck -p
*检查一个特定的文件系统:
$fsck /dev/hd1
这个命令检查位于 /dev/hd1 设备上的未安装的文件系统。
【描述】
*参 数:
-a 自动修复文件系统,不询问任何问题。
-A 依照/etc/fstab配置文件的内容,检查文件内所列的全部文件系统。
-N 不执行指令,仅列出实际执行会进行的动作。
-P 当搭配"-A"参数使用时,则会同时检查所有的文件系统。
-r 采用互动模式,在执行修复时询问问题,让用户得以确认并决定处理方式。
-R 当搭配"-A"参数使用时,则会略过/目录的文件系统不予检查。
-s 依序执行检查作业,而非同时执行。
-t<文件系统类型> 指定要检查的文件系统类型。
-T 执行fsck指令时,不显示标题信息。
-V 显示指令执行过程。
-o f 对系统进行强制检查,不论系统是否在clean等状态
-o p 非交互式检查并修复文件系统,对有的问题则立即退出
-o b=xx 用来修复超级块的错误,就是将备份的超级块内容拷入超级块中。solaris对超级块很重视,它的备份有很多,一般的b=32就可以了,如果不行可以使用命令newfs -N /dev/rdsk/cxtxdxsx来查看超级块的位置,其中任何一个备份块都可使用.
*参数(详细)
-d BlockNumber 搜索指定磁盘块的参考。无论 fsck 命令遇到包含特定块的文件,它将会显示索引节点号和所有指向它的路径名称。对于 JFS2 文件系统,引用指定模块的索引节点号将会被显示,但是不是它们的路径名称。
-f 进行快速检查。在正常情况下,通过非正确方式关闭系统来停机仅有的文件系统很可能被影响,这个文件系统就是当系统停止时在安装的那些。 -f 标志会提示 fsck 命令不要检查没有成功安装的文件系统。fsck 命令通过检查文件系统超级块中的 s_fmod 标志来决定这件事。 当文件系统没有成功安装的时候,无论何时文件系统被安装和被清除,这个标志都将被设定。如果文件系统被成功的卸载,这不大可能会存在什么问题。因为多数文件系统没有成功安装,不检查这些文件系统能减少检查时间。
-i i-NodeNumber 搜索指定索引节点的参考。无论何时 fsck 命令遇到一个指向指定索引节点的目录,它都会显示这个参考的完整路径名称。
-n 对 fsck 命令所提出的所有问题给出一个no的回应;不打开指定的文件系统来写。
-o 选项 向 fsck 命令传递逗号分隔的选项。这些选项被认为是文件系统的实现细节,除了下面目前为了所有文件系统而当前被支持的选项:
mountable
如果有问题的文件系统可安装(清除),促使 fsck 命令成功的退出,返回一个“0”值。如果文件系统不可安装,fsck 命令退出并返回一个值“8”。
mytype
如果存在问题的文件系统与在 /etc/filesystems 文件中或者在命令行中通过 -V 标志指定的具有相同的类型,那么促使 fsck 命令退出并给出一个成功的“0”值。否则,返回一个值“8”。例如,如果/(引导文件系统)是一个分类文件系统,那么 fsck 命令 -o mytype -V jfs / 会退出给出一个“0”值。
-p 不显示次要问题的消息但是自动修复问题。这个标志并不是象-y 标志那样授予大规模许可,当系统正常启动的时候对自动进行检查工作有用。无论系统在何时自动运行,您应该将这个标志作为系统启动过程的一部分来使用。也允许并行分组检查。如果主要的超级块损坏了,次要的超级块就被验证,并且复制到主要的高级块中。
-t文件 如果 fsck 命令得不到足够的内存来保存它的表的话,在文件系统中作为一个临时文件而不是被检查的文件来指定File参数。如果没有指定 -t 标志,那么 fsck 命令需要一个临时文件,它会提示您给这个临时文件起名字。但是,如果指定了 -p 标志,fsck 命令是不成功的。如果临时文件不是一个特定的文件,当 fsck 命令结束的时候,它就会被删除。
-V VfsName 使用为文件系统由VFSName变量指定的虚拟文件系统的描述,而不是用 /etc/filesystems 文件决定描述。如果-V VfsName 标志没有在命令行中指定,就会检查 /etc/filesystems 文件并且 vfs= 匹配节的特性被认为是正确的文件系统类型。
-y 对所有 fsck命令提出的所有问题假定一个“yes”的响应。这个标志使 fsck 命令采取它认为必要的行动。仅在损坏严重的文件系统中使用这个标志。
*一些原理:
大多数系统设置为启动时自动运行fsck ,因此任何错误将在系统使用前被检测到(并根据希望修正)。自动检查只对启动时自动mount的文件系统发生作用,使用fsck 手工检查其他文件系统,比如软盘。使用有错误的文件系统可能使问题变得更坏。如果系统正常关闭,几乎从不发生错误,因此有一些方法可以不进行检查。如果文件/etc/fastboot 存在,就不检查。另外,如果ext2文件系统在超级块中有一个特定的标记告知该文件系统在上次mount后没有正常unmount. 如果标记指出unmount正常完成(假设正常unmount指出没问题),e2fsck (fsck 的ext2文件系统版) 就不检查系统。/etc/fastboot 是否影响系统依赖于你的启动手稿,但ext2标记则在你使用e2fsck 时发生作用--基于一个e2fsck 选项(参阅e2fsck 手册页)
*运行fsck后,该命令会分6个阶段对文件系统
进行检查,这六个阶段分别是:
阶段1: 检查块和块的大小
阶段2: 检查路径名
阶段3: 检查连接性
阶段4: 检查参考记数
阶段5: 检查自由块列表
阶段6: 补救自由块列表
对每个阶段进行检查,常见的一些错误:
1) 移去一个没有相关文件的目录入口
这时用户可以回答Yes或Y来删除该目录入口。
2) 重连接一个已分配但不能访问的文件:
fsck找到了一个已分配的I节点,但却不可访问(该节点没与任何目录连接),这时一般对fsck的"RECONNECT?"回答Yes,即把该I节点连接到lost+found目录下,文件名即是I节点号,之后管理员应检查该文件类型,判明该文件用途,再将该文件拷贝到相应目录下。
3) 连接数调整ADJUST
在交互方式下,fsck若发现连接数(与原记录)不一致,将询问用户采取何种行动,本例发现一目录的I节点连接数与该目录的真实连接数不一致。
这时用户应该回答Yes或Y来改正连接数。
4) 自由块表不一致
fsck查出未分配块数与超级块中所给出的自由块表不一致。
这时用户应该回答Yes或Y来修正超级块。
从上面的出错信息和处理方法可以发现,对于fsck询问的问题大多数情况下都可以用Yes来回答,所以在实际应用时,可以用" -y"选项来执行该命令对硬盘进行检查和修复。
这里:
RECONNECT
表示目录丢失,可将其存入lost+found中再作转移。回答yes
SUPERBLK坏(注意是坏,不是wrong)
修复见上面(如果是wrong就随便了,修不修都可以)
CLEAR
删i节点,可能会错
REMOVE
删文件,一般给出文件名。file=....
ADJUST
调整连接数。实际数与原记录不符。回答yes
使用一般都是yes过去的,不能在正在mount的文件系统上操作,否则有可能导致文件系统损坏。但也没有碰到过用fsck导致发生错误的情况,不过还是建议操作的时候规范一些。
对于一个已经安装好了的文件系统,fsck 命令不会做出矫正。
fsck 命令出于某些原因可以在一个已经安装好了的文件系统中运行,但不是进行修复。但是当文件系统安装完毕之后,也许会返回不准确的错误消息。
fsck 命令检查并以交互方式修复不连贯的文件系统。在安装文件系统之前,应该运行这个命令。您必须能够读设备文件,在这个设备上驻留着文件系统(例如/dev/sda1)安装一个不连贯的文件系统也许会导致系统的崩溃。
【其它】
*运行fsck命令后产生的文件有什么用?
当执行fsck命令时,fsck命令如果发现存在孤立的文件或目录,这些孤立的文件或目录对于系统管理员或用户来说,无法访问到它,因为它与它的上级目录失去了关联,如果用户允许fsck重新把它们找回来的话,fsck命令就会把这些孤立的文件或目录放在文件系统的/lost+found目录下,并用各自的i-node号来命名,以便用户查找自己需要的文件。Lost+found目录通过它的英文含义我们都可以知道,它是一个失物认领处。
因此当某个用户发现自己丢失了某个文件,可以在执行fsck之后到/lost+found目录下去查找,这时通过文件名已无法辨认出文件的作用,只能用file之类的命令来确定文件的类型,如果是数据文件,可以用more或vi命令来查看,如果是二进制文件,可以用dbx命令来调试或者试着执行它(注意它可能是一个具有破坏性的程序),知道文件或目录的作用之后,可以对其进行改名。
如果用户不允许fsck把这些孤立的文件或目录找回来,那么fsck命令就会破坏这些文件或目录,彻底丢失这些文件或目录,用户或系统管理员永远也无法找回它们。
*关于fsck得结果输出:
当系统启动的时候会使用fsck对文件系统进行扫描,并相应的报出扫描结果。
例如:dev/rdsk/c0t0d0s7 stable 等。
后面是Fs的状态。其中,
clean表示文件系统umount后无人用,
stable表示文件系统用过,但却是完整的,好的。
而出一大堆的话,还有什么fragment %什么的的那都表示文件系统上有乱的地方,那么就应该进入系统后使用fsck来整理。
当系统的状态是clean,stable和logging的状态的时候fsck不运行。
在非法关机后(各种原因),再次启动的时候会有很多的情况,上面说的是一种情况,再厉害一些是系统只能进入但用户状态,最厉害的是连单用户的状态都无法进入(肯定是/和/usr区有问题。这是因为fsck对/区的扫描无法通过的话,系统当然无法启动,而fsck调用的一些函数库又在/usr上。。。。)
此外,在一个已经安装好了的文件系统上运行的 fsck 命令产生不可靠的结果。
*文件
/usr/sbin/fsck 包含 fsck 命令。
/etc/filesystems 列出已知的文件系统并且定义它们的特征。
/var/spool/mail/* 包含虚拟文件系统类型的描述。
/usr/bin/from 包含当系统启动的时候运行的命令(包括 fsck 命令)。