fsck在数据恢复中的作用

来源:互联网 发布:数据清新图 编辑:程序博客网 时间:2024/06/06 17:28
一)、在处理Linux、Unix系统的数据恢复时,如果发现文件系统的大体架构上没有问题,但它又的确存在一些比较细小的难以人工查找的错误时,可以使用fsck做文件系统的检测。

二)fsck详解

         功    能:检测文件系统并尝试修复错误。

  格    式:fsck [-aANPrRsTV][-t <文件系统类型>][文件系统...]

  补    充:当文件系统发生错误时,可用fsck尝试加以修复。

  参数详解:

  -a 自动修复文件系统,不询问任何问题。

  -A 依照/etc/fstab配置文件的内容,检查文件内所列的全部文件系统。

  注:文件/etc/fstab存放的是系统中的分区及文件系统信息。当正确的设置了该文件,则可以通过"mount /directoryname"挂载一个文件系统,每个文件系统都对应一个独立的行,每行中的字段都有空格或tab分开。同时fsckmountumount的等命令都利用该文件。

  -N 不执行指令,仅列出实际执行会进行的动作。 

  -P 当搭配"-A"参数使用时,则会同时检查所有的文件系统。

  -r 采用交互模式,在执行修复时询问用户,让用户选择处理方式。

  -R 当搭配"-A"参数使用时,则会略过/目录的文件系统不予检查。

  -s 依序执行检查作业,而非同时执行。

  -t  <文件系统类型>  用于指定要检查的文件系统类型。

  -T 执行fsck指令时,不显示标题信息。

  -V 显示指令执行详细信息。

 

fsck在对文件系统进行检查时,如果发现错误,会提示用户进行修改,常见的错误有:

1) 移去一个没有相关文件的目录入口,这时用户可以回答YesY来删除该目录入口。     

2) 重连接一个已分配但不能访问的文件,fsck找到了一个已分配的i-node,但却不可访问(该节点没与任何目录连接),这时如果对fsck"RECONNECT"回答Yes,即把该I节点连接到lost+found目录下,文件名即是i-node号,之后用户可以检查该文件类型,判断文件用途,再将该文件做相应处理。

3) 连接数调整,在交互方式下,fsck若发现连接数不一致,将询问用户采取何种行动,如果发现目录的i-node连接数与该目录的真实连接数不一致,这时用户应该回答YesY可以改正连接数。     

4) 自由块表不一致,如果fsck查出未分配块数与超级块中所给出的自由块表不一致,这时用户应该回答YesY来修正超级块。

fsck的询问大多数情况下都可以用Yesy回答,也可以用" -y"选项来执行该命令对硬盘进行检查和修复。

  用fsck检查文件系统完整性

      大多数系统设置为启动时自动运行fsck ,因此任何错误将在系统使用前被检测到(并根据希望修正)。使用有错误的文件系统可能使问题变得更糟,甚至导致更多的数据丢失。当然,在大的文件系统上运行fsck 会花一定的时间,如果系统正常关闭,几乎从不发生错误,因此有一些方法可以不进行检查。如果文件/etc/fastboot 存在,就不检查。另外,如果ext2文件系统在超级块中有一个特定的标记告知该文件系统在上次mount后没有正常unmount. 如果标记指出unmount正常完成(假设正常unmount指出没问题)e2fsck (fsckext2文件系统版) 就不检查系统。/etc/fastboot 是否影响系统依赖于你的启动脚本。另外自动检查只对启动时自动mount的文件系统发生作用。

  当系统启动的时候会使用fsck对文件系统进行扫描,并相应的报出扫描结果。例如:/dev/rdsk/c0t0d0s7 stable等。

  后面是Fs的状态。其中,clean表示文件系统umount后无人用,stable表示文件系统用过,但却是完整的,好的。而出一大堆的话,还有什么fragment %什么的的那都表示文件系统上有乱的地方,那么就应该进入系统后使用fsck来整理。提起这个来,我想说说在非法关机后(各种原因),再次启动的时候会有很多的情况,上面说的是一种情况,再厉害一些是系统只能进入但用户状态,最厉害的是连单用户的状态都无法进入(肯定是//usr区有问题。这是因为fsck/区的扫描无法通过的话,系统当然无法启动,而fsck调用的一些函数库又在/usr上。。。。)

  当系统的状态是cleanstablelogging的状态的时候fsck不运行。

    三)、fsck的使用

  主要的三个参数:

  -o f 对系统进行强制检查,不论系统是否在clean等状态

  -o p 非交互式检查并修复文件系统,如果有问题则立即退出

  -o b=xx 用来修复超级块的错误,就是将备份的超级块内容拷入超级块中。solaris对超级块很重视,它的备份有很多,一般的b=32就可以了,如果不行可以使用命令newfs -N /dev/rdsk/cxtxdxsx来查看超级块的位置,其中任何一个备份块都可使用。
原创粉丝点击