如何仅将好的文件从一个目录复制到另一个目录?

如何仅将好的文件从一个目录复制到另一个目录?

我的文件系统已损坏。我想复制“幸存者”,剩下的好文件。所以我的问题是——如何仅将好的文件从一个目录复制到另一个目录。

请注意,例如一个文件可以是 10GB,并且可以复制 5GB。因此,如果负责复制的工具立即使用目标目录来存储复制的内容,那么一旦明确不可能复制整个文件(因为它不可读),它就应该立即删除此类部分文件。

好文件-- 可以从头到尾读取且没有任何 I/O 错误的文件。

重要的:它应该自动完成,即无需用户交互(通过用户交互我已经在使用 Midnight Commander)。

更新:出于实际原因,需要指定读取文件的最大尝试次数,否则该工具很容易陷入无限循环,只是一遍又一遍地尝试读取文件。例如,如果给定的文件块无法读取(由于 I/O 错误)并且进行了 X 次尝试——假设该文件不好。

答案1

有一个名为ddrescueor 的实用程序dd_rescue。这是两个不同的实用程序,它们使用不同的方法来完成同一件事。它们将数据从 A 复制到 B,但是与 cp 不同,它们不会失败,而是重复尝试多次,如果无法读取数据则跳过。
这些实用程序不支持文件系统,但您可以手动或使用find.
但是,如果可能的话,我建议将dd_rescue整个损坏的驱动器复制到某个安全位置的单个映像文件中,然后挂载该映像并以通常的方式从那里复制文件。图像将是可读的,不会出现错误。
首先使用 dd_recue。

答案2

最简单的方法应该是在损坏的文件系统上运行fsck -afsck -y(如果是根文件系统,请使用 Live CD 启动并将其安装为外部卷)。所有可恢复的文件最终都会位于其原始位置,其他文件最终会位于/lost+found- 如果您愿意,您可以尝试从中恢复某些内容。

上述选项的作用如下:

不同文件系统特定的 fsck 的选项没有标准化。如果有疑问,请查阅文件系统特定检查器的手册页。尽管不能保证,但大多数文件系统检查器都支持以下选项:

-A 毫无疑问自动修复文件系统(谨慎使用此选项)。请注意,e2fsck(8) 支持 -a 仅用于向后兼容。该选项映射到 e2fsck 的 -p 选项,可以安全使用,这与某些文件系统检查器支持的 -a 选项不同。

(...)

-y 对于某些特定于文件系统的检查器,-y 选项将导致特定于 fs 的 fsck 始终尝试自动修复任何检测到的文件系统损坏。有时,专家可能能够更好地手动驱动 fsck。请注意,并非所有特定于文件系统的检查器都实现此选项。特别是,截至撰写本文时,fsck.minix(8) 和 fsck.cramfs(8) 不支持 -y 选项。

相关内容