ブログパーツ Twitter

« 痛恨、福ちゃんの誕生日を忘れてた! | トップページ | Win8コンシューマープレビューをVirtualboxにインストールしてみたけれど »

2012.03.04

Virtualboxの仮想HDDファイル(vmdk)のサイズを縮小する

このところ天気悪い日が多くて気分も下降気味です。
いろいろ見に行きたいところもあるし、早く天気のいい季節になってほしいなあ。


----------
2月29日に、Windows 8 のコンシューマープレビュー版が公開されました。
 
あくまで「開発途中」のバージョンなので、Virtualbox の仮想PC としてインストールを考えたのですが、仮想PC を入れている実PC のドライブの残り容量が少々苦しくなってきています。
(インストールには16GBの空きが必要(32ビット版の場合)。)
 
なので現在の仮想PC の仮想HDD ファイルを圧縮( shrink )してサイズを減らし、空きを増やすことにしました。
 
仮想HDD の圧縮手順は、ものすごく簡単に説明すると、以下の通りになります。
 
1.仮想HDD ファイル中の、実際には使用されていない領域を0クリアする。
2.圧縮ツールを使用して、0クリアされた部分をカットする。
 

今回の作業環境は以下のとおりです。
ホストPC: Windows 7 Home Premium SP1
ゲストPC1: Ubuntu 11.10
ゲストPC2: Windows 7 Home Premium SP1
 

以降の操作をする前に、念のために対象の仮想HDD ファイルのバックアップを取っておいて下さい。
また、スナップショットは全て解除しておいて下さい。


まずは「1」です。
 
Ubuntu 仮想PC については dd コマンドで0クリアできます。
$ dd if=/dev/zero of=zero bs=4k; \rm zero
 
Windows 7 仮想PC ではそうはいきません。
と思っていたら、Microsoft が0クリアに使用できるツール「sdelete」を公開していました。
以下からダウンロードできます。 ※仮想PC 側で操作して下さい。
SDelete - Windows Sysinternals
 
sdelete の使用方法ですが、「sdelete -z [ドライブ文字]」ということで「sdelete -z c:」でいいはずなのですが、どうしてもエラーが出ます。
「sdelete -z c」「sdelete -z C:」「sdelete -z C」なども試したがダメだったので、0クリアしたいドライブをカレントドライブにしてドライブ指定なしの「sdelete -z」を実行する方法で乗り切りました。
・3/31 追記
「sdelete -z c:/」「sdelete -z c:\」でドライブ指定できることを確認しました。
コメントで教えてくださったピヨヒコさん、どうもありがとうございます。

・2014年5月11日 追記
「"sdelete -z c:"でいけた」という情報をコメント欄にいただきました。
当方でも sdelete の最新版でテストして確認できました。
教えてくださったカラスの白昼夢さん、どうもありがとうございます。


つぎに「2」です。
 
> 2.圧縮ツールを使用して、0クリアされた部分をカットする。
と、こう書けば簡単そうですが、一つ問題が。
Virtualbox に標準で備わっている圧縮ツールは、私の使用している仮想HDD ファイルには使用できないのです。
 
どういうことかというと、Virtualbox の仮想HDD の標準のファイル形式は「.vdi」なのですが、私はもともと VMware から始めたこともあり、VMware の標準ファイル形式である「.vmdk」を使用しています。
(Virtualbox は .vmdk ファイルも使用できる。)
Virtualbox に備わっている仮想HDD 圧縮ツールは、.vdi 形式には対応していますが、.vmdk 形式には対応していないようなのです。
 
いろいろ調べた結果、VMware Server に付属のツール「vmware-vdiskmanager」を使用すると、ホストPC のコマンドラインから .vmdk ファイルを圧縮可能とわかりました。
 
VMware Server の取得は以下のページから行います。 ※ホストPC 側で操作して下さい。
VMware Server 2 - vmware ※注:ユーザー登録が必要です。
 
