创建一个包含随机内容的大文件:复制的捷径?

Man*_*gia 5 encryption dd cryptsetup

假设我想使用 cryptsetup 创建一个存储在文件中的大型加密驱动器,第一步是创建一个随机文件,假设它的大小应该为 3T:

dd if=/dev/urandom of=$FILE bs=1G count=3000
Run Code Online (Sandbox Code Playgroud)

上述过程可能需要很长时间。我想知道以下快捷方式是否有意义(从安全角度来看,请记住目标是创建存储在 $FILE 中的加密驱动器):

  1. dd if=/dev/urandom of=$FILE bs=1G count=1000
  2. 将上述文件复制3份,每个文件大小为1T,随机内容相同
  3. 合并 3 个文件以创建一个目标大小为 3T 的随机文件

我猜这个过程没有那么严格,因为数据有点“少”随机,但从实用的角度来看,这是一个可行的解决方案(它会快3倍)?这比创建一个充满零的 3T 文件(使用/dev/zero)更好吗?

fro*_*utz 3

/dev/urandom对于这么大的数据量来说太慢了。

如果伪随机足够好:

shred -v -n 1 /kill/me
Run Code Online (Sandbox Code Playgroud)

如果加密的随机数足够好:

cryptsetup open --type=plain /kill/me cryptkillme
shred -v -n 1 /dev/mapper/cryptkillme
cryptsetup close cryptkillme
Run Code Online (Sandbox Code Playgroud)

加密也很慢,但仍然比/dev/urandom.

shred对于任何磁盘来说,应该足够快地生成随机数据。

另请注意,对于这个大小,您确实应该使用常规块设备,而不是文件。如果承载巨大文件的文件系统损坏,您将面临一个无法解决的难题,其中有很多碎片,因为这种大小的文件通常会严重碎片化。

如果你坚持使用文件,你可以考虑首先不要用随机数据填充它;您可以使用稀疏文件来代替,并修剪/打孔它以节省未使用区域的存储空间。

如果覆盖旧的未加密数据是您的目标,您还必须覆盖文件系统中的所有可用空间,而不仅仅是容器文件本身,因为您不知道它是否与您想要的未加密数据分配在同一位置摆脱。