Windows

如何在 Windows 上將虛擬磁碟的可用空間歸零以實現更好的壓縮?

  • June 2, 2018

如何在 Windows 上將虛擬磁碟的可用空間歸零以實現更好的壓縮?

我想要一個簡單的開源工具(或至少是免費的)。它可能應該寫一個盡可能大的文件,0然後將其擦除。只有一次通過(這不是出於安全原因,而是出於壓縮,我們正在備份虛擬機)。

應該從 Windows 內部執行,而不是從磁碟執行。

在 Linux 上,我這樣做(作為使用者):

cd
mkdir wipe
sudo sfill -f -l -l -z ./wipe/

**編輯1:**我決定從接受的答案中使用sdelete 。我查看了 sdelete 的幫助:

C:\WINDOWS\system32>sdelete /?

SDelete - Secure Delete v1.51
Copyright (C) 1999-2005 Mark Russinovich
Sysinternals - www.sysinternals.com

usage: sdelete [-p passes] [-s] [-q] <file or directory>
      sdelete [-p passes] [-z|-c] [drive letter]
  -c         Zero free space (good for virtual disk optimization)
  -p passes  Specifies number of overwrite passes (default is 1)
  -q         Don't print errors (Quiet)
  -s         Recurse subdirectories
  -z         Clean free space

這是一個舊版本。我使用了第二次呼叫的 -c 開關,這非常快(語法僅對 V1.6 之前的舊版本有效):

c:\>sdelete -c c: (OUTDATED!)

我有這樣的印象,這是我想要的。sdelete 工具易於使用且易於獲取。

**編輯 2:**正如 scottbb 在下面的回答中指出的那樣,該工具在 2011 年 9 月發生了變化(版本 1.6) -c 和 -z 選項的含義發生了變化。從 1.6 開始的正確用法是

c:\>sdelete -z c:

**編輯 3:**有一個 2.0 版本的 sdelete 和 sdelete64。歸零時它們似乎有問題。它似乎會在很長一段時間內卡在 100%。有些人報告的時間要長 10 到 40 倍。舊版本 1.61 沒有這個問題。請參閱https://social.technet.microsoft.com/Forums/en-US/2ffb2539-34ba-4378-aa8a-941d243f117e/sdelete-hangs-at-100?forum=miscutils

編輯 4:現在有動態分配虛擬磁碟空間的問題。如果您有一個 100GB 磁碟未滿且僅在主機上使用 30GB,則零填充不應顯著增加磁碟的大小,因為這與動態分配的目的相矛盾Oracle VM VirtualBox https://superuser.com/q/907196/44402有一個答案- 但在 VMWare、Xen、XenServer 等其他堆棧上,這需要單獨回答。

在 Windows 上,使用 sysinternals 工具sdelete將所有空白空間清零。你想要的命令看起來像這樣sdelete -z c:

用法:sdelete [-p pass] [-s] [-q] ... 
sdelete [-p 通過] [-z|-c] [驅動器號] ... 
-a 刪除只讀屬性。 
-c 清理可用空間。 
-p pass 指定覆蓋次數(預設為 1)。 
-q 不列印錯誤(安靜)。 
-s 或 -r 遞歸子目錄。 
-z 零可用空間(有利於虛擬磁碟優化)。

對於 Linux,我建議您使用zerofree

Windows 已經有一個內置的命令行工具可以執行此操作:CIPHER。查看它的 /W 選項。

所以完整的命令是:cipher /w:c: (將*c:*替換為實際的驅動器號)

(它將零寫入未使用的空間,然後是 0xff,所以當它開始寫入 0xff 時,您必須觀察它並使用 ctrl-c 停止它 - 不理想,但它是免費的,並且至少從 XP 開始在 Windows 中已經可用)

引用自:https://serverfault.com/questions/165070