web-dev-qa-db-ja.com

圧縮率を上げるために、Windowsの仮想ディスクの空き領域をゼロで埋める方法は?

圧縮率を上げるために、Windowsの仮想ディスクの空き容量をゼロにする方法は?

そのためのシンプルなオープンソースツール(または少なくとも無料)が欲しいのですが。おそらく、0でいっぱいの可能な限り大きなファイルを書き込み、後で消去する必要があります。 1パスのみ(これはセキュリティ上の理由ではなく、圧縮のために仮想マシンをバックアップしています)。

ディスクからではなく、ウィンドウ内から実行する必要があります。

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

これは古いバージョンです。 2回目の呼び出しで-cスイッチを使用しましたが、これは非常に高速でした(構文はV1.6より前の古いバージョンでのみ有効です)。

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

これが自分のやりたいことをやっている印象です。 sdeleteツールは使いやすく、入手も簡単です。

編集2:scottbbが彼の回答で指摘したように、2011年9月にツール(バージョン1.6)が変更されました-cおよび-zオプション意味が変わりました。 1.6以降の正しい使い方は

c:\>sdelete -z c:

編集3:sdeleteとsdelete64の2.0バージョンがあります。ゼロにするとバグが発生するようです。非常に長い間、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:これで、動的に割り当てられた仮想ディスク領域の問題が発生しました。フルではなく、ホストで30GBしか使用しない100GBのディスクがある場合、ゼロ割り当ては動的割り当ての目的と矛盾するため、ディスクのサイズを劇的に増加させないでくださいOracle VM VirtualBoxの回答があります https://superuser.com/q/907196/44402 -しかし、VMWare、Xen、XenServerなどの他のスタックでは、これに回答する必要があります別々に。

46
mit

Windowsでは、sysinternalsツール sdelete を使用して、空のスペースをすべてゼロにします。必要なコマンドは次のようになりますsdelete -z c:

使用法:sdelete [-pパス] [-s] [-q] ... 
 sdelete [-pパス] [-z | -c] [ドライブ文字] ... 
-a読み取り専用属性を削除します。 
-c空き領域をクリーンアップします。 
-p pass上書きパスの数を指定します(デフォルトは1)。 
-qエラーを出力しません(静か)。 
-sまたは-r Recurseサブディレクトリ。 
-zゼロの空き容量(仮想ディスクの最適化に最適)。

Linuxの場合、 zerofree を使用することをお勧めします。

47
Zoredache

Windowsには、これを行う組み込みのコマンドラインツールであるCIPHERが既に用意されています。/Wオプションを参照してください。

したがって、完全なコマンドは次のようになります:cipher/w:c:c:を実際のドライブ文字に置き換えます)

(それは未使用のスペースに0を書き込んでから0xffを書き込むため、0xffを書き始めたら、それを監視してctrl-cで停止する必要があります-理想的ではありませんが、XP少なくとも)

19
David Balažic

fsutilはオープンソースではありませんが、Windowsに同梱されているため、追加料金はかかりません。空のWD 250 GB 7200 RPMドライブの空き容量をゼロにするために使用しました(F:)。これが私がコマンドラインから実行したものです:

fsutil volume diskfree f:

このレポートを示したもの:

Total # of free bytes        : 249899469856
Total # of bytes             : 249997291520
Total # of avail free bytes  : 249899469856

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

250GBのゼロを書き込むのに約4時間かかりました。

8
James L.

SDeleteは、仮想ディスクの圧縮用のスペースをゼロにしません。 SDeleteは、空き領域をゼロにすることから始まりますが、0xffで埋めてからランダムなバイトで埋めます。参照 Microsoft Product Support Servicesに送信するVirtual Server 2005仮想ハードディスクファイルを準備する方法 VHDのセットアップ方法圧縮用

Precompact.exeは、何らかの理由で見つけるのが難しい場合があります。別のダウンロード可能なコピー here を見つけました。ただし、Windows仮想PCがある場合は、%programfiles(x86)%\ Windows Virtual PC\Integration Components\Precompact.isoから取得することもできます。

6
Jim B

私も、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

よろしくサイモン

4
Simon Stevenson

VMwareを使用している場合は、VMwareに組み込まれているツールを使用して、仮想ドライブ上の未使用領域を再利用する方がはるかに良い方法です。

これを使用して、仮想ディスクのサイズを28ギガバイトから13ギガバイトに減らしました。あなたのマイレージは異なる場合があります。

sdelete -z c:を使用してみたところ、実際には仮想ドライブのサイズが最大サイズである30ギガバイトに増加しました。

VMwareのWebサイトおよび Compact a Virtual Hard Disk を参照してください。これはUsing VMware Workstation > Configuring and Managing Devices > Configuring and Maintaining Virtual Hard Disksの下にあります。

更新

GUIツールは、コマンドラインツールほど信頼性が高くない場合があります。 GUIツールが失敗する問題に遭遇しましたが、コマンドラインツールは問題なく動作します。 VMware Desktop 10のオプションは次のとおりです。

C:\Program Files (x86)\VMware\VMware Workstation>vmware-vdiskmanager -h
Diskname or some other argument is missing.
VMware Virtual Disk Manager - build 1895310.
Usage: vmware-vdiskmanager.exe OPTIONS <disk-name> | <mount-point>
Offline disk manipulation utility
  Operations, only one may be specified at a time:
     -c                   : create disk.  Additional creation options must
                            be specified.  Only local virtual disks can be
                            created.
     -d                   : defragment the specified virtual disk. Only
                            local virtual disks may be defragmented.
     -k                   : shrink the specified virtual disk. Only local
                            virtual disks may be shrunk.
     -n <source-disk>     : rename the specified virtual disk; need to
                            specify destination disk-name. Only local virtual
                            disks may be renamed.
     -p                   : prepare the mounted virtual disk specified by
                            the mount point for shrinking.
     -r <source-disk>     : convert the specified disk; need to specify
                            destination disk-type.  For local destination disks
                            the disk type must be specified.
     -x <new-capacity>    : expand the disk to the specified capacity. Only
                            local virtual disks may be expanded.
     -R                   : check a sparse virtual disk for consistency and attempt
                            to repair any errors.
     -e                   : check for disk chain consistency.
     -D                   : make disk deletable.  This should only be used on disks
                            that have been copied from another product.

これはディスクを縮小する例です。 GUIからの同じコマンドが失敗したにもかかわらず、このコマンドラインは機能しました。

C:\Program Files (x86)\VMware\VMware Workstation>vmware-vdiskmanager.exe -k
 "H:\VMware\WindowsXP.vmdk"
  VixDiskLib: Invalid configuration file parameter.  Failed to read configuration file.
  Shrink: 100% done.

VizDiskLibで始まるエラーメッセージは、VMware Desktop 10の新機能であり、無視しても問題ありません。

1
Contango

Google-upEraser 5.8.8 32-bitWindowsでも問題なく動作します= XP SP3