fsck 命令用于检查和维护文件系统,该命令类似于windows下的chkdsk命令。

通常当意外关闭了电源,或者电源异常中断而导致系统意外关闭,一般会造成数据丢失,严重的会破坏文件系统的完整性,这时就需要用fsck命令检查文件系统的一致性,同时修复被破坏的文件系统。
在运行fsck命令之前,一定要保证文件系统处于非挂起状态,也就是说只能在文件系统被卸载后才能使用fsck命令。使用fsck命令时,必须保证文件系统对应的逻辑卷能够访问。如果文件系统没有问题,是完整的,使用fsck命令时仅仅报告这个文件系统中的文件数,已使用的块数,以及空闲的块数。如果文件系统出现了问题,那么将报告相应的问题信息,同时提示是否进行修复。如果文件系统损坏严重,无法修复时,只能恢复该文件系统的备份。
 
fsck 命令的常用参数:
-f :要求执行一个快速的检查。
-n –y :用于回答fsck命令想用户提出的问题。-y 通常用于修复一个严重被破坏的文件系统,用-y 参数时,fsck命令也会删除一些严重被破坏的文件。
-p :不显示fsck命令检查的小问题的信息。
-v :指出被检查的文件系统的类型,默认jfs ,用那个后要检查jfs2 类型的文件系统,就要指定-v jfs2参数。
 
直接执行这个命令会检查/etc/filesystems文件中check=true的文件系统。通常新建的文件系统不执行默认的检查,因此,如果需要执行默认检查的话,需要在etc/filesystems文件中该文件系统小节添加check =true 选项。
 
fsck 与超级块( superblock) 的修复
1、  jfs 系统 :当执行mount命令挂载jfs文件系统,如果出现如下错误,则很有可能是由于超级块损坏所造成的。
# mount /testjfs
 mount: 0506-324 Cannot mount /dev/lv00 on /testjfs: A system call received a parameter that is not valid.
# fsck /testjfs --执行fsck命令进行修复时提示信息如下:
 Not a recognized filesystem type. (TERMINATED)
# od -x -N 100 /dev/lv00 0x1000 --查看超级块的内容,-x 标志显示十六进制格式的输出而 -N 标志指示系统只从偏移参数(+)格式化 64 个输入字节,这指定了文件中开始文件输出的点。
fsck命令功能与主超级块修复
 0x1000(3030 3130)处破坏的幻值。如果创建文件系统时接受了所有缺省值,则幻数应该为 (4321 8765)。如果覆盖了任何缺省值,则幻数应该为 (6587 2143)。对比当前幻数的第二个超级块( secondary superblock jfs secondary superblock 的地址固定为 block 31
fsck命令功能与主超级块修复
注意 0x1f000 处的正确幻值。下面将第二个超级块复制到主超级块。
# dd count=1 bs=4k skip=31 seek=1 if=/dev/lv00 of=/dev/lv00 --还原备份到主超级块。
# fsck /dev/lv00 –检查文件系统
fsck命令功能与主超级块修复
# mount /testjfs     --挂载文件系统成功。
 
2、  jfs2  系统:当执行mount命令挂载jfs2文件系统,如果出现如下错误,则很有可能是由于超级块损坏所造成的。
# mount /test    --/test是逻辑分区/dev/fslv02的挂载点,为jfs2文件系统。
mount: 0506-324 Cannot mount /dev/fslv02 on /test: The media is not formatted or the format is not correct.
 
JFS2 系统超级块有所不同,其默认偏移量为 32 ,可用 fsck 命令可自动备份超级块来修复主超级块。
# fsck /dev/fslv02 -- fsck 命令检查 /dev/fslv02 分区。
fsck命令功能与主超级块修复
由于主超级块(superblock)被破坏,可以从备份超级块中恢复数据,因此fsck命令提示是否要修复主超级块,修复过程中有可能会删除一些破损严重的文件。在这里输入y还原主超级块数据。
# mount /test --挂载/test .
 
   转载自: http://sm.xfy.cn/html/201117/87.html