我有ext3
文件系统和最新的 Linux 发行版。
我需要将文件复制(读取)到新的目的地。
不幸的是cp
/mv
或 MC(午夜指挥官)在文件内的某个点停止/失败。
有些文件停止得相当早,达到 30%,其他文件则停止到 98%,并在系统日志中显示扇区错误。
mv
/cp
但 MC 也无法继续复制文件,只需跳过会导致 I/O 读取错误的此(和其他)扇区。在MC中我确实尝试了多次重试,但无济于事。
这些文件对我可能有用,只是因为当前磁盘上的某些单个或几个扇区不再可读,我想继续读取文件的其余部分和其他健康部分。
有什么好的工具或行之有效的机制可以最大程度地读取文件?第一个 I/O 读取错误总是会结束我的游戏。
可能有某种方法甚至是一个方便的工具可以更可靠地读取文件,并且只需用一些占位符字节或类似的内容填充不可读的扇区。
挂载ext3
文件系统的 Linux 不能实现这个目标吗?
Linux 作为内核是否提供某种方法来读取超出扇区的错误,并跳到文件的下一个扇区等等?
系统日志始终显示相同的扇区(每个文件)会导致 I/O 读取错误,只是为了明确这一点,我猜想从这些文件中读取会有更多的扇区和健康部分。
答案1
ddrescue
(gddrescue
包裹,手册页)
假设驱动器有一个健康的分区表,您可以轻松地执行以下操作:
将故障驱动器的分区的映像文件创建到某个健康的驱动器上(我不想让这对您来说变得不必要的困难,这就是为什么我们不创建整个驱动器的映像,但如果分区表证明是被打破,你最终将不得不被打破)。
调查日志文件(它实际上称为地图文件,但这对你来说现在并不重要),根据错误的数量采取相应的行动。
这意味着,要么尝试直接挂载有问题的分区的映像文件,要么
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,启动它,然后继续执行我所说的操作。