cappuccinoのコンピタブログ

cappmac.exblog.jp
ブログトップ

タグ:vmdk ( 1 ) タグの人気記事

vmware-vdiskmanager.exeをいじってみる

ひさびさに普通のコンピュータネタ

以前、自分は簡易P2Vを実施し、成功させました。

この簡易P2Vは簡単に言うと物理HDDと全く同じ仕様の仮想HDDを用意し、KnoppixなどのCDから起動するLinuxを用いてddで複製を行うものです。幸い移行元はLVMなどの面倒なパーティショニングをしていなかったので予想どおりうまく行きました。
正確にはそのままでは起動はしなかったのでmkinitrdで初期RAMディスクの再構成を実施して事なきを得ました。

問題はこの運用時に起きました。実はこのシステムを後継者に渡したんですが、後継者の話によるとこの仮想HDDを伸長したようです。伸張時に問題が発生し、ファイルサイズがZeroのファイルができたそう・・・そんなことあるのかな。

ということで、ためしにGWで時間があったので実験してみました。

なお、この仮想HDD、すこし出自が変わっているモノでして、vmwareでそのまま作成した仮想HDDではありません。このサイトを参考に、実HDDと同じスペック、すなわちサイズとCHS(クラスタ、ヘッド、シリンダ)(シリンダ、ヘッド、セクタ)が全く同じHDDを作成しました。vmwareの標準機能ではCHSまで同じHDDは作成できないのです。異なる仕様のHDDでddをおこなったものはP2Vに失敗しました。

実験は以下のような状況で行いました。使用するファイルは以下のとおりです。

vmwareファイル(vmx)
仮想HDD(ポインタ)
仮想HDD(本体)

これも説明が必要だと思います。参照先のサイトを見ればわかることですが、vmwareのvmdkファイルはひとつながりの巨大なデータである必要はなく、仕様を記述して、本体を指しているファイル(便宜的にポインタの仮想HDDと呼びます)、とVMのストレージエリアとなる本体に分けることが可能なようです。
ちなみに本体のファイルはfsutilコマンドで作成したイメージファイルです。このコマンド、たいていの場合は巨大なファイルを使って、ファイルの転送速度の測定をしたり、圧縮のテストをするのに利用するんですが、疑似vmdkとしても機能するようです。しかし、本家のvmdkとは(おそらく)仕様が異なるのでvmware-vdiskmanager.exeを用いた伸張処理がちゃんと機能するかは疑問です。もっとも、それを確認するための実験なんですが・・・。

ファイルを用意したら実際にvmwareを起動させてOSをインストールします。あまり意味はないですが、インストールしたOSも示します。

KNOPPIX日本語版5.1.1CD

余談ですが、Knoppix LinuxはHDDに入れてもなかなか使えますよ。インストールが終わるのも速いし。

OSインストールまできたら実験開始です。やりたいことは仮想HDDの伸張です。しかしvmdkファイルが2つ(ポインタと本体)あり、どちらを伸張すべきか悩みます。どちらもやってみればいいのですが、予想を立ててみます。

まず、上記サイトのままのvmdkのポインタファイルの一部を抜粋します。ポインタファイルはテキストファイルなので簡単に中身を見ることができます。
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
# Extent description
RW 33554432 FLAT "scsi-16g-flat.vmdk" 0

# The Disk Data Base
#DDB

ddb.virtualHWVersion = "4"
ddb.geometry.cylinders = "2088"
ddb.geometry.heads = "255"
ddb.geometry.sectors = "63"
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

これは16GBのHDDの仕様です。vmware-vdiskmanager.exeを使用して伸張をおこなう際はおそらくこのパラメータが書き換えられて、本体ファイルが伸長されることが予想されます。

ためしに、vmware-vdiskmanager.exeを使って、実際にvmdkファイルを伸張してみます。

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
C:\Users\cappmac\Desktop\empty>"C:\Program Files\VMware\VMware Workstation\vmware-vdiskmanager.exe" -x 20GB scsi-16g.vmdk
Using log file C:\Users\cappmac\AppData\Local\Temp\vmware-cappmac\vdiskmanager.log
Grow: 100% done.
The old geometry C/H/S of the disk is: 2088/255/63
The new geometry C/H/S of the disk is: 2610/255/63
Disk expansion completed successfully.

WARNING: If the virtual disk is partitioned, you must use a third-party
utility in the virtual machine to expand the size of the
partitions. For more information, see:
http://www.vmware.com/support/kb/enduser/std_adp.php?p_faqid=1647
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
という感じで、成功しちゃいました。

ちなみに、本体ファイルに対して、伸張処理を実施するとこうなりました。
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
C:\Users\cappmac\Desktop\empty>"C:\Program Files\VMware\VMware Workstation\vmware-vdiskmanager.exe" -x 20GB scsi-16g-flat.vmdk
Using log file C:\Users\cappmac\AppData\Local\Temp\vmware-cappmac\vdiskmanager.log
Failed to open the disk 'scsi-16g-flat.vmdk' : The file specified is not a virtual disk (15).
Failed to open disk 'scsi-16g-flat.vmdk' : The file specified is not a virtual disk (15).
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

というわけで、fsutilで作成されたただのファイルの塊でもvmdkのポインタファイルさえ用意すればちゃんとvmwareネイティブのvmdkファイルと等価の動作となることが確認できました。

となると失敗した理由がナゾです。現場検証は短時間だったため、あまり深くまで原因究明できませんでしたが、スナップショットやホストOSの受け入れ容量オーバーだった可能性が考えられます。スナップショットは伸張時には切らないとなにか影響がありそうな気がします。

とりあえず、今回の実験でわかったことは、疑似vmdkでもvmdkと同じ動作をする、ということと、完全に依存しない隔絶した環境にバックアップを置いてから作業をしましょう、ということが確認できました。

もちろんこの伸張はあくまでもvmdkに対して、ですので伸張後のVM内のファイルシステム伸張処理をお忘れなく、というかこちらのほうが難しい場合も多いのですが、今回伸張をしようとした、後継者殿はその辺、どう考えていたんでしょうね。
[PR]
by cappuccino_mac | 2009-05-05 17:02 | 設定覚え書き