我这里的分区有一些 I/O 错误。我只是将可能的内容复制到另一个驱动器,但现在我想知道由于 I/O 错误而无法读取的文件,以便我可以从另一个源恢复这些确切的文件。
如何在磁盘上扫描 bash 中出现此错误的文件?
编辑
文件系统是 NTFS,我当前正在使用 cp 将文件复制到(复制到 zfs 磁盘,但这并不重要)。它已经花费了一天多的时间,因为它超过 300GB,并且偶尔会遇到 I/O 错误并跳过单个文件。
这些文件是 DAW 组件的一部分,单个 MIDI 文件或 WAV 样本不可读。对于成功通过的项目文件,我想从另一个备份重新安装特定的示例包,但由于这确实很多,我不想重新安装所有内容或测试所有可能丢失或丢失的项目文件和子文件夹损坏文件,并浪费一天或更长时间。因此,了解存在 I/O 错误的文件的路径可能会节省我一些时间,只需重新安装几个损坏的包即可。
答案1
这取决于分区上的文件系统类型。对于 ext2/ext3 和 ReiserFS,您可以在以下位置找到帮助:smartmontools 的坏块 HOWTO。
基本上,你正在做的是这样的:
- 启动硬盘自检,
smartctl
它会告诉你需要多长时间。 - 自检完成后,查看自检结果,识别出第一个坏块。如果没有坏块,就完成了。
- 确定坏块的分区以及分区内的偏移量。
- 使用
debugfs
确定该偏移量是否在文件内部,如果是,则确定是哪个文件。 - 使用 写任何内容到坏块上
dd
。硬盘会用备用块替换坏块。 - 重新启动 1. 以获得下一个坏块。
您可以在上述 HOWTO 中找到详细信息。
答案2
让我们从您的问题标题开始:
查找硬盘上的 I/O 错误
这句话没有任何意义,输入/输出错误是由于驱动器磨损,或更糟糕的情况下某种损坏而自然发生的。不要误会我的意思,你可以这样做:
找到坏扇区并用零填充
现在你原来的问题:
如何扫描磁盘中存在此错误的文件巴什?
更难破解。您需要 shell 脚本 ( bash
) 解决方案吗?如果是这样,你能解释一下为什么吗?
让我来谈谈你问题的核心(最有可能):
您的硬盘驱动器无法读取某些扇区。
正确的?因为如果是的话,你实际上不能用于cp
此任务。
你能做什么呢?
启动一个 GNU
ddrescue
使命(它是Ubuntu 软件包名为gddrescue
,有一个g
!)。
你是怎么做到的,一个纯粹的例子,不要曲解我的话,之后,如下:
ddrescue -d -f -r3 /dev/disk/by-partuuid/xxxxxxxxxxxx /path/where/to/store/image/of/the/partition /path/to/log/file/of/this/rescue
当然,您可以使用/dev/sdx1
,但如果连接多个磁盘,它会在重新启动期间引起问题,因此只需使用blkid /dev/sdx1
或其他即可。
您将无法识别哪些文件是完整的,恐怕除了实际打开文件并查看/听到/它应该包含的任何内容之外,还有其他方法。
您将能够直接安装该图像而无需任何偏移,我通常会这样做,但为了简单起见......
参考: