删除文件后,除非明确用其他内容覆盖,否则文件的内容可能仍保留在文件系统中。 wipe命令可以安全地擦除文件,但是似乎不能擦除任何文件都没有使用的可用磁盘空间。

我应该使用什么来实现此目的?

评论

唯一安全的解决方案可能是将文件保存在其他位置,擦除整个分区,重新创建文件系统,然后还原文件。我已经运行过photorec,即使在“擦除”可用空间后仍能检索到多少东西,我感到震惊。一个折衷的解决方案是在擦除表面上的可用空间之后将分区的左边界移动其大小的6%。

#1 楼

警告:现代磁盘/ SSD硬件和现代文件系统可能会将数据保存在无法删除的地方,因此此过程可能仍会将数据保留在磁盘上。
擦除数据的唯一安全方法是ATA安全擦除命令(如果实施正确)或物理破坏。另请参阅如何可靠地擦除硬盘驱动器上的所有信息?
您可以使用称为安全删除的工具套件。
sudo apt-get install secure-delete

它具有四个工具:
srm-安全删除现有文件smem-从ram安全删除文件痕迹sfill-擦除硬盘驱动器上标记为空的所有空间sswap-擦除交换空间中的所有数据。
srm的手册页

srm旨在以安全的方式删除介质上的数据,小偷,执法或其他威胁无法恢复该数据。擦除算法基于领先的民用密码学家之一Peter Gutmann在第六届Usenix安全研讨会上发表的论文“从磁性和固态存储器中安全删除数据”。
srm的安全数据删除过程像这样:

1次传递,0xff
5次随机传递。 /dev/urandom用于安全的RNG(如果有的话)。
27次通过具有Peter Gutmann定义的特殊值。
5次随机通过。 /dev/urandom用于安全的RNG(如果可用)。
将文件重命名为随机值
截断文件

作为一种额外的安全措施,文件以O_SYNC模式打开每次通过后,都会执行一次fsync()调用。为了提高速度,srm写入了32k块,填充了磁盘缓存的缓冲区,以迫使它们刷新和覆盖属于该文件的旧数据。


评论


很难找到安全删除的当前“官方”主页。也许是较旧的版本声称没有错误报告,但是同时没有开放的错误跟踪系统可以报告所发现的错误。安全删除主页还指出,它可能不会擦除所有未使用的数据块,具体取决于您使用的文件系统,这是事实。

–user39559
2010年9月7日于12:10

使用现代硬盘(大于20 GB左右),进行多次传递并等待一段时间是完全没有用的。因此,安装专用工具也变得毫无用处(这可以解释为什么安全删除不再有主页)。只需从适当的分区执行此操作即可:cat / dev / zero> nosuchfile; rm nosuchfile。

– mivk
2011年11月4日,11:47

@mivk:为什么做一次以上的考试没有用?为什么使用/ dev / zero而不是/ dev / random?那是因为速度问题吗?

–naught101
2013年1月5日12:14

使用/ dev / zero更快。如果您从/ dev / random中写入可用空间,则内核必须动态生成所有随机数据。这是一种有趣的方式,可让您观察平均负载上升到最大值...

–dafydd
13年5月26日在2:38

此处是否需要多次擦除的问题得到了解答:为什么在硬盘上多次写入零(或随机数据)比只执行一次更好?

–sleske
2014年1月28日上午10:25

#2 楼

如果只需要一次通过而只想将所有内容替换为零,则最快的方法是:

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


(从您要在文件系统上的目录中运行擦除)(sync命令是确保所有数据都写入磁盘的一种偏执措施-智能高速缓存管理器可能会得出结论,当文件未链接时,它可以取消任何未决块的写操作)

那里在此操作期间,文件系统上将完全没有可用空间,如果生成的文件很大且碎片很多,则可能需要数十秒,因此删除该文件需要一段时间。若要减少可用空间完全为零的时间:为了稍微更安全,但速度更慢,请使用/dev/zero替换/dev/urandom。要获得更多的妄想症,请使用/dev/urandom运行多个步骤,但是如果需要付出很大的努力,可以使用coreutils软件包中的shred实用程序:

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


请注意,小文件上方的文件会在创建大文件之前被切碎,因此可以在较大文件完成后立即将其删除,而不必等待其被切碎,从而使文件系统在可用时间上具有零可用空间。切碎过程需要花费很长时间才能处理一个大文件,除非您真的不想在NSA中隐藏某些内容,否则IMO并不是必须的。

以上所有内容都可以在任何文件系统上工作。

文件大小限制:

正如DanMoulding在下面的评论中指出的那样,在某些文件系统上,文件大小限制可能存在问题。

