遗憾的是,有时硬盘上的数据扇区可能会损坏,在这种情况下,这意味着写入该扇区的数据(512 或 4096 字节)无法可靠地读回。
通常我会收到一条消息,通知我有关坏扇区的信息,也许我告诉自己“好吧,无论如何数据并不那么重要”,一切都很好。
但是,如果我真的、真的、真的想要这些数据,并且假设不可读的扇区没有严重损坏,以至于数据被破坏得无法使用,那么我应该如何获取数据(即使已损坏)?
我认为hdparm
或者smartclt
可能是工具,它可以向硬盘发出命令告诉它:“给我扇区的内容,无论错误检查是否成功!”
那个命令是什么?
更新
我只调查man hdparm
并告诉了这一点
--read-sector
从指定的扇区号读取,并将十六进制内容转储到标准输出。在此选项后必须给出扇区号(以 10 为基数)。 hdparm 将为指定扇区发出低级读取(完全绕过通常的块层读/写机制)。这可用于明确检查给定扇区是否损坏(介质错误)(通过通常的机制执行此操作有时会产生误报)。
我不确定这是否真的是告诉硬盘提供数据的版本。
该问题的可能答案还指出,相应的协议(例如(S/P)ATA、SCSI 等)甚至不允许强制命令。
更新
我认为有。在某些用例中,HDD 4096 字节上的较大扇区不会仅仅因为存在一些损坏而完全变得无用。例如,如果存储的数据已经进行了损坏容错打包,即一些 ECC 已混合到数据中,那么(从硬盘固件)返回不正确/损坏的数据将是很好的,因为它仍然是“可纠正的”或为我。
我认为硬盘应该比用户决定不按需要返回数据更好。 (标记损坏并阻止正常读取是可以的,但禁用任何读取是有限制的)
好吧,也许还有办法!