可以通过以下两种已知但未搜索过的方式获得搜索结果:
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/urandom
,srandom
比 快 150 倍/dev/urandom
。也许使用 shred 作为源,也会比 快得多/dev/urandom
?srandom
在某些系统上仍然不可用,但 shred 似乎在大多数系统上可用。因此,它可能被用作/dev/zero
和的快速替代方案/dev/urandom
答案1
shred
不关心它是写入块特殊文件(如/dev/sdXX
您的示例)还是写入常规文件。此命令
shred -n 0 -v -z my_file
是完全有效的,但请记住:
my_file
必须事先创建,shred
否则不会创建;- 事情的大小
my_file
,shred
不会扩大它。
如果您想要shred
一个占用文件系统中整个可用空间的文件,那么您需要创建足够大的文件。至少有三种方法(从“最聪明”到“最愚蠢”):
如果文件系统支持稀疏文件,则创建一个至少与可用空间一样大的稀疏文件。它可能更大。一个简单的方法是超越:无需担心确切的大小应该是多少,创建一个稀疏文件肯定更大.
truncate(1)
是正确的工具(例如truncate -s 500G my_file
)。稀疏文件最初不会分配文件系统的块。实际
shred
作业期间将分配块,文件将变得越来越稀疏,直到达到指定的大小。如果大小无法容纳文件系统,那么您将得到no space left
。实际上,您想要得到此错误,您希望分配尽可能多的块。dd
此方法将为您提供与方法(也以 结尾)类似的结果no space left
。以智能方式创建非稀疏文件。如果文件系统支持
fallocate(2)
系统调用,则使用fallocate(1)
创建尽可能大的文件。一种简单的方法是超过大小并获取no space left
,文件应以最大可能的大小创建。(例如fallocate -l 500G my_file
。)由于支持
fallocate(2)
,块将通过将其标记为未初始化来分配,而无需对数据块进行实际 IO。稍后将写入数据shred
。以愚蠢的方式创建非稀疏文件。如果文件系统不支持
fallocate(2)
,您仍然可以使用fallocate(1)
它来创建文件。如果不支持fallocate(2)
,数据块将用零填充。这将花费时间,已经完成了您希望您shred -z
做的事情。如果你的目标只是看看
shred
单独运行的速度有多快,那么即使使用这种方法创建一个测试文件也会让你shred
稍后进行测试。如果你的目标是写入一次零,那么你不需要shred
在这种情况下因为鞋底fallocate(1)
能完成这个工作。
笔记:
truncate(1)
vsfallocate(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
.
参考 :