2009-08-06 23:48:03 +0000 2009-08-06 23:48:03 +0000
149
149

如何在Linux中擦除空闲的磁盘空间?

当一个文件被删除后,其内容可能仍然会留在文件系统中,除非明确地用其他东西覆盖。wipe命令可以安全地擦除文件,但似乎不允许擦除任何文件未使用的空闲磁盘空间。

应该用什么方法来实现?

答案 (15)

113
113
113
2009-08-07 01:55:07 +0000

警告:*现代磁盘/SSD硬件和现代文件系统可能会在你无法删除的地方把数据偷跑掉,所以这个过程可能还是会在磁盘上留下数据。擦除数据的唯一安全方法是使用ATA安全擦除命令(如果执行正确的话),或者物理销毁。另请参阅如何可靠地擦除硬盘上的所有信息?

您可以使用一套名为secure-delete的工具。

srm

srm的man page of smem

srm是以安全的方式删除介质上的数据,使其无法被窃贼、执法部门或其他威胁者恢复。

srm的安全数据删除过程是这样的:

  • 1次通过0xff
  • 5次随机通过,如果有条件的话,sfill用于安全的RNG。
  • 将文件重命名为一个随机值
  • 截断文件 作为额外的安全措施,文件在O/SYNC模式下被打开,并且在每次通过后都会调用sswap
74
74
74
2009-08-07 08:58:40 +0000

最速の方法は、あなただけの単一のパスを必要とし、ちょうどゼロですべてを置き換える場合は、次のとおりです。

cat /dev/zero > zero.file
sync
rm zero.file

(あなたがワイプしたいファイルシステム上のディレクトリから実行) (syncコマンドは、すべてのデータがディスクに書き込まれることを保証するパラノイア対策です - インテリジェントなキャッシュマネージャは、ファイルがアンリンクされているときに、任意の保留中のブロックのための書き込みをキャンセルすることができることをうまくいくかもしれません)

この操作の間に時間がありますが、結果のファイルが大きく、断片化されている場合は、削除するためにしばらくかかるので、数十秒になることができるファイルシステム上のすべての空き領域がありません。フリースペースが完全にゼロであるときに時間を減らすために:

dd if=/dev/zero of=zero.small.file bs=1024 count=102400
cat /dev/zero > zero.file
sync
rm zero.small.file
rm zero.file

これは、高価なフォレンジック操作なしで古いファイルの内容を読んで誰かを停止するのに十分であるべきです。より安全だが、より遅いバリアントには、/dev/zero/dev/urandom に置き換えてください。より多くのパラノイアのためには、/dev/urandom を使って複数のステップを実行しますが、それだけの労力が必要な場合は coreutils パッケージの shred ユーティリティを使うのが良いでしょう。とシュレッドプロセスは、大きなファイルの上にlong時間を取ると、NSAから何かを非表示にしようとしている場合を除き、本当に必要なIMOではありません。

上記のすべては、任意のファイルシステム上で動作する必要があります。

ファイルサイズの制限:

DanMoulding が下のコメントで指摘しているように、これはいくつかのファイルシステム上のファイルサイズの制限に問題があるかもしれません。

FAT32 の場合、それは definitely 2GiB ファイルの制限のために懸念されるでしょう: ほとんどのボリュームは、これらの日(8TiB がボリュームサイズの制限です IIRC)よりも大きいです。この問題を回避するには、大きな cat /dev/zero の出力を split を通して複数の小さなファイルを生成し、それに応じてシュレッドと削除のステージを調整することができます。

(まだ実験中の) btrfs では、最大ファイルサイズとボリュームサイズの両方が 16EiB になります。 http://en.wikipedia.org/wiki/Ext3#Size_limits http://en.wikipedia.org/wiki/Btrfs http://en.wikipedia.org/wiki/Ntfs#Scalability

仮想デバイス

