我有 3 个便携式硬盘,一个是 160GB,另外两个是 500GB。我想使用 Linux 向它们写入零,然后dd
。我发现了这个命令:
dd if=/dev/zero of=/dev/sda bs=?
块大小如何,我的 3 个便携式硬盘的理想块大小是多少?(注意:我将放在?
命令的末尾。)
答案1
对于该bs=
值,我建议1024
这样设置:
dd if=/dev/zero of=/dev/sda bs=1024
但如果你对数据恢复很在意,并且想做一些比仅仅写入零更“强大”的事情,那么你可以使用/dev/urandom
而是像这样:
dd if=/dev/urandom of=/dev/sda bs=1024
擦除驱动器的另一种方法。
但就我个人而言,我不喜欢使用dd
这种方法来完成这样的任务。相反,我使用了一种略微不同的方法,即格式化驱动器(如果需要重新分区,则重新分区),然后运行以下命令。请注意,虽然有些人可能认为这种方法“效率低下”,但您必须对分区和文件系统的工作方式非常不信任,才能相信这种方法不是一种可行的替代方法:
cat /dev/zero >> /path/to/mounted/drive/junk_file &
或者使用/dev/urandom
如上dd
示例所解释的设备:
cat /dev/urandom >> /path/to/mounted/drive/junk_file &
只需更改/path/to/mounted/drive/
为已安装驱动器的实际路径即可。这样做会junk_file
在文件系统上创建一个名为的文件,并将其作为后台进程执行,并将&
附加到末尾。
此类操作的好处在于您可以停止它并在稍后恢复。这意味着它只是一个充满零或随机垃圾的文件。假设您需要关闭机器或断开驱动器。只需这样做。然后再次运行相同的命令并让它从开始的地方继续。这在从可能需要数小时才能完成的非常大的驱动器中擦除数据时非常有用。
有关这些和其他安全设备/文件删除方法的更多详细信息,请查看ArchWiki 上的此页面。这些技巧对于几乎任何 Linux/Unix(甚至 Mac OS X)系统都很有用,而不仅仅是 ArchLinux。
数据擦除操作的速度。
至于速度,这种操作的总体速度可以通过系统将 160GB 或 500GB 文件复制到同一驱动器所需的时间来估算。因为像这样写入文件实际上相当于“复制”文件的数据;只是在这种情况下正在创建一个文件。
值得一提的是,/dev/urandom
这样做会花费更长的时间 — /dev/zero
— 因为/dev/urandom
实际上生成的是随机数据 — — 所以如果时间是一个因素的话,请记住这一点。
答案2
我把这个写成评论,但为了提高可见性,我也会将其作为答案。
对于dd
块大小,您需要一个足够大的缓冲区,以便程序不会不断地发出系统调用来处理少量的 I/O。使用 复制了大量磁盘后dd
,我建议至少bs=1M
,或者甚至类似16M
。如果您的磁盘大小不是块大小的整数倍,那么您会在最后留下一小段未覆盖的数据;可以肯定那里什么都没有,但如果您想谨慎一点,您可以手动获取最后一点。
使用较小的块大小(/dev/zero
或任何其他源)会降低您的速度,但与使用阻塞数据源(如)相比,这算不了什么/dev/random
,这也是撰写本文时接受的答案所暗示的。的目的/dev/random
是生成最大熵数据,不生成很多数据。这不仅仅是因为它很慢,还因为它从一个有限大小的熵池中提取数据,而这个池子不能很快地重新填充(特别是当你没有对系统进行任何其他操作时)。
当池耗尽时,读取/dev/random
将阻塞,拒绝提供任何数据,直到池重新填充。您将其用于/dev/random
长期加密密钥之类的东西,而不是用于批量数据。试图从中提取半兆字节/dev/random
绝对是一个糟糕的想法。如果你想要大量的高熵数据,你需要改用/dev/urandom
。它使用伪随机生成器将熵池拉伸到任意大小,放弃一些熵以确保对其进行的读取总能在合理的时间内成功。