手把手教你安全运行fsck命令
更新时间:2010.10.15
在windows下,磁盘的文件系统出错,需要运行chkdsk命令进行修复。而在linux下,则需要运行fsck命令。由于linux对于文件系统的错误非常敏感,由于意外断电或者其它原因导致linux系统意外关机或者重启,都可能对linux的文件系统造成严重的损坏,从而导致不能正常地进入系统。这也使得fsck变成一个不可或缺的命令。然而这个fsck命令却有一个致命的软肋,就是对于已经挂载了的分区运行具有极大的危险性,远不如windows下的chkdsk命令的安全。
本文以ubuntu系统为例进行讲述。
由于fsck命令的这个致命的软肋,所以运行这个命令的最好方式是用livecd方式启动ubuntu,进入桌面后,首先确认要运行命令的分区是否挂载。比如要对第一硬盘第一分区进行运行,首先可以用umount命令进行卸载:
sudo umount /dev/sda1
一般情形下,都是没有挂载的。运行这个umount命令只是为了确认一下,或者说是为了以怕万一而已。
确认没有挂载后,需要确认这个分区的文件系统是什么,这个可以用命令:
sudo fdisk -l
以查看这个分区的文件系统是什么。文件系统千万不能错了。这里以ext4文件系统为例进行讲述。这个命令不止是确认分区的文件系统是什么,同时也是确认这个分区是如何写法的。sata硬盘的写法是sda,而ide硬盘的写法是hda。
确认没有挂载和文件系统是什么后,输入下面的命令:
fsck -t ext4 /dev/sda1
-t参数是指明文件系统是什么。/dev/sda1则是指定分区。
这个命令还有另外一种输入法,这就是:
fsck.ext4 /dev/sda1
其实就是fsck -t ext4这个命令就是在调用fsck.ext4这个命令。
fsck默认只对有错误的档案进行检测,但是,我们可以加一个参数-f,让fsck对于没有错的档案也强行检测。这样大约可以修复一些分区的轻微的错误吧。
fsck.ext4 -f /dev/sda1
fsck还有检测硬盘坏道的功能,参数是-c
fsck.ext4 -fc /dev/sda1
检测坏道是很慢的。一般是不需要运行这个命令的。但有必要了解一下吧。
上面是以/dec/sda1分区为例进行讲述,对于其它的分区的运行,举一反三就是了。
如果没有livecd怎么办呢?可以用硬盘启动映象文件的办法启动ubuntu.只要你懂硬盘安装ubuntu的办法,你也就会知道这种启动的办法,具体启动的办法就不赘述了。
但有一个要点,对于映象文件所在的分区不可检测。这里的原因当然是因为这个分区是被挂载了的。即便用:sudo umount -l /isodevice命令卸载掉了这个分区,也仍是不宜检测为好。
另外,fsck命令只能检测linux分区,对于windows分区就不可以用这个命令进行检测了。
所以我一般的办法是把ubuntu映象文件放在windows分区。这样可以无障碍地检测全部linux分区。
在ubuntu9.04的recovery mode中有一个fsck选项。在这个选项中,系统设定了运行fsck命令的一些安全参数。选择这个选项后,系统将自动运行fsck命令。从我的经验来看,这种方式的检测还是很安全的。不知什么缘故,官方在ubuntu9.10中,把这个选项去掉了。但是,我们仍然可以在recovery mode中,手动运行fsck命令。
进入recovery mode后,先以root用户登陆文本界面。
首先运行命令:
fsck -F
请注意,这个参数是大写F,而不是小写f,如果你写错,麻烦可就大了。我也就曾经误写过,后果是很严重的。好在我很熟知这方面的知识,没有造成实质的损失。
这个命令的作用是清除掉内存中的磁盘缓存。所以这个命令毋须指定分区对象。根据我的经验,使用这个参数的一个要点是不要同时使用其它的参数。就单独运行一下这个参数。
找到的资料对于这个参数的说明是:
-F: 在检查前将硬盘的 buffer cache 清空,避免发生错误。
根据我的经验,用这个参数是很安全的,确实可以极有效地防止fsck出错。我曾经在虚拟机做过试验。在正常登陆状态下,先用这个命令清除掉内存中的硬盘缓存,然后运行命令:fsck -AfsC
重启电脑后,居然成功地进入了桌面。而不用先用这个命令,直接用fsck -AfsC命令,结果重启进不了桌面。效果对照是很明显的。
然后运行命令:
sudo umount -a
这个命令是把/etc/fstab文件中设定的分区,能卸载掉的都卸载掉。一般来说,除了/分区,其它的都能卸载掉的。卸载掉分区后再运行fsck命令,安全系统就大大地增加了。
然后输入命令:
fsck -Afs
-A 依照/etc/fstab配置文件的内容,检查文件内所列的全部文件系统。
-f参数的作用前面说了。
-s参数的作用是分别检测。分别检测是与并行检测相对的。所谓并行检测,就是同时检测/etc/fstab中设定的多个分区。
由于/分区没有卸载掉,所以在这里我们不能用-c参数。因为对于没有卸载掉的分区运行-c参数,危险性更为加大。但是,我们可以加参数-R,略过/分区不检测。
fsck -AfscR
还有一个参数是-C,这个参数可以在运行时显示进度条,这样命令运行起来时更好看些吧。比如:
fsck -ARCfsc
最后特别强调一下,由于fsck命令对于已经挂载的分区运行具有高度的危险性,所以千万不能在正常登陆下运行这个命令。