追記(2008/07/28)vmware-vdiskmanagerコマンドと組み合わせれば

こんなページを見つけた。仮想ディスクの小技
vmware-vdiskmanagerコマンドについては、そう言えば以前、仮想ディスクをオフラインでデフラグするときに使ったような気もするが余り深く調べなかったので忘れていた。

上で紹介した、物理ディスクイメージと仮想ディスクの相互変換に、更にvmware-vdiskmanagerコマンドを使えば仮想ディスクを柔軟に変更できる。ちょっと試したところ、vmware-vdiskmanagerコマンドは(ディスクサイズを変更しないのであれば)変換の前後でジオメトリは同じようだ。例えば、上の方法で"windows98"という固定サイズのディスクを用意する。(実験用に小さいサイズにしてある。ジオメトリは63セクタ、15ヘッド、150シリンダである。)

[root@server Fedora-8]# ls -l windows98.vmdk windows98-flat.vmdk
-rw------- 1 vmware vmware   72576000 2008-07-28 09:28 windows98-flat.vmdk
-rw------- 1 vmware vmware        344 2008-07-28 09:27 windows98.vmdk
[root@server Fedora-8]# cat windows98.vmdk

# Disk DescriptorFile
version=1
CID=19454c09
parentCID=ffffffff
createType="monolithicFlat"

# Extent description
RW 141750 FLAT "windows98-flat.vmdk" 0

# The Disk Data Base
#DDB

ddb.toolsVersion = "7394"
ddb.adapterType = "ide"
ddb.geometry.sectors = "63"
ddb.geometry.heads = "15"
ddb.geometry.cylinders = "150"
ddb.virtualHWVersion = "4"
[root@server Fedora-8]# 

これをvmware-vdiskmanagerを使って可変長の仮想ディスクに変換する。

[root@server Fedora-8]# vmware-vdiskmanager -r windows98.vmdk -t 0 test.vmdk
Using log file /tmp/vmware-root/vdiskmanager.log
Creating a monolithic growable disk 'test.vmdk'
  Convert: 100% done.
Virtual disk conversion successful.
[root@server Fedora-8]#

ファイルとしてはtest.vmdkが出来る。

root@server Fedora-8]# ls -l
total 10343488
-rw------- 1 vmware vmware 4386586624 2008-07-28 09:26 Fedora-8.vmdk
-rw------- 1 vmware vmware        598 2008-07-26 12:22 Fedora-8.vmsd
-rwxr-xr-x 1 vmware vmware       1444 2008-07-28 09:24 Fedora-8.vmx
-rw------- 1 vmware vmware       8664 2008-07-28 09:26 nvram
-rw------- 1 root   root      2293760 2008-07-28 09:31 test.vmdk
-rw-r--r-- 1 vmware vmware      39930 2008-07-28 09:26 vmware.log
-rw------- 1 vmware vmware   72576000 2008-07-28 09:28 windows98-flat.vmdk
-rw------- 1 vmware vmware        344 2008-07-28 09:27 windows98.vmdk
[root@server Fedora-8]#

さて、このtest.vmdkのジオメトリだが、ファイルの先頭部分に記述されているので覗いてみると、

[root@server Fedora-8]# head -20 test.vmdk
KDMVカ)"

# Disk DescriptorFile
version=1
CID=19454c09
parentCID=ffffffff
createType="monolithicSparse"

# Extent description
RW 141750 SPARSE "test.vmdk"

# The Disk Data Base
#DDB

ddb.toolsVersion = "7394"
ddb.virtualHWVersion = "4"
ddb.geometry.cylinders = "150"
ddb.geometry.heads = "15"
ddb.geometry.sectors = "63"
ddb.adapterType = "ide"
[root@server Fedora-8]#

ジオメトリは変換前と同じ、63セクタ、15ヘッド、150シリンダである。
今度は逆変換を試みる。一旦、元のwindows98という仮想ディスクを消去した後、vmware-vdiskmanagerで変換する。

[root@server Fedora-8]# rm windows98.vmdk windows98-flat.vmdk
[root@server Fedora-8]# vmware-vdiskmanager -r test.vmdk -t 2 windows98.vmdk
Using log file /tmp/vmware-root/vdiskmanager.log
Creating monolithic preallocated disk 'windows98.vmdk'
  Convert: 100% done.
Virtual disk conversion successful.
[root@server Fedora-8]#

さて、ファイルサイズとジオメトリは?

[root@server Fedora-8]# ls -l
total 10343488
-rw------- 1 vmware vmware 4386586624 2008-07-28 09:26 Fedora-8.vmdk
-rw------- 1 vmware vmware        598 2008-07-26 12:22 Fedora-8.vmsd
-rwxr-xr-x 1 vmware vmware       1444 2008-07-28 09:24 Fedora-8.vmx
-rw------- 1 vmware vmware       8664 2008-07-28 09:26 nvram
-rw------- 1 root   root      2293760 2008-07-28 09:31 test.vmdk
-rw-r--r-- 1 vmware vmware      39930 2008-07-28 09:26 vmware.log
-rw------- 1 root   root     72576000 2008-07-28 09:36 windows98-flat.vmdk
-rw------- 1 root   root          344 2008-07-28 09:36 windows98.vmdk
[root@server Fedora-8]#

[root@server Fedora-8]# cat windows98.vmdk
# Disk DescriptorFile
version=1
CID=19454c09
parentCID=ffffffff
createType="monolithicFlat"

# Extent description
RW 141750 FLAT "windows98-flat.vmdk" 0

# The Disk Data Base
#DDB

ddb.toolsVersion = "7394"
ddb.virtualHWVersion = "4"
ddb.geometry.cylinders = "150"
ddb.geometry.heads = "15"
ddb.geometry.sectors = "63"
ddb.adapterType = "ide"
[root@server Fedora-8]#

元のHDDイメージファイルと全く同じジオメトリで、大きさも同じである。つまり、vmware-vdiskmanaコマンドと組み合わせることで、

	物理HDD ⇔ HDDイメージファイル ⇔ 固定長仮想ディスク ⇔ 可変長仮想ディスク

という相互変換が可能となる。