mit*_*mit 51 virtualization windows zero-fill
如何在 Windows 上零填充虚拟磁盘的可用空间以获得更好的压缩?
我想要一个简单的开源工具(或至少免费)。它可能应该写一个尽可能大的文件,0然后将其删除。仅通过一次(这不是出于安全原因而是出于压缩目的,我们正在备份虚拟机)。
应该从 Windows 内部运行,而不是从磁盘运行。
在 Linux 上,我这样做(作为用户):
cd
mkdir wipe
sudo sfill -f -l -l -z ./wipe/
Run Code Online (Sandbox Code Playgroud)
编辑 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
Run Code Online (Sandbox Code Playgroud)
这是一个旧版本。我在第二次调用中使用了 -c 开关,这非常快(语法仅对 V1.6 之前的旧版本有效):
c:\>sdelete -c c: (OUTDATED!)
Run Code Online (Sandbox Code Playgroud)
我的印象是这符合我的要求。sdelete 工具易于使用且易于获取。
编辑 2:正如 scottbb 在下面的回答中指出的那样,该工具(1.6 版)在 2011 年 9 月进行了更改,-c 和 -z 选项的含义发生了变化。从 1.6 开始的正确用法是
c:\>sdelete -z c:
Run Code Online (Sandbox Code Playgroud)
编辑 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 等上,这需要单独回答。
Zor*_*che 51
在 Windows 上,使用 sysinternals 工具sdelete将所有空白空间清零。您想要的命令如下所示sdelete -z c:。
用法:sdelete [-p 通过] [-s] [-q] ... sdelete [-p 通过] [-z|-c] [驱动器号] ... -a 删除只读属性。 -c 清理可用空间。 -p pass 指定覆盖次数(默认为 1)。 -q 不打印错误(安静)。 -s 或 -r 递归子目录。 -z 零可用空间(有利于虚拟磁盘优化)。
对于 Linux,我建议您使用zerofree。
Dav*_*žic 19
Windows 已经有一个内置的命令行工具可以执行此操作:CIPHER。查看它的 /W 选项。
所以完整的命令是:cipher /w:c:( 替换c:用实际驱动器号 :)
(它将零写入未使用的空间,然后是 0xff,因此您必须观察它并在它开始写入 0xff 时使用 ctrl-c 停止它 - 不理想,但它是免费的,并且至少从 XP 开始已经在 Windows 中可用)
fsutil不是开源的,但与 Windows 一起提供,因此不需要任何额外费用。我用它来将空的 WD 250 GB 7200 RPM 驱动器上的可用空间归零 ( F:)。这是我从命令行运行的内容:
fsutil volume diskfree f:
Run Code Online (Sandbox Code Playgroud)
其中显示了这份报告:
Total # of free bytes : 249899469856
Total # of bytes : 249997291520
Total # of avail free bytes : 249899469856
Run Code Online (Sandbox Code Playgroud)
我Total # of avail free bytes在以下命令中使用了:
fsutil file createnew F:\clear 249899469856
fsutil file setvaliddata F:\clear 249899469856
fsutil file setzerodata offset=0 length=249899469856 F:\clear
del f:\clear
Run Code Online (Sandbox Code Playgroud)
写入 250GB 的零需要大约 4 个小时。
SDelete 不会将用于压缩虚拟磁盘的空间归零。SDelete 首先将可用空间归零,然后用 0xff 和随机字节填充它请参阅如何准备 Virtual Server 2005 虚拟硬盘文件以发送到 Microsoft 产品支持服务有关如何设置 VHD 以进行压缩
由于某些原因,Precompact.exe 可能很难找到。我在这里找到了一个单独的可下载副本。但是,如果您有 Windows 虚拟 PC,您也可以从 %programfiles(x86)%\Windows Virtual PC\Integration Components\Precompact.iso 获取它
小智 5
我也一直在寻找一种使用 Cipher 只写入 0x00 然后在开始将 0xFF 写入可用空间时退出的方法。这将允许压缩最大可用空间。我想出了以下基本的 PowerShell 作业
用所需的驱动器替换 d:\
Function CipherFreeSpace
{
$cipherjob = @()
$Job = start-job -ScriptBlock {cipher /w:d:\ }
while ($cipherjob -notcontains "Writing 0xFF")
{
Write-host "." -nonewline
Start-Sleep 2
$cipherjob += $job | Receive-Job
}
$Job | Stop-Job | Remove-Job -Force
}
CipherFreeSpace
Run Code Online (Sandbox Code Playgroud)
问候西蒙
| 归档时间: |
|
| 查看次数: |
74454 次 |
| 最近记录: |