最近のコメントで述べられているように、仮想デバイスには追加の考慮事項があります:

  • まばらに割り当てられた仮想ディスクには、zerofree で使用されているような他の方法の方が速いでしょう(ただし、catdd とは異なり、これは標準的なツールではなく、ほとんどの Unix 系 OS で利用できることを信頼できます)。

  • 疎な仮想デバイス上のブロックをゼロにしても、その下にあるphysicalデバイス上のブロックは消去されないかもしれないことに注意してください。

  • 固定サイズの仮想デバイスであっても、デバイスが物理的にどこに住んでいるかを制御できない場合がありますので、現在の場所の周りに移動したり、いつでも物理ディスクの新しいセットの上に移動することができ、あなたが拭くことができるほとんどは、現在の場所であり、ブロックが過去に存在している可能性があります任意の以前の場所ではありません。

  • 仮想デバイス上の上記の問題について: ホストを制御し、VM内のディスクをワイプしたり、仮想デバイスを移動させたりした後に、未割り当てのスペースを安全にワイプすることができない限り、事実上、この問題については何もすることができません。唯一の解決策は、最初から完全なディスク暗号化を使用して、暗号化されていないものが物理メディアに書き込まれないようにすることです。もちろん、VM内のフリースペースのワイプは必要かもしれません。また、FDE は仮想化レイヤがどのブロックが使われていないかを実際に見ることができないため、スパースな仮想デバイスはあまり役に立たないことにも注意してください。OS のファイルシステム層が仮想デバイスに (SSD のように) トリムコマンドを送信し、仮想コントローラがそれを解釈する場合、それが解決するかもしれませんが、これが実際に起こる状況を私は知りませんし、それについてのより広い議論は他の場所の問題です (私たちはすでに元の質問の話題から離れようとしています。)

47
47
47
2010-06-09 17:40:37 +0000

警告

我被我的磁盘上有多少文件photorec可以从我的磁盘上检索到的文件吓了一跳,即使是在擦拭之后。1996年关于粉碎的开创性论文的作者自己写了一篇后记说,这对于现代硬件来说已经过时了,没有必要。目前还没有文献记载的数据被物理置换为零,事后恢复的案例。

这个过程中真正的脆弱的环节文件系统。有些文件系统会预留空间作为特殊用途,它不会作为 “空闲空间 "提供。但你的数据可能就在那里。这包括照片、个人纯文本邮件等。我刚刚在谷歌上搜索了一下Reserved+space+ext4,得知我的home分区有5%的空间是预留的。我想这就是photorec发现我这么多东西的地方吧。总结一下。**的粉碎方法不是最重要的,即使是多通法也会留下数据的*。

你可以先试试# tune2fs -m 0 /dev/sdn0再挂载。如果重启后这将是根分区,一定要在卸载后运行-m 5-m 1)。

但还是会有这样或那样的方法,可能会留下一些空间。

真正安全的方法是将整个分区擦除,重新创建一个文件系统,然后从备份中恢复你的文件。


快速的方法(推荐)

从你要擦除的文件系统上的一个目录中运行:

dd if=/dev/zero of=zero.small.file bs=1024 count=102400
dd if=/dev/zero of=zero.file bs=1024
sync ; sleep 60 ; sync
rm zero.small.file
rm zero.file

_注:小文件的目的是为了减少空闲空间完全为零时的时间;同步的目的是确保数据实际写入。 _

这对大多数人来说应该已经很不错了,

慢的方式(偏执)

目前还没有记录到上述清理后数据被恢复的案例。如果完全可以的话,那将是非常昂贵和耗费资源的。

然而,如果你有理由认为秘密机构会花费大量的资源来恢复你的文件,这应该就足够了:

dd if=/dev/urandom of=random.small.file bs=1024 count=102400
dd if=/dev/urandom of=random.file bs=1024
sync ; sleep 60 ; sync
rm random.small.file
rm random.file

需要的时间要长得多。如果你选择了偏执的方式,在这之后你还是会想做快速擦除,这不是偏执。纯粹的随机数据的存在,很容易被发现,也很便宜,让人怀疑这其实是加密数据。你可能会因为不透露解密密钥而死在酷刑之下。

非常缓慢的方式(疯狂的偏执)

甚至连1996年关于粉碎的开创性论文的作者都写了一篇后记说,这对于现代硬件来说已经过时了,没有必要。

但如果你还有很多空闲时间,并且不介意用大量的覆盖来浪费你的磁盘,那就这样:

