当文件系统出现损坏时,例如文件无法查看,删除等,可以使用 fsck(File System Consistency Check)进行修复。但是需要注意fsck在修复时,如果检查出某个文件有问题,可能会向用户请求删除。所以,建议其他方法都尝试后(例如将分区卸载后重新挂载)再使用fsck进行修复。
目录
- 1. fsck基本用法
- 2. fsck的参数解释
- -? 或 --help:显示帮助信息
- --version:显示版本信息
- -A:检查所有文件系统
- -C:显示进度条
- -f:强制检查没有问题的磁盘
- -l (小写L) :锁定设备以确保独占访问
- -M:不检查已挂臷的文件系统
- -N:不执行,只显示将要执行的操作
- -n:交互式检查中对所有询问都回答“no”
- -y:交互式检查中对所有询问都回答“yes”
- -p 或 -a:自动修复文件系统,不进行提示
- -P:并行检查文件系统,包括根文件系统
- -R:跳过根文件系统;只在指定 '-A' 时有用
- -T:启动时不显示标题
- -t <fslist>:指定要检查的文件系统类型
- -V:显示更详细的输出信息
- -r [fd]:在最后输出统计信息
1. fsck基本用法
语法:
fsck [-lsAVRTMNP] [-r [fd]] [-C [fd]] [-t fstype] [filesystem...] [--] [fs-specific-options]
2. fsck的参数解释
-? 或 --help:显示帮助信息
--version:显示版本信息
-A:检查所有文件系统
(1) 遍历/etc/fstab文件,并尝试在一次运行中检查所有文件系统,这个大写的A代表ALL的意思。
(2) 检查顺序按照/etc/fstab第六个参数<pass>,从小到大依次执行(pass值为0的文件系统将会跳过检查)。如果有多个文件系统有相同的pass号,并且它们不在同一个磁盘,fsck将尝试并行检查它们。但是,如果设置了环境变量FSCK_FORCE_ALL_PARALLEL,那么fsck会强制并行处理相同pass号的文件系统,无论它们是否在同一个磁盘上。
(3) 根文件系统( 挂载点一定是 / )是系统引导过程的基础,因此其在/etc/fstab文件中pass值设置为1,从而作为最优先检查的文件系统,而其他文件系统的pass值则为1以后的数字。
(4) 手册上说这个选项会在/etc/rc初始化文件系统的时候一次性检查/etc/fstab中的所有文件系统,但是我没有在/etc/rc中找到相关的命令。
-C:显示进度条
显示每一步的执行进度条 ( 目前仅针对ext[234] ) 。
-f:强制检查没有问题的磁盘
fsck检查后会有记录,所以再次马上检查磁盘时,会直接报告上次检查结果。如果想再让fsck进行磁盘检查,此时可以使用这个选项进行强制检查。
-l (小写L) :锁定设备以确保独占访问
锁定设备以确保在检查期间没有其他程序会尝试使用该分区。
-M:不检查已挂臷的文件系统
如果检查的文件系统已经挂载,则返回错误代码0。
-N:不执行,只显示将要执行的操作
打印出更具体的fsck命令内容,而不执行。比如下面fsck命令,其实真正调用的是fsck.ext4。
-n:交互式检查中对所有询问都回答“no”
检查的时候发现问题,只报告错误,而不做处理。下图红框的no是自动输入跳过的。
-y:交互式检查中对所有询问都回答“yes”
和-n
选项正好相反。
-p 或 -a:自动修复文件系统,不进行提示
遇到错误自动执行修复,不会询问用户。
-P:并行检查文件系统,包括根文件系统
搭配 -A 选项时,根文件系统将与其他文件系统并行检查。
-R:跳过根文件系统;只在指定 ‘-A’ 时有用
上面提到指定 -A 选项后会检查fstab中所有的文件系统,如果再加入 -R 则可以跳过根文件系统的检查。
-T:启动时不显示标题
加入 -T 后,则下面的红框内容不显示。
-t :指定要检查的文件系统类型
(1) 只检查fslist类型的文件系统,所以在指定 -A 时,只检查与fslist匹配的文件系统。
(2) fslist可以是以英文逗号分隔的列表,从而指定多个文件系统类型。fslist列表中的所有类型都可以使用否定运算符’no’或’!'作为前缀,从而只检查fslist中未列出类型的文件系统。
(3) fslist也可以指定文件系统的选项(参看/etc/fstab中第四列选项<options>),从而检查匹配这些选项的文件系统,例如:fsck -t opts=ro
。同样的,fslist列表中的所有选项也可以使用否定运算符’no’或’!'作为前缀,从而只检查fslist中未列出选项的文件系统。
(4) 在fsck的说明文档中,有提到 “ 如果在 fslist 中发现 loop 类型,则将其视为 opts=loop 选项进行处理”,这个了解一下就好。
(5) 使用 fsck 指定单个分区时,如果没有指定 -t 选项,则会自动在/etc/fstab中找寻该文件系统对应的类型。若没有找到,则使用默认的文件系统类型(此版man手册中说明是ext2类型)。
-V:显示更详细的输出信息
显示更详细的输出信息,包括上面 -N 能输出的内容。
-r [fd]:在最后输出统计信息
status: fsck运行完后返回的错误码
rss: 最大运行集大小(KB)
real: 经过的所有时钟时间
user: fsck运行所使用的用户时间
sys: 系统CPU时间
可以看到-r选项还可以后接文件描述符fd,man fsck
对其解释如下:
GUI front-ends may specify a file descriptor fd, in which case the progress bar information will be sent to that
file descriptor in a machine parsable format. For example:
/dev/sda1 0 92828 4.002804 2.677592 0.86186