跑步时
e2fsck -cck /dev/mapper/xxx
系统提示我
has 487 multiply-claimed block(s), shared with 84 file(s):
... (inode #221446306, mod time Tue Feb 20 19:48:38 2018)
... (inode #221446305, mod time Tue Feb 20 19:48:32 2018)
... (inode #221446304, mod time Tue Feb 20 19:48:38 2018)
... (inode #221446303, mod time Tue Feb 20 19:48:12 2018)
... (inode #221446302, mod time Tue Feb 20 19:59:04 2018)
... (inode #221446300, mod time Tue Feb 20 19:47:52 2018)
Clone multiply-claimed blocks<y>?
继续说“是”可能会产生什么后果?数据会完全丢失吗?如果继续“不”,结果会怎样?
答案1
多重声明的块是被多个文件使用的块,而它们不应该被使用。这样做的后果之一是,对受影响块之一中的这些文件之一的更改也会显示为对共享块的文件的更改,这不是您想要的。 (硬链接是一种不同的情况,这里没有显示。)
如果这里有数据丢失,已经发生了,并且它不会轻易被逆转;但情况可能会变得更糟......
如果您对这个问题回答“否” fsck
,文件系统将保持不一致状态。如果您回答“是”,fsck
则将复制共享块,以便将它们重新分配到单个文件中 - 这里涉及 84 个文件,每个块将被复制 83 次。这将避免将来的数据丢失,因为正如您所期望的那样,对文件的更改将仅限于每个单独的文件。然而克隆块可能涉及覆盖其他块中的数据,这些数据当前似乎未使用,但可能包含您想要保留的数据。
因此,传统的数据恢复建议适用:如果您认为需要从文件系统恢复数据,请不要碰它;将其复制到另一个磁盘上并对其进行恢复数据。此处可能需要的场景如下。文件 A 和 B 曾经是分开的,但在某处发生损坏后,文件 B 现在与文件 A 共享块。如果没有任何内容覆盖文件 B 的旧块,则数据仍然存在,但不再可访问。只要没有任何内容覆盖这些块,它们就可以恢复(也许需要付出相当大的努力)。但一旦它们被覆盖,它们就消失了;在这里,从文件 A 克隆共享块可能会覆盖旧数据......
总之,如果您有备份,或者您知道可以轻松恢复数据,请回答“是”。否则,停止fsck
,将文件系统复制到其他地方,如果需要系统备份并运行,请fsck
再次运行并回答“是”(并从副本中恢复数据)。如果数据很重要并且需要恢复,请将文件系统复制到其他地方,但不要管原始文件系统 - 如果您需要系统备份并运行,请制作另一个副本并在运行系统后运行该系统fsck
。