圧縮率を高めるために、Windowsの仮想ディスクの空き領域をゼロで埋めるにはどうすればよいですか?


46

圧縮率を高めるために、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:今、動的に割り当てられた仮想ディスクスペースの問題があります。100GBのディスクが満杯でなく、ホストで30GBしか使用していない場合、ゼロの割り当ては動的割り当ての目的と矛盾するため、ディスクのサイズが劇的に増加することはありませんOracle VM VirtualBox https://superuser.com/q/907196/44402に対する回答がありますが、VMWare、Xen、XenServerなどの他のスタックでは、個別に回答する必要があります。


2
sdeleteはジョブに適したツールですが、ツールへの2011年9月の変更(バージョン1.6)により、上記の回答が不正確になります。-cおよび-zオプションの意味を変更しました。現在の正しい使用法はsdelete -z c:\
-scottbb

また、同じ基本インストールに基づくマシンが多数ある場合は、COW(コピーオンライト)スタイルのイメージを使用してください。
マット

回答:


46

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

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

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


VHDを圧縮するためにここに来ました。TechNetからの関連リンクの共有。technet.microsoft.com/ en-
ファイズ

Linuxの標準暗号化ドライブLUKS dm-cryptにゼロフィリングがプラスの影響を与えるかどうかは疑問です。マシン全体をclonezillaブートスティックから起動し、ドライブ全体の物理バックアップを行うに。—暗号化内のゼロ化されたセクションは、外部ディスク上のゼロ化されたセクションにつながりますか?それとも、セキュリティ上の理由でノイズを割り当てますか(未割り当て)?または、(暗号化されたコンテンツを見ていない)rawマウントされた暗号化ドライブをゼロにする必要がありますか?(そして、それは良いアイデアです。つまり、暗号化されたドライブのコンテキストで信頼できるアロケーションテーブルですか?)
フランクノック

nullを暗号化し、暗号化された「ノイズ」をディスクに書き込む以外のことをした場合、私はショックを受けるでしょう。
ダンプリッツ

15

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

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

(未使用のスペースにゼロを書き込み、次に0xffを書き込むため、0xffの書き込みを開始するときにctrl-cで停止する必要があります-理想的ではありませんが、少なくともXP以降はWindowsで既に利用可能です)


3
興味深いアプローチ。すべてのゼロの取り消しを開始する直前に実行を中断します。既に存在するツールを使用した創造的なソリューションのために+1!
PsychoData 14年

私は...それはそれは、完成書き込みゼロだときを検出し、それを中止することが可能だだろうか
フレデリック・ノール

SSDハードドライブを使用する場合は、TRIMが有効になっていることを確認してください。その後、未使用のブロックはすべて、ハードドライブファームウェアによって0xFFパターンですぐに消去されます。これは、仮想サーバーで作成された仮想ディスクイメージで非常に便利です。そのイメージはギャップとして埋められ、ホストファイルシステム上のファイルシステムブロックを解放します。
ズニック

これは非常にうまく機能し、SDelete -z(他のフィードバックを一切与えずに100%で動かなくなった)よりもずっと高速でした。
サイコウッド

6

SDeleteは、仮想ディスクの圧縮のためのスペースをゼロにしません。SDeleteは、空き領域をゼロにすることにより開始したが、その後は0xffでそれを埋め、その後、ランダムバイトを参照してください、マイクロソフト製品サポートサービスに送信するためのVirtual Server 2005の仮想ハードディスクファイルを準備するためにどのような圧縮のためのVHDを設定する方法については

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


2
-cオプションを指定したsdeleteはゼロフィルです。おそらく、ゼロのみのオプションがないWindows組み込みの暗号化ユーティリティを考えているのでしょうか?
ジェレミーM

「SDeleteは、国防総省のクリアおよびサニタイズ標準DOD 5220.22-Mを実装しています」(ドキュメントから)これは、特にクラスターを単に0にしないわけではありません。sdelete -cは空き領域をゼロにします(それを埋めた後)が、sdeleteが使用する方法はプリコンパクトと同じではなく、多くの場合、仮想ドライブをゼロにするように設計されたプリコンパクトよりも大きなドライブになります
Jim B