对于FAT32,由于2GiB文件的限制,肯定会引起关注:如今大多数卷都超过了此限制(8TiB是IIRC的卷大小限制)。您可以通过以下方式解决此问题:将较大的cat /dev/zero输出输出通过split输出,以生成多个较小的文件,并相应地调整切碎和删除阶段。

使用ext2 / 3/4时,您不必担心:默认的/常见的4K块文件大小限制为2TiB,因此您必须拥有巨大的体积才能成为问题(在这种情况下,最大体积为16TiB)。 (仍处于实验阶段)btrfs的最大文件大小和卷大小均为16EiB。

在NTFS下,某些情况下最大文件长度甚至大于最大卷长度。

有关更多信息的起点:http://en.wikipedia.org/wiki/Ext3#Size_limitshttp://en.wikipedia.org/wiki/Btrfshttp://en.wikipedia.org/wiki/Ntfs#Scalability

虚拟设备

如最近的评论所述,虚拟设备还有一些额外的注意事项:


对于稀疏分配的虚拟磁盘,其他方法例如就像q431使用的那样2079q会更快(尽管与zerofreecat不同,它不是可在几乎所有类似Unix操作系统上使用的标准工具)。
请注意,将稀疏虚拟设备上的块清零可能不会擦除基础物理设备上的块,实际上,我什至可以说这不太可能-虚拟磁盘管理器只会使该块不再使用,以便以后可以分配给其他对象。 br />即使对于固定大小的虚拟设备,您也可能无法控制设备的物理位置,因此可以随时将其移动到当前位置或移动到一组新的物理磁盘上,并且可以擦除的最大数量是当前设备位置,而不是该区块过去可能曾居住的任何先前位置。
对于虚拟设备上的上述问题:除非您控制主机,然后在擦除VM中的磁盘或移动虚拟设备之后可以对它们的未分配空间进行安全擦除,否则您将无能为力。事实。唯一的办法是从一开始就使用全磁盘加密,这样一来,首先将所有未加密的内容都写入物理介质。当然,在VM内仍然可能需要擦除自由空间。还要注意,FDE可​​以使稀疏虚拟设备的使用效率大大降低,因为虚拟化层无法真正看到哪些块未使用。如果操作系统的文件系统层将修整命令发送到虚拟设备(好像它是SSD),并且虚拟控制器解释了这些命令,则可以解决此问题,但我不知道在任何情况下实际上会发生修整命令,关于该问题的讨论是在其他地方讨论的问题(我们已经快要脱离原始问题了,因此,如果这激起了您的兴趣,那么可能需要进行一些实验和/或后续问题)。 br />

评论


显然,也可以使用安全删除工具来完成简单的调零:使用sfill -llz可以将整个过程减少到只写“ 0”的一遍。

– foraidt
2010-10-3 14:38

这需要一段时间。真的是最快的方法吗?我想写入GB数据将总是需要一段时间...

– Endolith
2011年6月15日在2:51

@endolith:如果您想清空活动文件系统上的可用空间,那么就无法满足通过文件系统开销写入那么多数据的需求。 fnord_ix建议的安全删除工具可能会更快,因为它们针对此类任务进行了优化。

– David Spillett
2011年6月15日12:04

@endolith:从手册页中的描述中,我希望zerofree的变体仅对于稀疏分配的虚拟磁盘更快,实际上,如果实数或固定大小的虚拟磁盘执行先读后写操作,它可能会更慢确认该块没有内容。虚拟磁盘的膨胀也不应该发生,因为大多数稀疏磁盘驱动器将全零表示为“不分配此块”。而且,cat和dd几乎可以在任何类似unix-a的操作系统上使用,因为它们被视为标准工具,除非明确添加了零释放,否则它们可能不是零释放。

– David Spillett
16-10-5在9:46

@endolith:上面已经说过,zerofree当然可以工作,手册页中提到的“整个文件系统暂时已满”(在我的示例中,几乎是但不被small.file jiggery扑克减轻了)如果您正在当前活动的系统上执行此操作,则需要担心,在针对以下方面进行了优化的特定实例中,zerofree确实会更快:稀疏分配的虚拟块设备。尽管出于安全性考虑,您不能依靠对虚拟设备进行任何擦除:在这种情况下,唯一的正确答案是从一开始就对整个设备进行加密。

– David Spillett
16-10-5在9:52

#3 楼

警告

即使擦拭后,photorec仍能从磁盘上检索到多少文件,我感到震惊。

仅填充1次“可用空间”是否有更大的安全性将0x00或38倍与不同的反常标准进行比较,是更多的学术讨论。 1996年开创性的关于粉碎的论文的作者给自己写了一个结尾,说这对于现代硬件来说已经过时且没有必要了。没有记录在案的数据被物理替换为零并随后恢复的情况。某些文件系统保留特殊用途的空间,而不能将其作为“可用空间”使用。但是您的数据可能在那里。其中包括照片,个人纯文本电子邮件等。我刚刚搜索了reserved + space + ext4,并了解到我的home分区的5%是保留的。我猜这是photorec发现我很多东西的地方。结论:切碎方法不是最重要的方法,即使多次通过方法仍然可以将数据保留在原位。

