it-swarm.cn

为什么不能fsck挂载的分区?

众所周知,您永远不要对已挂载的分区执行fck操作。我可以理解,如果文件系统是由fsck 写入生成的,那么这很容易导致损坏(例如,使用了-a选项),但是为什么不能在挂载的磁盘上运行只读检查?

43
mike

从:

http://linux.die.net/man/8/fsck.ext

“请注意,通常在已挂载的文件系统上运行e2fsck是不安全的。唯一的例外是如果指定了-n选项,而未指定-c-l-L选项。但是,即使这样做是安全的,如果已挂载文件系统,则e2fsck打印的结果无效。如果e2fsck询问您是否应检查已挂载的文件系统,则唯一正确的答案是“否”。只有真正知道自己在做什么的专家才应该这样做。考虑以任何其他方式回答这个问题。”

28
MathewC

基本问题是文件系统检查器(通常)不属于文件系统。相反,它是一个单独的程序,与内核中的文件系统代码读写相同的磁盘。结果,如果在活动文件系统上运行fsck,则您有两个不同的实体正在读取(并可能修改)相同的数据(磁盘),但它们之间没有任何协调关系。正如其他人指出的那样,结果是大多数检查人员期望其他人在运行时不会更改文件系统元数据。如果内核文件系统更改了检查程序不希望的内容,它们将变得混乱和/或报告虚假错误。

有一些带有检查器的文件系统被明确设计为“在线”运行(即在文件系统处于活动状态时)。较新版本的FFS/UFS通过对文件系统的最新快照(只读,时间点,写时复制副本)运行fsck来实现此目的。如果发现问题,例如分配位图中的不一致,它将通过系统调用而不是通过写入原始磁盘来纠正它们。这样可以使其与活动文件系统协调。

NetApp的WAFL还具有一个在线检查工具。可能还有其他人。

31
Keith Smith

即使在fsck处于只读模式下,在以挂载方式安装的分区上运行fsck也很愚蠢。文件系统将在fsck下更改,并且fsck从文件系统缓存的内存中数据将变为无效(因此fsck将出现不一致)。您可以在只读模式下的只读挂载文件系统上运行fsck并获得有效结果。如果fsck在其运行过程中对文件系统进行了更改,则在只读安装的文件系统上以读/写模式运行fsck会导致内核看到其下的文件系统结构意外更改。那也将是不好的。

11
Evan Anderson

除了可能会杀死您的I/O吞吐量外,如果在fsck时修改文件系统,则fsck无法跟踪更改并报告不一致性。

一些文件系统(例如XFS)使您可以在以读写方式安装文件系统时执行一致性检查,但要注意的是,很可能会报告虚假错误。 xfs_check建议在执行检查之前将文件系统卸载或以只读方式装载。

9
Kamil Kisiel

好吧,fsck的要点是报告文件系统不一致的情况,即出现了不变量。

但是,这些检查中有许多涉及不止一个FS结构。如果有人正在修改FS(写入数据),则这些结构可能暂时不同步)。即使这并不是真正的问题,fsck也会将其视为不一致。fsck无法判断不一致只是暂时的还是需要修复的永久性问题。因此,这可能行不通(除非FS是专门为允许联机检查而设计的。有些可以,但是ext3不允许)。

6
sleske

好吧,可以。 fsck -n/dev/sda1至少在ext3上会做到这一点。我刚测试过:)

3
Sven