【问题标题】:Easiest way to overwrite a series of files with zeros用零覆盖一系列文件的最简单方法
【发布时间】:2014-12-09 12:36:46
【问题描述】:

我在 Linux 上。我有一个文件列表,我想用零覆盖它们并删除它们。我尝试使用

srm file1 file2 file3 ...

但它太慢了(我必须覆盖和删除大约 50 GB 的数据)而且我不需要那种安全性(我知道 srm 会进行很多次传递而不是单次传递零)。

我知道我可以使用命令覆盖每个文件

cat /dev/zero > file1

然后用 rm 将其删除,但我无法为每个文件手动执行此操作。

是否有像 srm 这样的命令可以执行一次零传递,或者是否有一个脚本可以在文件列表而不是单个文件上执行cat /dev/zero?谢谢。

【问题讨论】:

  • 你应该检查 xargs ;)

标签: file overwrite


【解决方案1】:

srm 的目的是在释放块之前销毁文件中的数据。

cat /dev/null > file 根本不等同于 srm 因为 它不会破坏文件中的数据:块将在原始数据完好无损的情况下释放。

使用/dev/zero 代替/dev/null 甚至不起作用,因为/dev/zero 永远不会结束。

由于cat /dev/null 给出的相同原因,将程序的输出重定向到文件永远不会起作用。

您需要一个专用程序来打开给定文件进行写入,在文件的所有字节上写入零,然后删除该文件。这就是srm 所做的。

【讨论】:

  • 对不起,你是对的,我的意思是 /dev/zero 而不是 /dev/null。我已经更正了问题中的错误。
【解决方案2】:

像这样,使用stat 获得正确的写入大小,并使用dd 覆盖文件,可能是您需要的:

for f in $(<list_of_files.txt)
do
  read blocks blocksize < <(stat -c "%b %B" ${f})
  dd if=/dev/zero bs=${blocksize} count=${blocks} of=${f} conv=notrunc
  rm ${f}
done

使用/dev/urandom 代替/dev/zero 以获得(稍微)更好的擦除语义。

编辑:在dd 调用中添加了conv=notrunc 选项,以避免在打开文件进行写入时截断文件,这会导致关联的存储在被覆盖之前被释放。

【讨论】:

  • 我怀疑这是否行得通,因为dd 中的of 将只是对写入开放,而不是更新。
  • @lhf 好调用...这将截断文件,在覆盖之前释放存储空间。我将添加正确的选项以避免这种情况...
【解决方案3】:

我使用shred 来执行此操作。

以下是我通常使用的选项。

  1. shred -n 3 -z &lt;filename&gt; - 这将使 3 次通过随机数据覆盖文件。然后它将进行最后一次通过零覆盖文件。该文件将保留在磁盘上,但它会在磁盘上的所有0

  2. shred -n 3 -z -u &lt;filename&gt; - 与上面类似,但也取消链接(即删除)文件。删除的默认选项是wipesync,这是最安全的,但也是最慢的。 查看手册页了解更多选项。

注意: -n 用于控制随机数据覆盖的迭代次数。增加这个数字,将导致shred 操作花费更长的时间来完成和更好的粉碎。我认为 3 就足够了,但可能是错误的。

【讨论】:

  • shred的默认迭代次数是3,所以没有-n 3也是一样的
  • 是的@Monica,你是对的。但我更喜欢所有代码中的显式而不是隐式。
【解决方案4】:

是否有像 srm 这样的命令,它会执行一次零传递,

是的。 SRM 使用正确的参数执行此操作。来自人 srm: srm -llz

-l 降低了安全性。只写了两遍:一种模式 0xff 和最终模式随机值。

-l -l 第二次更安全地教训了安全性:只有一个 随机通行证被写入。

-z 用零而不是随机数据擦除最后一次写入 如果擦除目录,srm -llzr 将递归执行相同的操作。

您甚至可以使用 'srm -llz [file1] [file2] [file3] 以这种方式通过单个命令擦除多个文件

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多