为什么 dd 在 8 GB 驱动器上永远运行

为什么 dd 在 8 GB 驱动器上永远运行

我有一个由 ZFS 处理的文件系统,大约 8 GB。

我尝试通过运行以下命令将文件系统清零:

dd if=/dev/zero of=/EMPTY bs=1M | true
rm -f /EMPTY

通常在 ext4 文件系统上,它会在几秒钟内完成。

但这一次它只是继续下去。

我能够启动第二个终端并查看其大小/EMPTY。运行后ll -h,显示/EMPTY是800GB!显然800GB不适合8GB。

此外,通过运行df -h,它表明文件系统没有被填满。

然而 dd 消耗了 50% 的 CPU.. 等等,使我的笔记本电脑发热。我假设它做了很多工作但一无所获。

那么为什么 dd 会永远运行并创建一个不占用任何大小的文件呢?在 ext4 上,它应该完成并给我一个错误,以便我可以继续。

答案1

我不知道你想要实现什么,所以我只能描述你的命令实际上在做什么。

dd if=/dev/zero

您正在从一个特殊设备读取数据,该设备返回无限数量的零(或 NUL)字节。

of=/EMPTY

您正在使用上述(无限)输入创建一个新文件。

bs=1M

您可以以兆字节块的形式读取和写入无限数据流。你永远不应该做这样的事情,因为你可能会填满文件系统,并且许多工具无法应对这种情况。虽然外部4文件系统被有效填满并且命令结束,压缩文件系统能够积极压缩零字节流。

| true

这是无稽之谈,因为ddwithof=没有任何输出。您可能打算中|| true和 的状态代码,dd但这并不是很有用,因为单个命令失败不会杀死整个脚本。

的一种典型用途dd if=/dev/zero是将整个设备归零,例如/dev/sdb.正如另一个答案中所述,您可能想改用shred。在这两种情况下,您都希望将系统中呈现的整个系统分区称为块设备,而不是单个文件(可能不再存在)。有很多关于 linux 块设备的书籍和在线资源以及 的手册页,shreddd非常有用。

当您删除文件时,其块立即可用。你不需要施展任何黑魔法。如果您想清除文件的内容以防止取证技术,只需使用schred --delete删除文件而不是普通删除即可。清除已删除文件的块并不那么容易,您不能简单地依赖于创建一个大的空文件。您需要一个专门的文件系统特定工具来安全地完成此操作。

答案2

您正在遇到 ZFS 的压缩问题。如果您试图清除文件系统,那么您不能在 ZFS 中这样做。如果您尝试清除底层磁盘,最好的办法是在 zfs 池上使用“zpool destroy”,然后在物理设备本身上使用 dd。 (“dd if=/dev/zero of=/dev/....”)。完成后,只需使用 zpool create 重新创建池。

答案3

我不知道,ZFS但如果您的目的是将文件系统归零,那么dd我会建议 撕碎

我没有回答为什么 dd 处于无限循环中,但你的最终目标已经解决

相关内容