如何写入一个用碎片填充的硬盘文件来擦除磁盘数据?

如何写入一个用碎片填充的硬盘文件来擦除磁盘数据?

可以通过以下两种已知但未搜索过的方式获得搜索结果:

dd if=/dev/zero of=/path/to/mounted/partition/my_file.txt bs=64k

但是否可以使用shred作为零或随机数据的来源并将其作为文件写入硬盘?

Shred 可以按照以下方式使用来创建数据流,但还不能将其写入文件。

sudo shred -n 0 -v -z /dev/sdXX

也许可以按照shred这样的方式写入文件:

sudo shred -n 0 -v -z > my_file.txt

我有兴趣问这个问题,原因如下:

  • 我喜欢比较用文件填充磁盘的不同方法的速度。使用 作为源的/dev/zero速度是 的 25 倍/dev/urandomsrandom比 快 150 倍/dev/urandom。也许使用 shred 作为源,也会比 快得多/dev/urandom

    请参阅以下内容:为什么在用随机数据填充驱动器时,GNU Shred 比 dd 更快?

  • srandom在某些系统上仍然不可用,但 shred 似乎在大多数系统上可用。因此,它可能被用作/dev/zero和的快速替代方案/dev/urandom

答案1

shred不关心它是写入块特殊文件(如/dev/sdXX您的示例)还是写入常规文件。此命令

shred -n 0 -v -z my_file

是完全有效的,但请记住:

  • my_file必须事先创建,shred否则不会创建;
  • 事情的大小my_fileshred不会扩大它。

如果您想要shred一个占用文件系统中整个可用空间的文件,那么您需要创建足够大的文件。至少有三种方法(从“最聪明”到“最愚蠢”):

  1. 如果文件系统支持稀疏文件,则创建一个至少与可用空间一样大的稀疏文件。它可能更大。一个简单的方法是超越:无需担心确切的大小应该是多少,创建一个稀疏文件肯定更大.truncate(1)是正确的工具(例如truncate -s 500G my_file)。

    稀疏文件最初不会分配文件系统的块。实际shred作业期间将分配块,文件将变得越来越稀疏,直到达到指定的大小。如果大小无法容纳文件系统,那么您将得到no space left。实际上,您想要得到此错误,您希望分配尽可能多的块。

    dd此方法将为您提供与方法(也以 结尾)类似的结果no space left

  2. 以智能方式创建非稀疏文件。如果文件系统支持fallocate(2)系统调用,则使用fallocate(1)创建尽可能大的文件。一种简单的方法是超过大小并获取no space left,文件应以最大可能的大小创建。(例如fallocate -l 500G my_file。)

    由于支持fallocate(2),块将通过将其标记为未初始化来分配,而无需对数据块进行实际 IO。稍后将写入数据shred

  3. 以愚蠢的方式创建非稀疏文件。如果文件系统不支持fallocate(2),您仍然可以使用fallocate(1)它来创建文件。如果不支持fallocate(2),数据块将用零填充。这将花费时间,已经完成了您希望您shred -z做的事情。

    如果你的目标只是看看shred单独运行的速度有多快,那么即使使用这种方法创建一个测试文件也会让你shred稍后进行测试。如果你的目标是写入一次零,那么你不需要shred 在这种情况下因为鞋底fallocate(1)能完成这个工作。

笔记:

  • truncate(1)vs fallocate(1)。前者尝试创建一个稀疏文件,后者尝试创建一个非稀疏文件。

    如果文件系统不支持稀疏文件,truncate(1)则应类似于fallocate(1)。这意味着您可以使用truncate(1),并且将以最智能的方式创建文件。坦率地说,第二种方法并不比第一种方法更不智能,因为最终shred无论如何都会使文件变得非稀疏。这意味着您也可以使用,fallocate(1)truncate(1)不管您的文件系统是否支持稀疏文件。

  • 如果文件系统使用压缩,可能很难用零“填充”。长串的零压缩效果极好。

  • 如果文件系统的底层块设备是 SSD,或者文件系统存在于常规文件中,而常规文件又属于支持稀疏文件的文件系统,那么fstrim将零“写入”文件系统未使用的块可能是最快的方法。(注意:这可能会或可能不会清零全部未使用的块。

答案2

如果我理解正确,您的目的是将随机数据写入整个磁盘/分区,而您的唯一目标是测量写入速度。

shred可以使用以下命令实现:

shred --random-source=/dev/urandom -n1 /dev/sdX

该参数-n1代表一次传递。

/dev/urandom是伪随机数据的合理来源。
或者,任何加密文件也可以用作合理随机数据的来源。

如果 您 的 目的 是 进行 第二 次 将 磁盘 或 分区 设置为 零 以 隐藏 使用shred, 请 添加 参数--zero.

参考 :

相关内容