如何设法读取由于坏扇区而无法读取的文件?

如何设法读取由于坏扇区而无法读取的文件?

我有ext3文件系统和最新的 Linux 发行版。

我需要将文件复制(读取)到新的目的地。

不幸的是cp/mv或 MC(午夜指挥官)在文件内的某个点停止/失败。

有些文件停止得相当早,达到 30%,其他文件则停止到 98%,并在系统日志中显示扇区错误。

mv/cp但 MC 也无法继续复制文件,只需跳过会导致 I/O 读取错误的此(和其他)扇区。在MC中我确实尝试了多次重试,但无济于事。

这些文件对我可能有用,只是因为当前磁盘上的某些单个或几个扇区不再可读,我想继续读取文件的其余部分和其他健康部分。

有什么好的工具或行之有效的机制可以最大程度地读取文件?第一个 I/O 读取错误总是会结束我的游戏。

可能有某种方法甚至是一个方便的工具可以更可靠地读取文件,并且只需用一些占位符字节或类似的内容填充不可读的扇区。

挂载ext3文件系统的 Linux 不能实现这个目标吗?

Linux 作为内核是否提供某种方法来读取超出扇区的错误,并跳到文件的下一个扇区等等?

系统日志始终显示相同的扇区(每个文件)会导致 I/O 读取错误,只是为了明确这一点,我猜想从这些文件中读取会有更多的扇区和健康部分。

答案1

ddrescuegddrescue包裹,手册页

假设驱动器有一个健康的分区表,您可以轻松地执行以下操作:

  1. 将故障驱动器的分区的映像文件创建到某个健康的驱动器上(我不想让这对您来说变得不必要的困难,这就是为什么我们不创建整个驱动器的映像,但如果分区表证明是被打破,你最终将不得不被打破)。

  2. 调查日志文件(它实际上称为地图文件,但这对你来说现在并不重要),根据错误的数量采取相应的行动。

  3. 这意味着,要么尝试直接挂载有问题的分区的映像文件,要么testdisk在整个磁盘映像文件上运行,以防分区表损坏,这是分区恢复的完美实用程序,但让我们从创建分区的映像文件。


sudo ddrescue --idirect --retry-passes=3 /dev/sdx9 recovery.img recovery.log

假设:

  • 驱动器名称是/dev/sdx

  • 您需要恢复的分区有编号9

  • 您想重试坏扇区3次数

  • 您要将图像文件保存到当前目录 ( .)

  • 您想将图像文件另存为recovery.img

  • 你要保存日志文件,这非常重要!,如recovery.log


如果一切顺利,然后只需挂载映像文件即可:

sudo mount recovery.img /mnt/whateverMountPoint

如果由于某种原因,驱动器停止响应,或发生任何错误,我通常只需重新启动机器,然后运行非常一样命令,该命令将从之前停止的位置重新启动该进程。


谨防:

我没有意识到你提到了已安装的文件系统。这可能是一个问题。

您会看到,您不应该创建已安装文件系统的映像。相反,我建议您创建一些 Linux USB,启动它,然后继续执行我所说的操作。

相关内容