Linux 上的 fsck(8) 联机帮助页包括以下退出代码表:
The exit code returned by fsck is the sum of the following conditions:
0 No errors
1 Filesystem errors corrected
2 System should be rebooted
4 Filesystem errors left uncorrected
8 Operational error
16 Usage or syntax error
32 Checking canceled by user request
128 Shared-library error
退出代码 2 已分配给“系统应该重新启动”,因此我们可以假设它有某种用途。但原则上fsck
可以在检查某种对系统操作根本不重要的外部拇指驱动器后返回此退出代码。像这样的非必要文件系统中的错误将需要重新启动,这似乎很荒谬,特别是如果文件系统仅被fsck
.
“系统应该重新启动”退出代码是什么意思实际上意思是?
答案1
这意味着在执行检查时安装了有问题的文件系统,fsck
必须实际修改磁盘上的数据才能修复错误,并且在不重新启动系统的情况下无法手动重新安装文件系统。
主要情况是在根文件系统上发现(并修复)错误时。除非您有一个非常奇特的 initramfs 或恢复环境来检查文件系统,否则您在检查时会运行根文件系统(因此它以只读方式安装)。
出于性能原因,内核不会重新验证已挂载文件系统的缓存元数据(因为除了fsck
已挂载文件系统的内核之外,什么也没有改变磁盘上的数据),因此如果fsck
必须修复其中一些元数据,它要么需要通知内核(在大多数 UNIX 系统上都不能),要么告诉用户卸载文件系统,然后再次安装它以使内核获取修改后的元数据。根文件系统实际上是重新启动系统本身。
答案2
这确实意味着应该重新启动系统。
fsck
实现通常会谨慎地仅在必要时才返回此代码:例如,e2fsck
如果在安装时更正了根文件系统上的错误,则返回它(通常以只读方式安装,直到经过检查)。您不应该将其放在外部驱动器上。
请注意,您应该检查正在使用的特定检查器的文档。例如,fsck.fat
不使用相同的退出代码,并且盲目地假设退出代码为 2 意味着重新启动可能会导致意外。