我们的 ext4 文件系统上的一个大文件可能在中间出现了坏块。将文件复制到另一个驱动器会导致中途出现输入/输出错误。但是坏扇区以外的数据似乎仍然正常。
由于该文件是最近创建的,我们没有它的备份,因此我正在寻找一种复制文件整个可读部分同时跳过坏扇区的方法。
我读过其他网站,它们建议了恢复带有坏块的整个硬盘的方法,但它们并没有提及如何恢复跨越坏块的文件。
谢谢。
答案1
你应该能够做到dd
:
dd if=fileWithBadBlocks of=recoveredFile bs=4k conv=noerror,sync
答案2
需要注意的是,文件系统只会读取磁盘上的“块”(通常为 4k),但硬盘上的损坏通常涉及“扇区”(非 ADF 磁盘上为 512 字节)。
如果某个块中的单个扇区无法读取,则文件系统会认为整个块无效,并且不会根据请求返回内容,因此实际上尝试复制文件就可恢复数据量而言,可能无法为您提供最佳结果。
相反,你可以考虑使用dd
选项conv=noerror
和默认块大小 512 字节,或者甚至ddrescue
复制整个分区包含文件系统,然后复制该文件。
答案3
2021 年的小更新,最近我遇到了同样的问题,尤其是 innoDB (.ibd) 文件损坏了。需要尽快修复,而克隆整个磁盘可能需要几天时间,所以我开发了一个旨在解决完全相同问题的软件。
我搜索了很多次都没有成功,这就是我将其公开的原因。 https://github.com/DaVieS007/Partial-File-Recovery
答案4
这只是我今年的 2c。
我来到这里是因为我的 raid 0 驱动器开始出现故障块,并且使用我的 raid 控制器来“替换磁盘”除了将坏的 juju 复制到另一个磁盘上之外没有做任何事情?
为了尽可能地保存数据,我现在正在尝试 ddrescue。只是添加了如何安装;
- 主页 GNU 页面;https://www.gnu.org/software/ddrescue/ddrescue.html
- 主要手册;https://www.gnu.org/software/ddrescue/manual/ddrescue_manual.html
也是最好的一个;一个真正有用的指南; https://www.technibble.com/guide-using-ddrescue-recover-data/
如果您是远程运行,我还建议您使用 TMUX?也许有更聪明的方法可以做到这一点,但 ddrescue 命令需要保持运行,而我不想永远保持远程登录状态。
不确定为什么运行它需要 5 天时间(500GB)但是 tmux:
> run command
> ctrl+b, d
现在在 tmux 会话中运行,您也可以在下次登录时重新连接。