在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命令对于已经挂载的分区运行具有高度的危险性,所以千万不能在正常登陆下运行这个命令。
ps:
还有一个重要的命令,可以以只读模式挂载/分区,这样运行fsck命令就非常之安全了。而对以只读模式挂载的分区运行fsck命令是安全的。
mount -no remount,ro /
-n
  一般而言,mount 在挂上后会在 /etc/mtab 中写入一笔资料。但在系统中没有可写入档案系统存在的情况下可以用这个选项取消这个动作。
-o 是挂载选项,remount重新挂载,ro只读挂载。
可以考虑预先做一个可执行文件放到在/分区可以找得到的地方,比如放在/root下,并命名为runfsck,然后进recovery mode执行这个文件,避免了手动输入命令的麻烦。
=====================
mount -no remount,ro /
umount -a
fsck -F
fsck -AfsC
=====================
其实命令中的fsck -F已经没有必要了。
ps:似乎对以只读模式挂载的分区,虽则安全,但也并不能修正文件系统的错误,恐怕并无意义。

Linux学习之fsck命令的更多相关文章

  1. Linux学习新篇——常用命令和快捷键总结

    最近刚接触Linux,整理了一些常用的命令和快捷键 Tab补全命令 当命令记不清了,输入记得的前几个用Tab就可以将该命令自动补全. 启动tomcat服务用$startup.sh 停止tomcat服务 ...

  2. Linux 学习 (七) 挂载命令 & 用户登陆查看

    Linux达人养成计划 I 学习笔记 挂载命令 mount:查询系统中已经挂载的设备 mount -a:根据配置文件 /etc/fstab 的内容,自动挂载 mount [-t 文件系统] [-o 特 ...

  3. Linux 学习 (四) 帮助命令

    Linux达人养成计划 I 学习笔记 man 命令 获取指定命令的帮助 man的级别 1:查看命令的帮助 2:查看可被内核调用的函数的帮助 3:查看函数和函数库的帮助 4:查看特殊文件的帮助(主要是/ ...

  4. linux学习笔记——基础命令

    最近看了一些老男孩linux运维视频,挺不错的,特此记录一下 linux组成 gun组件 shell等 linux内核 其他软件 linux主要内核: linux kernel2.2 linux ke ...

  5. linux 学习2 常用命令

    1.显示日期的指令: date 2.   [Tab]按键---具有『命令补全』不『档案补齐』的功能 3:  su和 sudo  su用于用户之间的切换.  su在不加任何参数,默认为切换到root用户 ...

  6. Linux学习之sudo命令

    在学习Linux用户管理时,我们不得不需要了解一个命令,那就是sudo.sudo的作用是切换身份,以其他身份来执行命令. 那么为什么在Linux系统中我们需要来切换身份呢?原因有以下几个方面 1.养成 ...

  7. Linux学习之三--scp命令

    scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的.可能会稍微影响一下速度.当你服务器 ...

  8. linux学习之——基础命令

    Linux体系基础命令: Linux是一个命令行组成的操作体系!精华在命令行,岂论图形界面成长到什么水平这个原理是不会变的,Linux命令有许多壮大的效用:从简单的磁盘操作.文件存取.到举办庞大的多媒 ...

  9. Linux学习之六-Yum命令的使用

    详细介绍一下yum命令的用法.如果你是一个Linux的初学者,一定会被软件的安装所困扰过,尽管RPM包解决了一定层度的问题,但有些RPM的包的依赖关系让人很是头疼.而YUM.APT等一些RPM包的管理 ...

随机推荐

  1. poj 3158kickdown

    我是来吐槽poj的!!! 第一次做poj,被题目中的输入输出格式打败了 ,醉了醉了 Description A research laboratory of a world-leading autom ...

  2. c++连接mysql数据库(使用mysql api方式,环境VS2013+MYSQL5.6)

    转载请注明出处,原文地址http://www.cnblogs.com/zenki-kong/p/4382657.html 刚开始写博客,博主还只是个大三汪,学艺不精,如有错误还请前辈指出(>^ω ...

  3. javascript 执行顺序详解

    JavaScript是一种描述 型脚本语言,它不同于java或C#等编译性语言,它不需要进行编译成中间语言,而是由浏览器进行动态地解析与执行.如果你不能理解javaScript 语言的运行机制,或者简 ...

  4. vimdiff: 使用Vim中强大的文件diff功能[转]

    学习了一段时间的Vim,直到最近才发现Vim的diff功能是如此方便,对比代码变化再也不用到处去找diff软件或者依靠版本控制的diff了.强大的Vim. 下图是我在macVim中的diff效果. 下 ...

  5. vi打开二进制文件

    vi -b filename <c7><cc>><0b><00><00><01><01><c2>& ...

  6. JS编码解码详解

    今天在整理 js编码解码方法时,在网上搜资料,发现一篇文章讲的不错,讲解的非常简单明了,于是乎就想转载过来,却发现无法转载到博客园,最后只能卑鄙的摘抄过来.js编码解码就是将一些对URL和数据库敏感的 ...

  7. 嵌入式设备web服务器

    操作系统:ubuntu10.04 前言:    为了提高对设备的易操作性,很多设备中提供pc机直接通过浏览器操作设备的功能.这就需要在设备中实现web服务器.    现在在嵌入式设备中所使用的web服 ...

  8. 精美的 ( Android, iPhone, iPad ) 手机界面设计素材和线框图设计工具

    在制作界面原型的时候,如果有现成的界面基础元素可以使用的话,设计师就可以非常快速的完成原型的制作,能够节省大量的时间和精力.在这篇文章, 我向大家分享45套非常有用的 UI 和 Wireframe 套 ...

  9. 怎样使用LaTeX输入葡萄牙语等语言中的特殊字符

    论文中引用了大名鼎鼎ER random graph model,但是这两位的名字不太好打,发现Google Scholar中直接下载的bib文件中也是错的.找了一会,发现转义字符已经定义得很好了.只是 ...

  10. linux下vi命令大全(转载)

    进入vi的命令 vi filename :打开或新建文件,并将光标置于第一行首 vi +n filename :打开文件,并将光标置于第n行首 vi + filename :打开文件,并将光标置于最后 ...