dd if=/dev/zero of=zero.small.file bs=1024 count=102400
sync ; sleep 60 ; sync
shred -z zero.small.file
dd if=/dev/zero of=zero.file bs=1024
sync ; sleep 60 ; sync
rm zero.small.file
shred -z zero.file
sync ; sleep 60 ; sync
rm zero.file

_注:这基本上相当于使用安全删除工具。"猫 "命令会产生错误信息,但我不能在别人的帖子上写评论,所以我不能在别人的帖子上写评论。

27
27
27
2013-01-05 14:51:12 +0000

至少在Ubuntu里有一个zerofree工具: http://manpages.ubuntu.com/manpages/natty/man8/zerofree.8.html

zerofree — zero free blocks from ext2/3 file-systems

   zerofree finds the unallocated, non-zeroed blocks in an ext2 or ext3
   filesystem (e.g. /dev/hda1) and fills them with zeroes. This is useful
   if the device on which this file-system resides is a disk image. In
   this case, depending on the type of disk image, a secondary utility may
   be able to reduce the size of the disk image after zerofree has been
   run.

   The usual way to achieve the same result (zeroing the unallocated
   blocks) is to run dd (1) to create a file full of zeroes that takes up
   the entire free space on the drive, and then delete this file. This has
   many disadvantages, which zerofree alleviates:

      · it is slow;

      · it makes the disk image (temporarily) grow to its maximal extent;

      · it (temporarily) uses all free space on the disk, so other
         concurrent write actions may fail.

   filesystem has to be unmounted or mounted read-only for zerofree to
   work. It will exit with an error message if the filesystem is mounted
   writable. To remount the root file-system readonly, you can first
   switch to single user runlevel (telinit 1) then use mount -o remount,ro
   filesystem.

