vmdkファイルは、ゲストOSを動かすときに使うディスクイメージファイル。 ゲストOS作成時に容量全部1ファイルで確保する方法と、小さなサイズの分割ファイルを作っておき必要なときに容量を消費する方法がある。 クレジットカードは一括払いしか使わないようにしてるけど、vmdkは常に分割を選ぶ。

vmdkファイルの実体

windowsホストに容量全部1ファイルのlinuxのゲストOSを作ったらこんな感じ。

1
c:\VMImage\linux-guest.vmdk

linuxホストに容量全部1ファイルのwindowsゲストOSを作ったらこんな感じ。

1
/home/VMImage/windows-guest.vmdk

※どっちもVMimageフォルダにM2.ssdをマウントしておくと動きがいい。

ファイルを分割設置するとホストOSで見えるゲストOSのディスクイメージはこんな感じ。

1
2
3
4
5
6
7
/home/VMImage/linux.vmdk
/home/VMImage/linux-s001.vmdk
/home/VMImage/linux-s002.vmdk
/home/VMImage/linux-s003.vmdk
/home/VMImage/linux-s004.vmdk
  :
/home/VMImage/linux-sXXX.vmdk

vmdkファイルの例

分割の場合、1つ目の"linux.vmdk"ファイルには構成の記述があって、その中はこんな感じ。 要するに「linux-sXXX.vmdkっていうのが実体だよー」と宣言が入っている。 encoding指定も入っているので、windowsホストで動かし始めたVMをlinuxホストに移動してもそのまま動かせる。 “Extent description"ってコメントのあるあたりの実体ファイル名を変更もできなくはない。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# Disk DescriptorFile
version=1
encoding="Shift_JIS"
CID=a6f22fbb
parentCID=ffffffff
createType="twoGbMaxExtentSparse"

# Extent description
RW 8323072 SPARSE "linux-s001.vmdk"
RW 8323072 SPARSE "linux-s002.vmdk"
RW 8323072 SPARSE "linux-s003.vmdk"
 :
# The Disk Data Base 
#DDB

ddb.adapterType = "lsilogic"
ddb.geometry.cylinders = "13054"
ddb.geometry.heads = "255"
ddb.geometry.sectors = "63"
ddb.longContentID = "6cbf988df67d35f649cfb4a5a6f22fbb"
ddb.toolsInstallType = "4"
ddb.toolsVersion = "11301"
ddb.uuid = "60 00 C2 98 87 d4 4d 05-cc 1d 28 65 69 67 d2 48"
ddb.virtualHWVersion = "18"

vmdkファイルを分割で利用する理由

ローカルPCでゲストOS動かしているときは、自分はファイルをコピーしてバックアップを必ず取るからvmdkファイルは小さいほうが助かる。 しかもそのバックアップをtar.gzで固めてクラウドに保管するときは費用に直結することもあるので、小さくあってほしい。

例えばホストOSのssd250GBに200GBのvmdk単体ファイルをデンと置くと空き容量が足りないから圧縮は一切できない。 割り切った考え方で、200GB固定サイズをバックアップ対象にしてコピーやアップロードすれば処理時間や消費サイズを均一化しようというのもありかもしれない。 でも、ゲストOSを複数扱う自分は、不要な領域浪費と時間浪費は避けたい。

vmdkの圧縮処理の実際

古いvmwareではゲストOSを停止し、vmwareのディスクユーティリティ画面から実施してたと思う。 今は、圧縮はゲストOSのコマンドラインから行う。 windowsなら管理権限で実行するし、linuxではsudoするかrootで動かす。 macも昔はできたけど、最近のファイルシステムには対応できてないみたい(いつかできるようになるといいなー)。

windowsのコマンドラインは以下のとおり。

1
2
3
c:
cd \Program Files\VMware\VMware Tools\
VMwareToolboxCmd.exe  disk shrink c:\ 

linuxのコマンドラインは以下のとおり。

1
sudo /bin/vmware-toolbox-cmd shrink /

※linuxはルートパーティションを指定すると、vmwareのコンソールで接続したディスク全部をshrinkする

vmdk圧縮する処理は、テンポラリファイルにコピーしてリネームしながら圧縮処理が進んでいく。

vmdkの圧縮(2010年頃のやり方)

windowsの場合は、子OSのvmware toolsで「仮想ディスク圧縮」を行う。 コマンドラインでは、

1
vmware-vdiskmanager -k "C:\tmesys\Virtual Machines\nariXPpro\nariXPpro.vmdk

vmdkの拡張(2010年頃のやり方)

1
"C:\Program Files (x86)\VMware\VMware Server\vmware-vdiskmanager.exe" -x 950GB windows.vmdk

これだけではディスクの枠が広がっているだけなので、パーティションマネージャで起動し、パーティションの拡張を行う。

※当時は950GBが制限だったので、それ以上のものを作りたい場合は、複数のパーティションを作りコンカチしてスパンボリュームを作った

※windowsそれほどがっつり使わないし古いコマンドラインなので、最近のやり方は機会があれば確認予定