有没有办法通过原始读取或写入扇区/块来插入或复制 Linux 中的“CRC”⁽¹⁾ 错误?

有没有办法通过原始读取或写入扇区/块来插入或复制 Linux 中的“CRC”⁽¹⁾ 错误?

我的一个朋友告诉我,Linux 内核 raid(mdadm raid5/6)不可靠,因为他曾尝试覆盖他的一个物理卷上的扇区,结果导致文件损坏。我回答他说这是正常的,因为 raid5 系统并非旨在检测错误,而只是在由于磁盘读取错误而检测到错误时纠正错误。

但是,我想知道如何通过在磁盘本身上写入错误来证明这个概念或进行可靠性测试。在 Linux 中,有没有一种方法可以以某种原始模式写入(或读取)扇区,从而允许手动读取或写入“CRC”⁽¹⁾ 代码,而不是让控制器自行管理它?

按照同样的逻辑,是否有办法将一个磁盘的原始副本复制到另一个磁盘上,以便在副本上而不是原始磁盘上尝试一些恢复数据处理,而使用不良的恢复软件则会发生这种情况,从而导致磁盘无法恢复。

我看到有人提出过类似的问题这里或者那里,但这个方法已经很老了,不太清楚,也没有令人满意的答案。显然,目的不是物理上破坏磁盘,而只是强制写入一些无效内容,这些内容以后可能会用类似的方法重写。顺便说一句,如果磁盘真的包含错误,扇区就不可能通过正常操作重新定位,因为需要事先正确读取它。

(1):我加上引号是因为我不确定最近的磁盘错误检测代码是否仍然基于 CRC。

答案1

答案很简短,但如果这是可以接受的:

基本上所有存储介质都是通过向各种其他协议(SATA、USB 等)发送 SCSI 命令来访问的,并且无法使用这些命令来控制 CRC 或类似字段。事实上,现代驱动器甚至会默默地替换 CRC 错误(无法通过在下次写入时将其映射到具有良好 CRC 的其他扇区来纠正)的扇区。

可能存在特定于供应商的扩展,允许您更直接地控制所有这些,但供应商不会告诉您。

相关内容