ホストPC にインストールします。
vmware-vdiskmanager は標準で「C:\Program Fires\VMware\VMware Server\」下にあります。
(Windows にインストールした場合。)
 
コマンドプロンプトを「管理者として実行」で起動して、以下のコマンドを実行します。
> vmware-vdiskmanager -k (.vmdkファイルへのパス)


さて圧縮の結果です。
 
まずは Ubuntu 。
 
処理前後のサイズ(Ubuntu)
(赤が処理前、青が処理後のサイズです。) ※処理前はバックアップのサイズです。
 
「ubuntu_1004.vmdk」が root、「ubuntu_home.vmdk」が home ファイルシステム用です。
home の方はサイズが小さくなっていますが root はほとんど変わっていません。
これは0クリアのコマンドが home 側でのみ有効な処理だったためと思われます。
後日コマンドを工夫して root 側も縮小させてみるつもりです。
 
続いては Windows 。
 
処理前後のサイズ(Windows)
(赤・青の別は Ubuntu と同じ。)
 
「windows_c.vmdk」が Cドライブ、「Windows 7-2.vmdk」が Eドライブ用です。
(光学ドライブを Dドライブにしている。)
Cドライブのファイルは単一で、Eドライブは分割ファイルになっていますが、どちらもサイズが小さくなっています。


結論:仮想PC 2つを余裕で動かせるくらいのスペックの PC が欲しい


・追記
仮想PC が Windows だけであるならば、圧縮用のツールとして「NHC」が使用できます。
NHC - eueeのおうち

本来は仮想HDD 形式を他形式に変換するためのソフトです。
(対応形式: .vmdk .vhd .vdi .hdd .qcow 等)

圧縮について、サイトの記述によると「ゲストOS上での0埋めは必要ありません」とのことなので、こちらの方が簡単そう。
対応しているファイルシステムが NTFS,FAT,ext2 とのことなので、ext4 の Ubuntu には使えません。残念!


・3/11 追記
Ubuntuの root ファイルシステム側の縮小を行いました。
その結果、先の画像にあった「11,962,112 KB」から、
7,024,512 KB
と大きくサイズを減らせました。
ちなみに0クリアコマンドは以下のとおり。
$ sudo dd if=/dev.zero of=/tmp/zero bs=4k
$ sudo rm /tmp/zero

(1行で書こうとして失敗して、2行に分けました。)

« 痛恨、福ちゃんの誕生日を忘れてた! | トップページ | Win8コンシューマープレビューをVirtualboxにインストールしてみたけれど »

コメント

【sdelete -z c:/】でいけると思います

ピヨヒコさん、コメントありがとうございます。
確認しました。「sdelete -z c:/」「sdelete -z c:\」のどちらでもOKでした。
本文の方にも追記をつけたいと思います。
ありがとうございました。
※記事内に追記しました。

vmdkが肥大してきたので、ダイエットさせようと試みているものです。
sdeleteですが、私の環境(ゲスト:Windows XP SP3 Home)だと、
[sdelete -z c:\]だと「ドライブレターが認識できない、d:のように書け」みたいなエラーが出て、
[sdelete -z c:]で実行できました。
2年のうちに一部変更されたのかもしれませんね。

カラスの白昼夢さん、コメントありがとうございます。
 
> 私の環境(ゲスト:Windows XP SP3 Home)だと、
> [sdelete -z c:\]だと「ドライブレターが認識できない、d:のように書け」みたいなエラーが出て、
> [sdelete -z c:]で実行できました。
 
私の最初に見た資料では確か「sdelete -z c:」の形式だったと記憶しているので、本来これが正しい書式なのかも知れません。
 
本文の方にも追記しておきました。
情報をありがとうございました。

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

« 痛恨、福ちゃんの誕生日を忘れてた! | トップページ | Win8コンシューマープレビューをVirtualboxにインストールしてみたけれど »

2020年3月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

お気に入り

無料ブログはココログ