在不破坏文件系统的情况下将硬盘内容清零

在不破坏文件系统的情况下将硬盘内容清零

我从一台老人用过的旧电脑上复制了很多照片到外置硬盘上,这台电脑可能被恶意软件感染了。我把这些照片放到了另一块硬盘上。现在我的外置硬盘已经完全空了,但我很担心,我想确保硬盘上没有任何恶意软件或恶意代码。

所以我想用零填充它,但不要破坏文件系统或分区表。在某种程度上,我想找回我的磁盘,就像我刚买的一样。

可以这样做吗?有没有 Linux 命令可以做到这一点?

我的硬盘采用 NTFS 格式,带有 msdos(mbr)分区表。

答案1

简单回答:

mount /dev/your/disk /some/free/mountpoint
dd if=/dev/zero of=/some/free/mountpoint/zero bs=512
sync # See edit below
rm /some/free/mountpoint/zero
umount /some/free/mountpoint

这将完全按照您的要求进行操作:用零覆盖文件系统中文件可用的所有空间。

更复杂的答案:

  • 如果不清除 MBR,你就不能确定你没有感染 MBR 病毒
  • 空文件系统没有价值

因此我建议你直接删除该设备(即清零该设备,包括 MBR 和文件系统),然后重新创建分区表并mkfs.ntfs -f -L LABEL -I

编辑

正如 @Nyos 在评论中指出的那样,如果 NTFS 驱动程序未挂载同步(我不知道默认值),则最好sync在 之前插入一个额外的内容rm。当前版本(截至 2020-05-02 完全修补的 Ubuntu 18.04)没有延迟块分配,因此sync不是严格必要的,因为所有分配的块都将写出umount,但我们也不知道未来,我也没有阅读完整的源代码。

同样要注意的是:如果 NTFS 驱动程序一旦获得稀疏文件支持,我们可能需要使用/dev/urandom而不是/dev/zero避免(几乎)无休止的写入。

答案2

虽然这根本没有回答你的问题......尽管如此:

首先,将磁盘清零是一个非常非常糟糕的主意。对于“传统”磁盘来说确实如此,对于固态磁盘更是如此。将磁盘清零很简单(只需创建一个文件并填充它,Eugen Rieck 给出了确切的方法),但它需要很长时间并且会磨损磁盘。在任何类型的硬盘上,写入周期都不是无限的。
另外,请注意,您甚至无法保证覆盖确实按预期工作。对于您的目的,差异不会很明显,但对于其他目的(例如机密数据的安全擦除),这种方法完全不可靠。这是因为由于磨损均衡和重新分配,您完全无法知道覆盖某些内容时会发生什么。驱动器会做很多事情,而没有人(包括操作系统!)知道甚至没有办法告诉,更不用说改变。例如,如果由于控制器对重试次数、CRC 或其他原因不满意而重新分配了某个扇区,那么您可以继续做任何您想做的事情,只是您再也无法访问该扇区了。再也不会了。然而,数据或数据剩余的部分(您无法知道)仍留在那里,潜在的窃贼可以读取它。

其次,在完全偏执模式下操作时,保留文件系统(和 MBR)是一个非常非常糟糕的主意,尤其是在磁盘“空”时。除了文件系统的 UUID 之外,只需创建一个新文件系统(可以说在某些情况下会有点麻烦,不过这也很容易修复)。不过,您可以确定在您意想不到的地方(例如 MBR)没有留下任何内容。

第三,清空并重新使用实际上根本不是空的“空”文件系统是个坏主意。从性能方面来看,如果您可以直接从头开始创建一个新的 FS(没有过时的更改日志条目、不可见项、被遗忘的流、属性、碎片化的 MFT......),那么这样做会很糟糕。从头开始重新创建所有内容不仅更安全,而且速度更快,并且很可能会提高整体性能。

总结

大多数设备都有专用的安全擦除或“恢复出厂设置”选项(相同),由随附的管理工具支持,或通过标准 ATA 命令由其他工具支持。驱动器将使用最有效、破坏性最小的方法(有些驱动器确实会覆盖整个磁盘,因为缺乏真正支持该功能,但大多数驱动器只会转储加密或位加扰密钥,无论磁盘大小如何,它几乎可以立即起作用)。

hdparm几乎每个 Linux 发行版上都有现成的选项,并且都有--security-erase用于此目的的选项。

这将为您提供一个磁盘“就像刚买的一样”除了已经使用了一段时间之外。它将以最快(在技术上可行的范围内)和最少的磁盘消耗方式执行此操作。之后,对其进行分区并创建文件系统,就完成了。

相关内容