Linux基础命令---fsck fsck 检查或者修复指定的文件系统,可以是设备名、挂载点,还可以是一个ext2的label,或者是一个UUID。此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。 1、语法 fsck [选项] –t systype device fsck [-sAVRTMNP] [-C [fd]] [-t fstype] [filesys...] [--] [fs-specific-options] 2、选项列表 选项 说明 -s 检查的序列。如果有多个文件系统需要检查,那么按照顺序来操作。注意:e2fsck(8)默认以交互模式运行。要使e2fsck(8)在非交互式模式下运行,必须指定-p或-a选项,如果希望自动更正错误,则必须指定-n选项。 -t fslist 指定要检查的文件系统的类型。当指定-A标志时,只检查与fslist匹配的文件系统。fslist参数是以逗号分隔的文件系统和选项说明符列表。这个逗号分隔的列表中的所有文件系统都可能以否定操作符“no”或“!”作为前缀,该操作符要求只检查fslist中未列出的文件系统。如果fslist中的所有文件系统都不以否定操作符作为前缀,那么将只检查fslist中列出的文件系统。 选项说明符可能包含在逗号分隔的fslist中。它们必须具有“opts=s-option”的格式。如果存在选项说明符,那么只有在“/etc/fstat”的挂载选项字段中包含s-option的文件系统才会被检查。如果选项说明符以否定操作符为前缀,那么只有那些没有fs-option的文件系统才会被选中。在它们的挂载选项字段“/etc/ffstab中”将被检查。例如,如果“opts=ro”出现在fslist中,那么只会检查“/etc/fstab”中列出的带有ro选项的文件系统。 为了兼容Mandrake发行版,它的引导脚本依赖于对fsck程序的未经授权的ui更改,如果在fslist中找到了一个文件系统类型的循环,就会将它视为将opts=loop指定为-t选项的参数。 通常,文件系统类型是通过在“/etc/fstab”文件中搜索文件并使用相应的条目来推断的。如果无法推断该类型,并且只有一个文件系统作为-t选项的参数,fsck将使用指定的文件系统类型。如果该类型不可用,则使用默认的文件系统类型(当前Ext 2)。 -A 遍历“/etc/fstab”文件,并尝试在一次运行中检查所有文件系统。此选项通常来自“/etc/rc”系统初始化文件,而不是用于检查单个文件系统的多个命令。除非指定了-P选项(见下文),否则将首先检查根文件系统。之后,将按照“/etc/fstab”文件中fs_passno(第六个)字段指定的顺序签入文件系统。跳过fs_passno值为0的文件系统,将检查fs_passno值大于零的文件系统。如果有多个文件系统具有相同的通行号,fsck将尝试并行地检查它们,尽管它将避免在同一个物理磁盘上运行多个文件系统检查。 fsck不与任何其他设备并行检查堆叠设备。因此,在“/etc/fstab“文件中非常常见的配置是将根文件系统设置为fs_passno值为1,并将所有其他文件系统设置为fs_passno值为2。如果由于某种原因需要避免多个文件系统检查并行运行,则选择不使用此配置。例如,如果有问题的机器内存不足,因此过多的分页会引起关注。 fsck通常不会在调用文件系统的检查器之前检查设备是否实际存在。因此,如果文件系统特定的检查器返回致命错误,则不存在的设备可能导致系统在引导期间进入文件系统修复模式。“/etc/fstab”挂载选项不会失败,可以让fsck跳过不存在的设备。fsck还跳过具有特殊文件系统类型AUTO的不存在设备。 -C [fs] 显示检查的进度。显示支持这些文件系统检查程序的完成/进度条(目前只用于ext 2和ext 3)。Fsck将管理文件系统检查器,以便它们中一次只显示一个进度条。gui前端可以指定文件描述符fd,在这种情况下,进度条信息将发送到该文件描述符。 -M 不要检查已安装的文件系统,并返回安装文件系统的退出代码0。 -N 不执行检查操作,只是演示一下 -P 设置-A标志时,与其他文件系统并行检查根文件系统。这不是世界上最安全的事情,因为如果根文件系统怀疑e2fsck(8)可执行文件可能被破坏了!这个选项主要是为那些不希望将根文件系统重新划分为小型和紧凑(这是真正正确的解决方案)的系统管理员提供的。 -R 当使用-a标志检查所有文件系统时,跳过根文件系统 -T 启动时不要显示标题 -V 显示执行过程 fs-specific-options fsck不理解的选项被传递给特定于文件系统的检查器。这些参数不能使用参数,因为fsck无法正确猜测哪些参数可以选择选项,哪些参数不能。后面的选项和参数被视为要传递给文件系统特定检查器的文件系统特定选项。 请注意,fsck的设计并不是为了将任意复杂的选项传递给特定于文件系统的检查器。如果您正在做一些复杂的事情,请直接执行特定于文件系统的检查程序。如果您传递fsck一些非常复杂的选项和参数,并且它没有按照您的预期执行,那么就不要将它报告为bug。你几乎肯定在做一些不该用fsck做的事。 不同文件系统特定fsck的选项没有标准化。如果有疑问,请查阅文件系统特定检查器的手册页。虽然没有保证,但大多数文件系统检查程序都支持下列选项 -a 自动修复文件系统。请注意e2fsck(8)只支持向后兼容。此选项映射到e2fsck的-p选项,与某些文件系统检查器支持的-a选项不同,该选项是安全的。 -n 对于某些特定于文件系统的检查程序,-n选项将导致fs特定的fsck避免试图修复任何问题,但只需将此类问题报告给stdout。然而,并不是所有特定于文件系统的检查程序都是如此。特别是,如果给定该选项,fsck.reiserfs(8)将不会报告任何损坏。fsck.minix(8)根本不支持-n选项。 -r 以交互方式修复文件系统(请求确认)。注意:如果多个fsck并行运行,使用此选项通常是个坏主意。还请注意,这是e2fsck的默认行为;它仅出于向后兼容性的原因支持此选项。 -y 对于某些特定于文件系统的检查程序,-y选项将导致fs特定的fsck总是试图自动修复任何检测到的文件系统损坏。有时专家可能能够更好地手动驱动fsck。请注意,并非所有特定于文件系统的检查程序都实现了此选项。特别是fsck.minix(8)和fsck.lamfs(8)不支持-y选项。 3、说明 如果命令行上没有指定任何文件系统,并且没有指定-A选项,fsck将默认为串行地检查/etc/fstat中的文件系统。fsck指令可以有以下的返回值: 0,没有错误。 1,文件系统错误更正。 2,系统应该重启。 4,系统错误没有更正。 8,操作错误。 16,语法错误。 32,用户取消fsck。 128,共享库错误。 检查多个文件系统时返回的退出代码是所检查的每个文件系统的退出代码的逐位OR。 实际上,fsck只是linux下可用的各种文件系统检查器(fsck.fstype)的前端。文件系统特定的检查器首先在/sbin中搜索,然后在/etc/fs和/etc中搜索,最后在PATH环境变量中列出的目录中搜索。 4、环境变量 fsck的执行收到以下环境变量的影响: 1)FSCK_FORCE_ALL_PARALLEL,如果设置了此环境变量,fsck将尝试并行运行所有指定的文件系统,而不管文件系统是否位于同一设备上。(这对于RAID系统或高端存储系统(如IBM或EMC等公司销售的存储系统)非常有用。)请注意,fs_passno值仍被使用。 2)FSCK_MAX_INST,这个环境变量将限制一次运行的文件系统检查器的最大数量。这允许具有大量磁盘的配置避免fsck一次启动过多的文件系统检查器,这可能会使系统上可用的CPU和内存资源超载。为零,则可以生成无限数量的进程。这是当前的默认情况,但未来版本的fsck可能会尝试根据从操作系统收集会计数据自动确定可以运行多少个文件系统检查。 3)PATH,PATH环境变量用于查找文件系统检查器,首先搜索一组系统目录:/sbin、/sbin/fs.d、/sbin/fs、/etc/fs和/etc/fs,然后搜索路径环境中的一组目录。 4)FSTAB_FILE,这个环境变量允许系统管理员覆盖/etc/fstab文件的标准位置,对于正在测试fsck的开发人员也很有用。 5、实例 检查sdb4 [root@localhost ~]# fsck -t swap /dev/sdb4 fsck from util-linux-ng 2.17.2 e2fsck 1.41.12 (17-May-2010) /dev/sdb4 was not cleanly unmounted, 强制检查. Resize inode not valid. 重建?是 第一步: 检查inode,块,和大小 第二步: 检查目录结构 第3步: 检查目录连接性 Pass 4: Checking reference counts 第5步: 检查簇概要信息 Free 块s count wrong for 簇 #0 (7854, counted=7855). 处理? 是 Free 块s count wrong (15722, counted=15723). 处理? 是 /dev/sdb4: ***** 文件系统已修改***** /dev/sdb4: 11/4096 files (0.0% non-contiguous), 661/16384 blocks [root@localhost ~]# #num2 计算机难免会由于某些系统因素或人为误操作(突然断电)出现系统异常,这种情况下非常容易造成文件系统的崩溃,严重时甚至会造成硬件损坏。这也是我们一直在强调的“服务器一定要先关闭服务再进行重启”的原因所在。 那么,如果真出现了文件系统损坏的情况,有办法修复吗?可以的,对于一些小问题,使用 fsck 命令就可以很好地解决。 fsck 命令用于检查文件系统并尝试修复出现的错误。该命令的基本格式如下: [root@localhost ~]# fsck [选项] 分区设备文件名 表 1 罗列出了该命令常用的选项以及各自的功能。 表 1 fsck命令常用选项及其功能 选项 功能 -a 自动修复文件系统,没有任何提示信息。 -r 采取互动的修复模式,在修改文件前会进行询问,让用户得以确认并决定处理方式。 -A(大写) 按照 /etc/fstab 配置文件的内容,检查文件内罗列的全部文件系统。 -t 文件系统类型 指定要检查的文件系统类型。 -C(大写) 显示检查分区的进度条。 -f 强制检测,一般 fsck 命令如果没有发现分区有问题,则是不会检测的。如果强制检测,那么不管是否发现问题,都会检测。 -y 自动修复,和 -a 作用一致,不过有些文件系统只支持 -y。 此命令通常只有身为 root 用户且文件系统出现问题时才会使用,否则,在正常状况下使用 fsck 命令,很可能损坏系统。另外,如果你怀疑已经格式化成功的硬盘有问题,也可以使用此命令来进行检查。 使用 fsck 检查并修复文件系统是存在风险的,特别是当硬盘错误非常严重的时候,因此,当一个受损文件系统中包含了非常有价值的数据时,务必首先进行备份! 需要注意的是,在使用 fsck 命令修改某文件系统时,这个文件系统对应的磁盘分区一定要处于卸载状态,磁盘分区在挂载状态下进行修复是非常不安全的,数据可能会遭到破坏,也有可能会损坏磁盘。 这里,给大家举个例子,如果想要修复某个分区,则只需执行如下命令: [root@localhost ~]#fsck -r /dev/sdb1 #采用互动的修复模式 fsck 命令在执行时,如果发现存在没有文件系统依赖的文件或目录,就会提示用户是否把它们找回来,因为这些没有文件系统依赖的文件或目录对用户来说是看不到的,换句话说,用户根本无法使用,这通常是由文件系统内部结构损坏导致的。如果用户同意找回(输入 y),fsck 命令就会把这些孤立的文件或目录放到 lost+found 目录中,并用这些文件自己对应的 inode 号来命名,以便用户查找自己丢失的文件。 因此,当用户在利用 fsck 命令修复磁盘分区以后,如果发现分区中有文件丢失,就可以到对应的 lost+found 目录中去查找,但由于无法通过文件名称分辨各个文件,这里可以利用 file 命令查看文件系统类型,进而判断出哪个是我们需要的文件