也可以查看这个关于zerofree的链接。保持文件系统图像稀疏](http://intgat.tigress.co.uk/rmy/uml/index.html) - 它的作者是Ron Yorston (2012年8月9日)

3
3
3
2015-09-08 19:27:48 +0000

现在典型的加密硬盘的说明会告诉你首先要对硬盘进行WIPE。

下面的命令会给你的硬盘注入AES密码,如果你需要擦除主启动硬盘,请使用活的光盘。

打开一个终端并提升你的权限:

sudo bash

让我们列出系统中所有的驱动器以确保安全:

cat /proc/partitions

注意:用你要擦除的设备替换为/dev/sd{x}。你可能会使你的系统无法启动!!!

sudo openssl enc -aes-256-ctr -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" -nosalt < /dev/zero > /dev/sd{x}

我对这是多么快的速度感到震惊。

2
2
2
2009-08-07 01:04:21 +0000

我用dd来分配一个或多个大文件来填满空闲空间,然后用安全删除工具。

用dd来分配文件,可以尝试:

dd if=/dev/zero of=delete_me bs=1024 count=102400

这将生成一个名为delete_me的文件,大小为100MB。(这里bs是 “块大小 "设置为1k,count是要分配的块数。)

然后使用你最喜欢的安全删除工具(我一直在使用shred)对创建的文件进行安全删除。

但注意这个:缓冲意味着即使你做了whole磁盘,你也不一定能完全得到所有的东西!


这个链接推荐使用scrub来擦除自由空间。还没试过。

2
2
2
2013-07-04 21:22:51 +0000

你可以使用安全删除包来清除你的空闲空间。

在该包中你可以找到sfill工具,它可以安全地删除存在于可用磁盘空间中的数据,并以安全的方式删除这些数据,使其无法被窃贼、执法部门或其他威胁者恢复。要在Linux (Ubuntu)中安装安全删除包,请用以下命令安装:

$ sudo apt-get install secure-delete

然后,要想****删除你的数据,请尝试用以下命令:

sfill -f -v -ll /YOUR_MOUNTPOINT/OR_DIRECTORY

其中/YOURMOUNTPOINT/或/YOURDIRECTORY是你的挂载点(df -h, mount)或目录,以清除空闲空间。 .html ](http://manpages.ubuntu.com/manpages/hardy/man1/sfill.1.html)

1
1
1
2009-08-07 01:58:44 +0000

你可能已经在系统中安装了 GNU coreutils 包 。它提供了 shred 命令。

1
1
1
2011-11-26 03:38:47 +0000

更简单的方法是使用scrub

scrub -X dump

这将在当前位置创建一个dump文件夹,并创建文件,直到磁盘满了为止。你可以用-p选项(nnsa|dod|bsi|old|fastold|gutmann)选择一个模式。

要安装好 scrub 并不容易参见Ubuntu论坛),但是一旦安装好了,你就有了一个非常简单有效的工具。

1
1
1
2015-09-27 18:29:48 +0000

以下是我使用的 “sdelete.sh "脚本。详情请看注释。

# Install the secure-delete package (sfill command).

# To see progress type in new terminal:
# watch -n 1 df -hm

# Assuming that there is one partition (/dev/sda1). sfill writes to /.
# The second pass writes in current directory and synchronizes data.
# If you have a swap partition then disable it by editing /etc/fstab
# and use "sswap" or similar to wipe it out.

# Some filesystems such as ext4 reserve 5% of disk space
# for special use, for example for the /home directory.
# In such case sfill won't wipe out that free space. You
# can remove that reserved space with the tune2fs command.
# See http://superuser.com/a/150757
# and https://www.google.com/search?q=reserved+space+ext4+sfill

sudo tune2fs -m 0 /dev/sda1
sudo tune2fs -l /dev/sda1 | grep 'Reserved block count'

sudo sfill -vfllz /

# sfill with the -f (fast) option won't synchronize the data to
# make sure that all was actually written. Without the fast option
# it is way too slow, so doing another pass in some other way with
# synchronization. Unfortunately this does not seem to be perfect,
# as I've watched free space by running the "watch -n 1 df -hm"
# command and I could see that there was still some available space
# left (tested on a SSD drive).

dd if=/dev/zero of=zero.small.file bs=1024 count=102400
dd if=/dev/zero of=zero.file bs=1024
sync ; sleep 60 ; sync
rm zero.small.file
rm zero.file

sudo tune2fs -m 5 /dev/sda1
sudo tune2fs -l /dev/sda1 | grep 'Reserved block count'
1
1
1
2015-09-30 09:27:44 +0000

我找到了一个简单的解决方案,在Linux和MacOS上都可以使用。移动到磁盘的根目录下,然后启动以下命令:

for i in $(seq 1 //DISKSPACE//); do dd if=/dev/zero of=emptyfile${i} bs=1024 count=1048576; done; rm emptyfile*;

,其中//DISKSPACE///是你的硬盘大小,单位为GB。

1
1
1
2013-05-25 20:40:26 +0000

使用 dd,然后把空闲空间清零,这是个神话,数据需要多次写入,而随机数据,相对于 1,0 则意味着不自然的活动。如果photorec还能找到东西,请记住,它正在扫描所有可用的文件,所以请用root用户再仔细检查一次。

0
0
0
2016-05-11 16:59:32 +0000

这不是答案!只是给想用pv的人一个评论………..所以不用投票了。

Linux Mint 17.3上,你可以用pv(pipe view)来获取写作进度。例如:

# Install pv (pipe view)
sudo apt-get install pv

# Write huge file of approximate size of /dev/sdb, using urandom data:
pv --timer --average-rate --progress --numeric --eta --interval 5 --size "$(blockdev --getsize64 /dev/sda )" /dev/urandom >rand.file

这里的好处是,你可以得到一个进度条、ETA和持续更新的数据速率。缺点是这是写在一行上,当磁盘满了的时候(返回错误)就会消失。发生这种情况是因为满的大小是近似的,因为操作系统很可能会在这个非常长的操作过程中使用磁盘,特别是在操作系统卷上。当使用原始的/dev/urandom/dev/zero而不是dd时,这可能会进一步提高。

0
0
0
2015-07-30 09:30:08 +0000

我有时会用这个bash单行本:

while :; do cat /dev/zero > zero.$RANDOM; done

&001

当它开始提示磁盘已满时,只需按Ctrl+C键,将创建的zero.*文件删除。

-13
-13
-13
2009-08-06 23:59:57 +0000

一旦文件从文件系统的记录中消失,硬盘上留下的数据就是无意义的1和0的序列。如果你想用另一个无意义的序列来代替这个无意义的序列,我可以给你一些商业化的安全擦除驱动器产品的建议,比如arconis。