sdelete -c 和 -z 有什么区别?

Fro*_*ame 31 windows virtualbox filesystems

我从这篇文章中学到了使用sdelete作为缩小 VDI 文件的步骤:

sdelete -c c:
Run Code Online (Sandbox Code Playgroud)

但是-c(帮助文本中描述的“清理可用空间”)是什么意思?它不是用零写入可用空间吗?还有呢-z(零可用空间)呢?sdelete -c 和 -z 有什么区别?

编辑

我尝试了之前文章中提到的步骤,但未能减小.vid文件大小。然后我关注了这个超级用户帖子,并将选项更改-c-z,并成功。

因此,它似乎-z将零写入可用空间,并-c写入其他内容(可能是随机位)。

Tho*_*ler 26

我认为这是一个常见的错误。也许 -z 选项在早期版本中不可用。SDelete 1.61 说

-z         Zero free space (good for virtual disk optimization)
Run Code Online (Sandbox Code Playgroud)

请注意,这样做会首先将您的硬盘扩展到完整大小。只有在VMWare 的收缩过程中,它才会再次变小。

在我的机器上进行快速测试:

-z took 1:01 minutes
-c took 2:11 minutes
Run Code Online (Sandbox Code Playgroud)

这表明 -z 只写入简单的零,而 -c 是擦除DoD 5220.22-M的军用标准,SDelete 网站上所写。

  • -c 和 -z 在 1.51 中的广告正好相反(我不知道这只是描述中的错误还是功能也被颠倒了)。显然,1.61 方式更有意义。 (2认同)

Ian*_*oyd 12

当前文档(和程序版本 2.01):

  • -c:清理可用空间。指定可供正在运行的系统使用的可选空间量。
  • -z零可用空间(有利于虚拟磁盘优化)。

但在旧版本中,它被颠倒了:

  • -c零可用空间(有利于虚拟磁盘优化)。
  • -z:清理可用空间。

在此处输入图片说明

但是他们做什么呢?

Clean创建最大的文件,并用随机数据填充它,然后用零填充它。这是大多数人认为的擦拭,这是矫枉过正。

不利的一面是,如果您正在使用虚拟磁盘,或者在虚拟机内部,或者在存储空间上运行它:底层存储系统将被迫分配资源来保存您的随机数据,然后将其保存为零。希望底层存储系统能够意识到刚刚分配给驱动器的所有空间都可以回收,因为所有这些扇区都只包含零。

-z零:简单地向所有扇区写入零。这是您想要的选项,原因有很多:

  • 用随机数据擦除是矫枉过正的(实际上不可能读取数据;即一次一点,尽管显微镜不可行)
  • 一些 SSD 可以检测到您正在向扇区写入,并可以使用它将扇区标记为空闲(类似于 TRIM)
  • 大多数虚拟存储系统(VMWare、Hyper-V、Windows 虚拟磁盘、存储空间)意识到您正在写入整个零扇区,并借此机会回收底层存储文件中的空间
  • SSD 不会知道您的最终目标本质上是一个美化的 TRIM,并且(如虚拟磁盘)被迫用非零填充已经包含零的扇区,只是让您再次用零填充它。这对您的 SSD 来说太糟糕了。

来源:挂载虚拟硬盘,观察sdelete在两种模式下的I/O操作。

tl;dr:使用 -z 零。它更快、更好、更安全。


LN2*_*LN2 9

这应该更恰当地作为对托马斯回答的评论发布,但由于我还不能这样做,我将其发布在这里。

混淆“-z”和“-c”选项可能是一个“常见错误”,因为多年来 SDelete 已经改变了所述选项的行为。查看下面提供的参考资料,似乎 SDelete 首先有一个“-z”选项,它执行“军用标准擦除”,然后添加了一个“-c”选项以将可用空间归零,然后在 v1.51 和 v1 之间的某个位置。 61 将该行为切换为当前行为。

参考:sysinternals.com 论坛Microsoft TechNet上的旧 SDelete 主页(通过 archive.org)。

  • 这_不是_对原始问题的回答。不过,请重新阅读帖子的第一行。如果有更好的程序可以将有用和/或相关信息添加到刚刚注册该服务的人的现有答案中,请随时启发我。 (4认同)