在安装# tune2fs -m 0 /dev/sdn0之前,可以尝试一下。 (如果这将是重启后的根分区,请确保在卸载后运行-m 5-m 1。)

但是,仍然可能以某种方式保留一些空间。 br />唯一真正安全的方法是擦除整个分区,再次创建文件系统,然后从备份中还原文件。


快速方法(推荐)

从要擦除的文件系统上的目录运行:

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


花费的时间要长得多。

警告。如果您选择了偏执狂的方式,那么在此之后您仍然想要进行快速擦除,这不是偏执狂。纯随机数据的存在很容易检测且价格便宜,并让人怀疑它实际上是加密数据。您可能会因为不透露解密密钥而死于酷刑。对于现代硬件而言,这已经过时且不必要。

但是,如果您还有很多空闲时间,并且不介意浪费大量磁盘来写磁盘,那就可以了:

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


注意:这本质上等同于使用安全删除工具。


在编辑之前,本文是对David的重写。 Spillett的。 “ cat”命令产生一条错误消息,但是我无法在其他人的帖子上写评论。

评论


您可以在具有50名声望的其他人的帖子下发表评论。

– Gnoupi
2010年8月18日在9:44

在我的示例中,cat命令在运行结束时会给出“无空间”错误。如果有问题,可以通过将stderr重定向到/ dev / null来隐藏它。为了获得有用的进度指示,我通常使用pv而不是cat或dd进行此类操作。

– David Spillett
2011年6月15日12:09

...怀疑它实际上是加密数据。您可能会因为不透露解密密钥而死于酷刑。呵呵,这正是我的想法。我想这意味着我很偏执...

– Navin
2013年12月14日23:37

根始终能够使用保留的空间。因此,如果您以root身份进行零填充,那么您也将能够填充5%的保留空间; tunefs是不必要的。仍然可以想象文件系统的其他部分可能存在数据。

– Nate Eldredge
16 Jul 29'20:32



@NateEldredge是否有任何资料表明以root身份运行dd可以比没有root的dd访问更多的文件系统?我想相信这是真的,但目前尚无理由。

–普罗米修斯
19年1月24日在1:42



#4 楼

至少在Ubuntu中至少有一个Zerofree实用程序: >
也请检查此链接有关zerofree的问题:保持文件系统映像稀疏-来自作者-Ron Yorston
(2012年8月9日)

评论


重要的是,必须卸载文件系统或将其只读安装,以使Zerofree正常工作。

– AntonioK
16年8月25日在12:24

最好包含一些有关如何在根文件系统上执行此操作的信息。我的感觉是,这是行不通的,因为您必须卸载文件系统,同时从该文件系统运行该工具。

– Ant6n
17年3月16日在20:30

这也是CentOS附带的

– davidgo
18年11月28日在4:49

#5 楼

这是使用GUI的方法。


通过单击“应用程序”-“系统工具”-“ BleachBit以管理员身份”,以根用户身份运行安装BleachBit


在偏好设置,告诉它您想要的路径。通常,它们猜得很好。您要为每个分区包括一个可写路径。通常是/ home / username和/ tmp,除非它们是同一分区,在这种情况下,只需选择一个即可。
选中“系统-清除可用磁盘空间”框。
单击“删除”。

当磁盘最终已满时,BleachBit比dd先进(否则非常好),BleachBit将创建小的文件来擦除inode(其中包含文件名等元数据)。

评论


检查Bleachbit的开源python代码,以清除驱动器中的自由空间。

–shadowbq
13年1月14日在15:18

#6 楼

以最高速度擦拭驱动器。

如今典型的加密驱动器说明将告诉您先擦拭驱动器。

以下命令将用AES密文填充驱动器。

如果需要擦除主引导驱动器,请使用实时CD。

打开终端并提升特权:

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}


我为之如此之快而感到震惊。

#7 楼

我使用dd分配一个或多个大文件来填充可用空间,然后使用安全删除实用程序。

要使用dd分配文件,请尝试:

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


