追記(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イメージファイル ⇔ 固定長仮想ディスク ⇔ 可変長仮想ディスク
という相互変換が可能となる。