これは、別のツールを知って興味深いです。ありがとう
MIT

2
SDeleteはディスクに0を残すことができますが、プリコンパクトははるかに高速に動作し、このような状況を想定していました。
クリスS

2
@romkyns WindowsおよびHyper-Vのすべての最新バージョンtrim(Win7およびHyper-V 2012)がサポートされているため、圧縮する前にゼロにする必要はありません。PreCompactユーティリティは、削除されたファイルでディスクの一部のみをゼロ化し、使用されたことのない部分はそのまま残されました。のようなものを使用するsdeleteと、ダイナミックディスクが静的サイズになり、実際に使用されるサイズまで圧縮して戻すことができます。
クリスS 14

6

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時間かかりました。


3

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

よろしくサイモン


1

VMwareを使用している場合は、VMwareに組み込まれているツールを使用して、仮想ドライブの未使用スペースを再利用することをお勧めします。

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

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

VMware社のWebサイトを参照してくださいとコンパクトに仮想ハードディスクの下にあります、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
sdelete自体は、vmdkサイズを縮小するためのものではありません。縮小操作の準備で、使用可能なすべての空き領域をゼロに変換するために使用されます。これを行わないと、削除されたファイルや他の孤立したデータがディスクに残ります。VMWareツールは、これらのファイルがまだ占有しているディスク領域を常に再利用できるとは限りません。これらの「削除されたファイル」をゼロにすると、縮小ツールを実行したときにディスク容量が完全に回収可能になります。仮想ディスク上のファイルサイズが増加したのは、sdeleteが使用可能なすべてのスペースをゼロで埋めているためです。
レオンルカルディ

これを明確にしてくれてありがとう。ツールの命名時の改善や、ツールを実行したときに何が行われるかを1行で説明することで、ツールが恩恵を受ける可能性があると考えています。
コンタンゴ


-1

ミット、

Simonのpowershellスクリプトは、sdeleteのバージョン管理の問題を発生させることなく、必要なことを正確に実行することがわかりました。(異なるバージョンで異なることを行うスイッチ)

1つの問題がありました。その暗号は実行され続けていましたが、私はそれを修正しました。

一時フォルダーをクリーンアップするために、さらにスクリプトを変更しました。

両方の場所でF:\をドライブ文字に置き換える必要があります。

Function CipherFreeSpace
{
    $cipherjob = @()
    $Job = start-job -ScriptBlock {cipher /w:F:\ }
    while ($cipherjob -notcontains "Writing 0xFF")
    {
        Write-host "." -nonewline 
        Start-Sleep 2
        $cipherjob += $job | Receive-Job 
    }
    Stop-Process -processname cipher
    Start-Sleep -s 3
    Remove-Item -recurse F:\EFSTMPWP
    $Job | Stop-Job | Remove-Job -Force
}
CipherFreeSpace

-4

Windowsに必要なものがすべて含まれているのに、「無料」でできるだけ早くサードパーティのツールを使用する理由:

1)format X: /fs:XXXX /p:#ここで、Xドライブレターです。XXXXは、ファイルシステムでも、#パスでもあります。

2)DISKPARTのcleanコマンド:http://technet.microsoft.com/library/cc766465.aspxhttp://support.microsoft.com/kb/300415

ちなみに、単一のパス以上は必要ありません-そうでなければ、主張は、時代遅れのディスクの赤/書き込み戦略、製品をプッシュする人々、パラノイア駆動、または「専門家のアドバイス」として渡されるbsの古い情報です。

編集:nvm、空き領域の一部が見つかりません...


1
多くの場合、良い仕事や良い仕事をする、インストールが簡単、または信頼性の高いサードパーティ製のツールが利用可能です。しかし、これは完全にOTであり、問​​題は誰がそれを書くかではありませんでした。これとは別に、MicrosoftはSysinternals(SSDeleteを書いた)を買収しました。彼らは組み込みのものよりも光年が良かったからです。ただ、MS製品に「タスクマネージャ」をProcessExplorerを比較-1 flamewarを開始するために
Alojzヤネス・

あなたは質問で「オープンソース」要件を逃しましたか?
アロイスジャネス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.