我正在寻找一种更简单的方法来测试我的应用程序,以防止在读取某些块时产生i/o读取错误的错误块设备.尝试使用已知坏块的物理硬盘很痛苦,我想找到一个软件解决方案(如果存在的话).
我确实找到了Linux磁盘故障模拟驱动程序,它允许创建一个接口,可以配置为在读取某些范围的块时生成错误,但它适用于2.4 Linux内核并且尚未针对2.6进行更新.
什么是完美的将是一个losetup和循环驱动程序,它还允许您配置它以在尝试从给定的一组块读取时返回读取错误.
我有一个 Zip 存档,其中包含一个无法解压的大(重要)文件。我尝试过的所有 Zip 实用程序,包括那些声称可以恢复/修复损坏的 Zip 存档的实用程序,都无法提取包含损坏的 zlib 压缩数据的文件。他们获取存档中的所有文件,但损坏的条目除外,该条目会被跳过。
我用 C# 编写了一个小型实用程序应用程序,它解析 zip 存档、识别每个条目并解析字段、解密数据部分,然后使用 DeflateStream(来自 zlib 的 .Net 实现)解压缩它们。一切正常,直到我找到损坏的入口。损坏的条目成功且完全解密(在 CTR 模式下使用 AES),但 DeflateStream 读取器在抛出“错误状态(超额订阅动态位长度树)”之前只能读取大约 40MB 的解密数据。
是否有可能以某种方式“寻找”损坏的部分并继续解压缩数据?我想恢复尽可能多的文件,即使有一些漏洞。DeflateStream 没有实现 Seek 方法,如果我尝试创建一个新的 DeflateStream,并将底层 FileStream 定位到最后读取的位置,它会抛出相同的“Bad State”异常。