对 手把手教你安全运行fsck命令 进行排版
日常使用
在 Windows 下,磁盘的文件系统出错,需要运行chkdsk命令进行修复。而在 Linux 下,则需要运行
fsck
命令。由于 Linux 对于文件系统的错误非常敏感,由于意外断电或者其它原因导致 Linux 系统意外关机或者重启,都可能对 Linux 的文件系统造成严重的损坏,从而导致不能正常地进入系统。这也使得fsck
变成一个不可或缺的命令。
⭐ 然而这个fsck
命令却有一个致命的软肋,就是对于已经挂载了的分区运行具有极大的危险性,远不如 Windows 下的chkdsk
命令的安全。
- 本文以 Ubuntu 系统为例进行讲述。
由于 fsck
命令的这个致命的软肋,所以运行这个命令的最好方式是用 LiveCD 方式启动 Ubuntu,进入桌面后,首先确认要运行命令的分区是否挂载。
- 比如要对第一硬盘第一分区进行运行,首先可以用
umount
命令进行卸载:
sudo umount /dev/sda1
一般情形下,都是没有挂载的。运行这个 umount 命令只是为了确认一下,或者说是为了以怕万一而已。
2. 确认没有挂载后,需要确认这个分区的文件系统是什么,这个可以用命令:
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 分区。
- 在 Ubuntu 9.04 的 Recovery mode 中有一个 fsck 选项。在这个选项中,系统设定了运行
fsck
命令的一些安全参数。选择这个选项后,系统将自动运行fsck
命令。从我的经验来看,这种方式的检测还是很安全的。不知什么缘故,官方在 Ubuntu 9.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
参数解释 |
---|
-f 参数的作用前面说了。 |
-A 依照 /etc/fstab 配置文件的内容,检查文件内所列的全部文件系统。 |
-s 参数的作用是分别检测。分别检测是与并行检测相对的。所谓并行检测,就是同时检测 /etc/fstab 中设定的多个分区。 |
由于 /
分区没有卸载掉,所以在这里我们不能用 -c
参数。因为对于没有卸载掉的分区运行 -c
参数,危险性更为加大。但是,我们可以加参数 -R
,略过 /
分区不检测。
fsck -AfscR
- 还有一个参数是
-C
,这个参数可以在运行时显示进度条,这样命令运行起来时更好看些吧。比如:
fsck -ARCfsc
最后特别强调一下,由于 fsck
命令对于已经挂载的分区运行具有高度的危险性,所以千万不能在正常登陆下运行这个命令。
- 还有一个重要的命令,可以以只读模式挂载/分区,这样运行
fsck
命令就非常之安全了。而对以只读模式挂载的分区运行fsck
命令是安全的。
mount -no remount,ro /
参数解释 |
---|
-o 是挂载选项,remount 重新挂载,ro 只读挂载。 |
-n 一般而言,mount 在挂上后会在 /etc/mtab 中写入一笔资料。但在系统中没有可写入档案系统存在的情况下可以用这个选项取消这个动作。 |
可以考虑预先做一个可执行文件放到在 /
分区可以找得到的地方,比如放在 /root
下,并命名为 runfsck
,然后进 Recovery mode 执行这个文件,避免了手动输入命令的麻烦。
mount -no remount,ro /
umount -a
fsck -F
fsck -AfsC
其实命令中的 fsck -F
已经没有必要了。
似乎对以只读模式挂载的分区,虽则安全,但也并不能修正文件系统的错误,恐怕并无意义。