这将生成一个名为delete_me的文件,大小为100 MB。 (此处bs是设置为1k的“块大小”,count是要分配的块数。)然后在文件上使用您喜欢的安全删除实用程序(我一直在使用shred

但是请注意:缓冲意味着即使您处理整个磁盘,也可能无法获得所有内容!


此链接免费推荐scrub空间擦拭。还没试过。

评论


哦,如果内存为我服务,我尝试擦洗一次,它破坏了整个文件系统。幸运的是,我有一种先在测试文件系统上进行实验的感觉,而不是在我的真实数据上进行实验。

–landroni
14年8月30日在16:33

#8 楼

您可以使用安全删除程序包擦除可用空间。

在该程序包中,您可以找到sfill工具,该工具旨在以安全的方式删除介质上可用磁盘空间上的数据,而这是无法删除的。被小偷,执法部门或其他威胁恢复。

要在Linux(Ubuntu)中安装安全删除软件包,请通过以下命令进行安装:

$ sudo apt-get install secure-delete


然后要擦除您的数据没有可用空间,请尝试以下命令:擦拭可用空间。

阅读http://manpages.ubuntu.com/manpages/hardy/man1/sfill.1.html上的手册

#9 楼

使用dd并将可用空间调零。这是一个神话,数据需要多次重写(问彼得·甘特曼)和随机数据,而不是1则0意味着不自然的活动。那么最终结果是一个干净的驱动器,而花费的时间更少。此外,安全的删除程序无法保证它们甚至会覆盖现代文件系统上的实际文件(已日记)。帮自己一个忙,得到photorec,扫描驱动器以查看混乱,用1和零(可选)将其擦拭,以使其看起来平整。如果photorec仍然找到东西,请记住它正在扫描可用的所有东西,因此请以root用户再次仔细执行此操作。

请记住,cia / fbi / nsa没有能读取您实际状态的高档机器。磁性媒体位。那只是很久以前写的一篇论文。一个“假设”。
您只需擦拭1次。

评论


您刚才说的有趣的事情很少,但是您实际上有任何资源可以支持此信息吗?很难相信所有的覆盖都是没有用的。另外,请改善您的帖子,这样的标点符号很难阅读。

–gronostaj
13年5月25日在21:14

@gronostaj:现代驱动器的“这是一个神话,数据需要被多次重写”,至少已被多项研究证明。正如作者本人所承认的那样,不再需要Gutmann推荐的所有30+次通过。

–卡兰
13年5月25日在23:47



#10 楼

更容易使用scrub:

scrub -X dump


这将在当前位置创建一个dump文件夹并创建文件,直到磁盘已满。
您可以选择带有-p选项(nnsa|dod|bsi|old|fastold|gutmann)的模式。安装scrub并不容易(请参见Ubuntu论坛),但是一旦安装完成,您将拥有一个非常简单高效的工具你的手。

评论


如果内存对我有帮助,我会尝试一次擦洗,它会损坏整个文件系统。幸运的是,我有一种先在测试文件系统上进行实验的感觉,而不是在我的真实数据上进行实验。

–landroni
14年8月30日在16:35

不知道您做了什么或发生了什么,但是scrub基本上会创建新文件,直到它填满文件系统。它不会与现有文件一起播放,也不会删除其中的任何文件(至少不是我给出的命令)...

–FMaz008
2014年8月31日19:33

确实。尝试使用-X dump_dir进行清理,它似乎运行良好。顺便说一句,在Ubuntu 14.04上安装非常简单:apt-get install scrub。

–landroni
2014-09-12 21:02



#11 楼

这是我使用的“ 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'


#12 楼

您可能已经在系统上安装了GNU coreutils软件包。它提供了命令shred。

评论


切碎不会清除未使用的磁盘空间,除非先将其放入文件中...

– dmckee ---前主持人小猫
09年8月7日在15:22

#13 楼

我找到了一个适用于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大小。

#14 楼

我有时会使用这种bash一线式软件: />
它可以在任何系统上运行,不受文件大小限制。
忽略任何zero.*错误。

#15 楼

这不是答案!只是对那些希望使用pv的人的评论...所以不要打扰投票。

在Linux Mint 17.3上,您可以使用pv(管道视图)来获得写作的进度。
例如:

# 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和不断更新的数据速率。缺点是它写在一行上,并且在磁盘已满(返回错误)时消失。发生这种情况是因为整个大小是近似值,因为在进行这种非常长的操作时,OS可能会使用磁盘,尤其是在OS卷上。

在一个非常旧的HD上,使用/dev/urandom可获得大约13 MB / s的数据速率,而使用/dev/zero可获得大约70 MB / s的数据速率。当使用原始ddcat而不是pv时,这可能会进一步改善。

#16 楼

一旦文件脱离了文件系统的记录,硬盘上剩余的数据就毫无意义地由1和0组成。如果您要用另一个无意义的序列替换该无意义的序列,我可以建议一些商用产品来安全擦除驱动器,例如arconis。

评论


以前文件内容的连续块仍保留在磁盘上,如果直接检查原始磁盘数据,则绝不是毫无意义的。

– Alex B
09年8月7日在0:04