如何主动引发存储单元上的数据损坏?

2021-02-05 22:23

对于一个项目,我希望故意引起存储单元(例如,硬盘或闪存驱动器)上的数据损坏。我知道大多数现代操作系统和文件系统以及硬件都有防止数据损坏的措施。我如何设

解答动态

  • 如果你乐于使用这么小的数据存储单元,那么UV-EPROM将非常容易腐烂。它们仍然可用,在线拍卖网站有它们,没有太多的钱。即使是2700,4mbit,也只有几磅。
    当然,它们不存储“文件”,只存储原始数据,所以你需要某种形式的外部存储器。或许可以使用Arduino对其进行寻址,并将其数据表示为一个文件。FWIW,一些CircuitPython模块可以作为USB内存读取,因此可以从EPROM读取数据,并将一个文件写入其本地存储区域来表示它。
    当我在职业生涯早期第一次遇到UV-EPROM时,几十年前,我很关心推荐的写入和擦除时间,所以编写了一个,然后反复验证,两次验证之间在橡皮擦中间隔一分钟。第一个位需要几分钟的时间才能退出,然后大部分时间在5到10分钟之间,最后一个位需要15分钟以上才能擦除。相当大的范围。

    • Neil

      • UK的回答让我想起了一个类似的方法,更常见的方法组件。如果如果您正在构建一个直接与存储设备接口的系统,那么您最好只使用SRAM,在SRAM中填充数据,然后逐渐将其电源电压降低到建议的最小值以下。与EPROM相比的优势(除了组件的可用性)是它的速度快得多,所以你可以很快地做更多的实验来找出产生最有用案例的电压。
        I曾经将其用于配备内部RAM的微,它必须检测到电源丢失,然后将一些数据保存到非易失性存储器中,然后电路板上的电容器降低到足以导致RAM损坏的程度。我没有明确研究“内存崩溃”本身(我只关心它是否发生),但我注意到,如果花太多时间,崩溃似乎是随机的。

        • 读取文件,根据错误分布和你想要的概率随机翻转或设置位,然后写下损坏的文件备份。

          • Flash在更高的温度下会更快地失去充电。然而,在一周之内,你可能无法在你的闪存(顺便说一下,硬盘的磁化也是一样)不会燃烧的温度下触发这种“腐烂”…所以,你必须走不同的路。正如Justme所说,你必须强调你的媒介。这里的经典压力是写作压力。明智的测试我会用一个伪随机数生成器(PRNG)(例如xoroshiro128+,或者任何需要种子的东西)和一个随机种子\$a\$。用\$a\$为PRNG种子。开始计时器。生成一个随机数据块大小的倍数(如4MB),直接写入存储设备(不是通过文件系统,而是原始设备)。在写东西的时候,准备下一块随机数据(操作系统倾向于缓冲东西,这样你可以在写东西的时候继续工作)重复4。直到你的手杖完全关闭设备并刷新缓冲区以保持稳定(这取决于操作系统,例如,在Linux上比在windows上更容易)。记下计时器上的时间,并将其用作平均写入时间速度。种子你的PRNG有$a$。开始计时器。读取来自您的计算机的数据块倍数(如4MB)设备。生成一个随机数与你的PRNG,比较设备读取数据。重复第十步直到你检查完整个街区。累积误码数数。重复10– 11. 直到你读完你的全部设备。关闭这个设备。注意记下时间,并将其用作平均读取时间。记下钻头的数量错误。选择一个新的\$a\$返回到2. 取决于你的设备的质量、你的运气和你可以写的速度,你应该看到错误率在增加(即内存单元正在腐烂!)
            读取速度的降低主要源于所有现代大容量存储器都采用内部校验和/或纠错码。如果他们检测到一个坏的内存字,错误修正就会启动。破译错误的单词需要时间,而且越是破译的码字就越复杂。
            严酷的事实是,在现代的内存密度下,物理对任何人都不好,随机的位翻转也会发生。这还不错——这就是为什么我们有现代的信道编码/纠错码(它们是一样的)。即使是一个全新的存储介质也会有一些位错误,但用户永远不会(或者准确地说,概率低于用户可以忽略的某个阈值)受到这些错误的影响,因为纠正物理不可避免性的能力是内置的。
            通过重复写入,您正在降低存储介质的物理质量,这比一周的时间所能做到的还要多。这只会使这些物理位错误的数量(你看不到)更高。如果一切顺利,存储仍然能够纠正这些错误,但它将需要更多的计算,因此需要更多的时间,因此读取速度较慢。你可能会遇到比器纠正的错误更多的错误,然后你实际上看到了一个位错误。
            事实上,测量这些并不是很简单的,因为你将诚实地测量你的错误纠正存储介质的位错误率和你的RAM的位错误率,它不会被纠正错误(除非您使用ECC-RAM)。这就是为什么第10步会生成少量的随机数据:这些数据会留在CPU缓存中,希望不会被写入外部RAM,因为外部RAM往往有更高的错误率。如果你只是生成一整条数据并将其写入RAM,然后将其进行比较,那么你检查RAM的次数就比检查存储介质的次数要多。

            • 闪存介质上的数据保留在很大程度上取决于写入和存储时的温度。当你向内存中写入数据时,内存越热,数据保留的时间就越长;当你存储数据时,内存越冷,数据保留的时间就越长。
              大约五年前,一个演示文稿在它上面放了一些硬数字:对于当时典型的固态驱动器,在25摄氏度下写字,在55摄氏度下储存,保存时间约为一周。为了更快地丢失数据,您可以进一步提高温度:在内存存放在冰箱中时写入数据,然后在数据表允许的最高温度下存储。

              • 在上面的某个点上,您确实提到“应该是物理数据腐烂”—但就it系统而言,您可以将抽象打包成其他抽象、一些适配器和一些转换,直到某个软件层给您一些信息。例如,你不会用磁头在旋转的硬盘上乱涂乱画,如果不对其固件进行编程,你甚至可能没有办法进行编程。
                此外,在IT系统中,还故意使用软件存储结构,如计算机中的RAID阵列或通过iSCSI和网络阻止存储。当存储服务器崩溃时,这一点可能更为明显,但请注意,除了介质上的位腐烂之外,传输和解释位所涉及的每一层都可能有错误—所有这些小处理器、内存缓冲区、固件、驱动程序、电缆、连接器等都可能有错误,
                因此,如果您在调查了系统在媒体上看到的错误之后,许多操作系统中都有错误注入驱动程序,这些驱动程序可以向块设备或NIC提供设置级别的不可靠性,而这种不可靠性有时会存在于更高的软件层,口吃,超时,所以你可以开发出解决方案,工作良好,无论这种错误。在任何情况下,如果您使用的操作系统没有提供这样的测试平台,那么开发一个测试平台应该不会太难——对于网络来说,它可能是无处不在的tun/tap驱动程序(如openvpn)的扩展,对于存储,您可以在文件上制作一个环回设备,偶尔将随机位作为腐烂的媒体设备撒入该文件中。

                • 便宜的可写光盘因腐烂相对较快(几年内)而臭名昭著,尤其是像DVD+RW或DVD-RW这样的可擦除光盘。即使是像CD-R或DVD+R这样的只写一次的光盘,也可能会很快衰退,这取决于品牌和存储条件。以我的经验来看,双层可写DVD光盘更不可靠。当然,如果你不想等的话,刮擦过的光盘会有读取错误。如果你不想损坏媒体,即使是灰尘也会引起一些问题。
                  或者将光盘放在阳光下一段时间,尤其是染料面朝上,尤其不要放在玻璃后面。(即使是室内的玻璃后面也应该足够了;未经过滤的阳光直射产生的紫外线可能不是最重要的因素。可能是一些加热和一些实际的光子能量对染料化学物质起作用。)
                  一些燃烧器/读取器允许您读取原始介质(绕过2层纠错),允许您查看错误率。因此,您将能够在rot达到压倒扇区错误纠正的程度之前检测到它。(音频CD仅使用1层纠错功能,为未压缩的PCM数据留出稍大的空间。数据CD通常使用2,因为一个位错误更可能使整个内容无法使用,尽管显然VCD(CD)格式使用与音频CD相同的模式。)
                  当您读回新刻录的光盘时,初始错误率将根据刻录机对光盘品牌/型号的喜爱程度以及写入速度/策略而有所不同由驱动器固件选择。(对于给定的燃烧器和圆盘的组合,通常有一个最佳点,不一定是最慢的速度,但通常不是最快的速度)。http://www.digitalfaq.com/guides/media/dvd-tests.htm

                  • End

                  免责声明:

                  本页内容仅代表作者本人意见,若因此产生任何纠纷由作者本人负责,概与琴岛网公司无关。本页内容仅供参考,请您根据自身实际情况谨慎操作。尤其涉及您或第三方利益等事项,请咨询专业人士处理。