首页 > > > Linux命令学习手册-fsck
`fsck [-aANPrRsTV][-t <文件系统类型>][文件系统...]`
# 功能
检查文件系统并尝试修复错误。
补充说明:当文件系统发生错误四化,可用 `fsck` 指令尝试加以修复。
# 举例
- 检查 `msdos` 档案系统的 `/dev/hda5` 是否正常,如果有异常便自动修复:
$fsck -t msdos -a /dev/hda5
此指令可与 `/etc/fstab` 相互参考操作来加以了解。
- 检查所有的缺省文件系统:
$fsck
这个命令检查在 `/etc/filesystems` 文件中所有标记 `check=true` 的文件系统。 `fsck` 命令这种形式在对文件系统做出任何更改之前会向您请求许可。
- 利用缺省的文件系统自动修复较次要的问题:
$fsck -p
- 检查一个特定的文件系统:
$fsck /dev/hd1
这个命令检查位于 `/dev/hd1` 设备上的未安装的文件系统。
# 描述
## 参数
`-a` 自动修复文件系统,不询问任何问题。
`-A` 依照 `/etc/fstab` 配置文件的内容,检查文件内所列的全部文件系统。
`-N` 不执行指令,仅列出实际执行会进行的动作。
`-P` 当搭配 `-A` 参数使用时,则会同时检查所有的文件系统。
`-r` 采用互动模式,在执行修复时询问问题,让用户得以确认并决定处理方式。
`-R` 当搭配 `-A` 参数使用时,则会略过 `/` 目录的文件系统不予检查。
`-s` 依序执行检查作业,而非同时执行。
`-t <文件系统类型>` 指定要检查的文件系统类型。
`-T` 执行 `fsck` 指令时,不显示标题信息。
`-V` 显示指令执行过程。
`-o` `f` 对系统进行强制检查,不论系统是否在 `clean` 等状态
`-o p` 非交互式检查并修复文件系统,对有的问题则立即退出
`-o b=xx` 用来修复超级块的错误,就是将备份的超级块内容拷入超级块中。solaris对超级块很重视,它的备份有很多,一般的 `b=32` 就可以了,如果不行可以使用命令 `newfs -N /dev/rdsk/cxtxdxsx` 来查看超级块的位置,其中任何一个备份块都可使用.
## 详细参数
`-d BlockNumber` 搜索指定磁盘块的参考。无论 `fsck` 命令遇到包含特定块的文件,它将会显示索引节点号和所有指向它的路径名称。对于 `JFS2` 文件系统,引用指定模块的索引节点号将会被显示,但是不是它们的路径名称。
`-f` 进行快速检查。在正常情况下,通过非正确方式关闭系统来停机仅有的文件系统很可能被影响,这个文件系统就是当系统停止时在安装的那些。 `-f` 标志会提示 `fsck` 命令不要检查没有成功安装的文件系统。=fsck= 命令通过检查文件系统超级块中的 `s_fmod` 标志来决定这件事。 当文件系统没有成功安装的时候,无论何时文件系统被安装和被清除,这个标志都将被设定。如果文件系统被成功的卸载,这不大可能会存在什么问题。因为多数文件系统没有成功安装,不检查这些文件系统能减少检查时间。
`-i i-NodeNumber` 搜索指定索引节点的参考。无论何时 `fsck` 命令遇到一个指向指定索引节点的目录,它都会显示这个参考的完整路径名称。
`-n` 对 `fsck` 命令所提出的所有问题给出一个 `no` 的回应;不打开指定的文件系统来写。
`-o` 选项 向 `fsck` 命令传递逗号分隔的选项。这些选项被认为是文件系统的实现细节,除了下面目前为了所有文件系统而当前被支持的选项:
- `mountable`
如果有问题的文件系统可安装(清除),促使 `fsck` 命令成功的退出,返回一个 `0` 值。如果文件系统不可安装, `fsck` 命令退出并返回一个值 `8` 。
- `mytype`
如果存在问题的文件系统与在 `/etc/filesystems` 文件中或者在命令行中通过 `-V` 标志指定的具有相同的类型,那么促使 `fsck` 命令退出并给出一个成功的 `0` 值。否则,返回一个值 `8` 。例如,如果 `/` (引导文件系统)是一个分类文件系统,那么 `fsck` 命令 `-o mytype -V jfs /` 会退出给出一个 `0` 值。
`-p` 不显示次要问题的消息但是自动修复问题。这个标志并不是象 `-y` 标志那样授予大规模许可,当系统正常启动的时候对自动进行检查工作有用。无论系统在何时自动运行,您应该将这个标志作为系统启动过程的一部分来使用。也允许并行分组检查。如果主要的超级块损坏了,次要的超级块就被验证,并且复制到主要的高级块中。
`-t文件` 如果 `fsck` 命令得不到足够的内存来保存它的表的话,在文件系统中作为一个临时文件而不是被检查的文件来指定File参数。如果没有指定 `-t` 标志,那么 `fsck` 命令需要一个临时文件,它会提示您给这个临时文件起名字。但是,如果指定了 `-p` 标志, `fsck` 命令是不成功的。如果临时文件不是一个特定的文件,当 `fsck` 命令结束的时候,它就会被删除。
`-V VfsName` 使用为文件系统由VFSName变量指定的虚拟文件系统的描述,而不是用 `/etc/filesystems` 文件决定描述。如果 `-V VfsName` 标志没有在命令行中指定,就会检查 `/etc/filesystems` 文件并且 `vfs=` 匹配节的特性被认为是正确的文件系统类型。
`-y` 对所有 `fsck` 命令提出的所有问题假定一个 `yes` 的响应。这个标志使 `fsck` 命令采取它认为必要的行动。仅在损坏严重的文件系统中使用这个标志。
## 一些原理
大多数系统设置为启动时自动运行 `fsck` ,因此任何错误将在系统使用前被检测到(并根据希望修正)。自动检查只对启动时自动 `mount` 的文件系统发生作用,使用 `fsck` 手工检查其他文件系统,比如软盘。使用有错误的文件系统可能使问题变得更坏。如果系统正常关闭,几乎从不发生错误,因此有一些方法可以不进行检查。如果文件 `/etc/fastboot` 存在,就不检查。另外,如果 `ext2` 文件系统在超级块中有一个特定的标记告知该文件系统在上次 `mount` 后没有正常 `unmount` . 如果标记指出 `unmount` 正常完成(假设正常 `unmount` 指出没问题), `e2fsck` ( `fsck` 的 `ext2` 文件系统版) 就不检查系统。 `/etc/fastboot` 是否影响系统依赖于你的启动手稿,但 `ext2` 标记则在你使用 `e2fsck` 时发生作用–基于一个 `e2fsck` 选项(参阅 `e2fsck` 手册页)
运行 `fsck` 后,该命令会分6个阶段对文件系统进行检查,这六个阶段分别是:
1. 阶段1: 检查块和块的大小
2. 阶段2: 检查路径名
3. 阶段3: 检查连接性
4. 阶段4: 检查参考记数
5. 阶段5: 检查自由块列表
6. 阶段6: 补救自由块列表
对每个阶段进行检查,常见的一些错误:
1. 移去一个没有相关文件的目录入口
这时用户可以回答 `Yes` 或 `Y` 来删除该目录入口。
2. 重连接一个已分配但不能访问的文件
`fsck` 找到了一个已分配的I节点,但却不可访问(该节点没与任何目录连接),这时一般对 `fsck` 的"RECONNECT?"回答 `Yes` ,即把该I节点连接到 `lost+found` 目录下,文件名即是I节点号,之后管理员应检查该文件类型,判明该文件用途,再将该文件拷贝到相应目录下。
3. 连接数调整ADJUST
在交互方式下, `fsck` 若发现连接数(与原记录)不一致,将询问用户采取何种行动,本例发现一目录的I节点连接数与该目录的真实连接数不一致。
这时用户应该回答 `Yes` 或 `Y` 来改正连接数。
4. 自由块表不一致
`fsck` 查出未分配块数与超级块中所给出的自由块表不一致。
这时用户应该回答 `Yes` 或 `Y` 来修正超级块。
从上面的出错信息和处理方法可以发现,对于 `fsck` 询问的问题大多数情况下都可以用 `Yes` 来回答,所以在实际应用时,可以用 `-y` 选项来执行该命令对硬盘进行检查和修复。
这里:
- RECONNECT
表示目录丢失,可将其存入 `lost+found` 中再作转移。回答 `yes`
- SUPERBLK坏(注意是坏,不是wrong)
修复见上面(如果是wrong就随便了,修不修都可以)
- CLEAR
删i节点,可能会错
- REMOVE
删文件,一般给出文件名。 file=….
- ADJUST
调整连接数。实际数与原记录不符。回答 `yes`
使用一般都是 `yes` 过去的,不能在正在 `mount` 的文件系统上操作,否则有可能导致文件系统损坏。但也没有碰到过用 `fsck` 导致发生错误的情况,不过还是建议操作的时候规范一些。
对于一个已经安装好了的文件系统, `fsck` 命令不会做出矫正。
`fsck` 命令出于某些原因可以在一个已经安装好了的文件系统中运行,但不是进行修复。但是当文件系统安装完毕之后,也许会返回不准确的错误消息。
`fsck` 命令检查并以交互方式修复不连贯的文件系统。在安装文件系统之前,应该运行这个命令。您必须能够读设备文件,在这个设备上驻留着文件系统(例如 `/dev/sda1` )安装一个不连贯的文件系统也许会导致系统的崩溃。
# 其它
(有待实践)
## 运行 `fsck` 命令后产生的文件有什么用?
当执行 `fsck` 命令时, `fsck` 命令如果发现存在孤立的文件或目录,这些孤立的文件或目录对于系统管理员或用户来说,无法访问到它,因为它与它的上级目录失去了关联,如果用户允许 `fsck` 重新把它们找回来的话, `fsck` 命令就会把这些孤立的文件或目录放在文件系统的 `/lost+found` 目录下,并用各自的 `i-node` 号来命名,以便用户查找自己需要的文件。 `Lost+found` 目录通过它的英文含义我们都可以知道,它是一个失物认领处。
因此当某个用户发现自己丢失了某个文件,可以在执行 `fsck` 之后到 `/lost+found` 目录下去查找,这时通过文件名已无法辨认出文件的作用,只能用 `file` 之类的命令来确定文件的类型,如果是数据文件,可以用 `more` 或 `vi` 命令来查看,如果是二进制文件,可以用 `dbx` 命令来调试或者试着执行它(注意它可能是一个具有破坏性的程序),知道文件或目录的作用之后,可以对其进行改名。
如果用户不允许 `fsck` 把这些孤立的文件或目录找回来,那么 `fsck` 命令就会破坏这些文件或目录,彻底丢失这些文件或目录,用户或系统管理员永远也无法找回它们。
## 关于 `fsck` 得结果输出:
当系统启动的时候会使用 `fsck` 对文件系统进行扫描,并相应的报出扫描结果。
例如: `dev/rdsk/c0t0d0s7 stable` 等。
后面是Fs的状态。其中,
`clean` 表示文件系统 `umount` 后无人用,
`stable` 表示文件系统用过,但却是完整的,好的。
而出一大堆的话,还有什么 fragment % 什么的的那都表示文件系统上有乱的地方,那么就应该进入系统后使用 `fsck` 来整理。
当系统的状态是 `clean` , `stable` 和 `logging` 的状态的时候 `fsck` 不运行。
在非法关机后(各种原因),再次启动的时候会有很多的情况,上面说的是一种情况,再厉害一些是系统只能进入但用户状态,最厉害的是连单用户的状态都无法进入(肯定是 `/` 和 `/usr` 区有问题。这是因为 `fsck` 对 `/` 区的扫描无法通过的话,系统当然无法启动,而 `fsck` 调用的一些函数库又在 `/usr` 上。。。。)
此外,在一个已经安装好了的文件系统上运行的 `fsck` 命令产生不可靠的结果。
## 文件
`/usr/sbin/fsck` 包含 `fsck` 命令。
`/etc/filesystems` 列出已知的文件系统并且定义它们的特征。
`/var/spool/mail/*` 包含虚拟文件系统类型的描述。
`/usr/bin/from` 包含当系统启动的时候运行的命令(包括 `fsck` 命令)。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9525959/viewspace-3169273/ ,如需转载,请注明出处,否则将追究法律责任。