我有一个由 ZFS 处理的文件系统,大约 8 GB。
我试图通过运行将文件系统归零:
dd if=/dev/zero of=/EMPTY bs=1M | true
rm -f /EMPTY
Run Code Online (Sandbox Code Playgroud)
通常在 ext4 文件系统上,它会在几秒钟内完成。
但这一次它只是继续前进。
我能够启动第二个终端并查看其大小/EMPTY
。运行后ll -h
,它说/EMPTY
是800 GB!显然 800 GB 不适合 8 GB。
此外,通过运行df -h
,它表明文件系统没有被填满。
然而,dd 消耗了 50% 的 CPU 等,使我的笔记本电脑升温。我假设它做了很多工作,但一无所获。
那么为什么 dd 永远运行创建一个不占用任何大小的文件?在 ext4 上,它意味着完成并给我一个错误,以便我可以继续。
我不知道你想要达到什么目的,所以我只能描述你的命令实际上在做什么。
dd if=/dev/zero
Run Code Online (Sandbox Code Playgroud)
您正在从一个特殊设备读取,该设备返回无限数量的零(或 NUL)字节。
of=/EMPTY
Run Code Online (Sandbox Code Playgroud)
您正在使用上述(无限)输入创建一个新文件。
bs=1M
Run Code Online (Sandbox Code Playgroud)
您以兆字节块为单位读写无限数据流。您永远不应该做这样的事情,因为您可能会填满文件系统,而许多工具无法应对这种情况。当ext4文件系统被有效填满并且命令结束时,压缩文件系统能够积极地压缩零字节流。
| true
Run Code Online (Sandbox Code Playgroud)
这是无稽之谈,因为dd
withof=
没有任何输出。您可能打算|| true
消除 的状态代码,dd
但这无论如何都不是很有用,因为单个命令失败不会杀死整个脚本。
的一种典型用途dd if=/dev/zero
是将整个设备归零,例如/dev/sdb
。正如另一个答案中所述,您可能想shred
改用。在这两种情况下,您都希望将系统中显示的整个系统分区称为块设备,而不是单个文件(可能不再存在)。有很多关于 linux 块设备和手册页的书籍和在线资源shred
,dd
它们也非常有用。
当您删除一个文件时,它的块立即可用。您不需要执行任何黑魔法。如果您想清除文件内容以防止取证技术,只需使用schred --delete
删除文件而不是正常删除。清除已删除文件的块并不容易,您不能简单地依赖创建一个大的空文件。您需要一个专门的文件系统特定工具来安全地执行此操作。
归档时间: |
|
查看次数: |
1179 次 |
最近记录: |