如何主动挑起数据腐烂?

2021-02-03 12:41

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

解答动态

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

    • 读取文件,根据错误分布和概率随机翻转或设置位,然后将损坏的文件写回。

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

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

          • End

          免责声明:

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