2011年11月2日水曜日

VMware Player 上のguest OSに生LVM Volumeをマウントする

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
HostはScientific Linux 6.1です。VMWare Playerは4系列。

まあ、ここにある結論をそのまま使っただけですけどね。


結論:ディスクイメージの元のHDDのジオメトリが分からなければ、総セクタ数としてファイルサイズ÷512(の小数点以下を切り捨てた整数)を総セクタ数として記述しておき、セクタ数、ヘッド数、シリンダ数は“0”としておけばいい。その状態で仮想マシンを立ち上げると、適当なセクタ数、ヘッド数、シリンダ数をVMwareの仮想ディスクドライバが決定してくれる。もし、定義ファイルに“0”のままでは気になるのであれば、hdparmで得たドライバが決定したジオメトリの値を定義ファイルに書き込んでおけば良い。というところだろうか。

今時のコンピュータでは、ディスク上の情報の位置は先頭からのセクタ番号だけアクセスして、昔の様にヘッド番号とかシリンダ番号、トラック内のセクタ番号を使ってアクセスしないので、これでも問題ない、ということかもしれない。(fdiksがHDDの物理ジオメトリは無視して、セクタ数を63、ヘッド数を255にしてパーティションするのも、この考え方であれば納得できる。)


実作業としては:

1. なんか適当にtemplateとなるvmdkファイルを作る。metadataの中身はこんな感じ。容量指定はなんでもいいが、preallocateしたほうがよいだろう。
# Disk DescriptorFile
version=1
encoding="UTF-8"
CID=8d03ddbb
parentCID=ffffffff
isNativeSnapshot="no"
createType="twoGbMaxExtentFlat"

# Extent description
RW 208896 FLAT "Win7Template-f001.vmdk" 0

# The Disk Data Base 
#DDB

ddb.adapterType = "lsilogic"
ddb.geometry.sectors = "32"
ddb.geometry.heads = "64"
ddb.geometry.cylinders = "102"
ddb.uuid = "60 00 C2 9f 1a d0 8e 7c-04 3a 03 fe fe 0f 15 52"
ddb.longContentID = "b0e2674d8fa7d5101c4addeb8d03ddbb"
ddb.virtualHWVersion = "8"

2. 上記のファイルをLVMのLVの位置・容量に合わせて書き直す。
# Disk DescriptorFile
version=1
encoding="UTF-8"
CID=51be770e
parentCID=ffffffff
isNativeSnapshot="no"
createType="twoGbMaxExtentFlat"

# Extent description
RW 629145600 FLAT "/dev/vg_akagi/ntfs" 0

# The Disk Data Base 
#DDB

ddb.virtualHWVersion = "8"
ddb.longContentID = "e46ca8b5dbfce4905651da8a51be770e"
ddb.uuid = "60 00 C2 9f 1a d0 8e 7c-04 3a 03 fe fe 0f 15 52"
ddb.geometry.cylinders = "0"
ddb.geometry.heads = "0"
ddb.geometry.sectors = "0"
ddb.adapterType = "lsilogic"

3. VMware Playerを実行するUserをdisk groupに追加。さすがにrootにするのは萎える。これをやっておかないと、/dev/vg_akagi (実態は/dev/dm-XXX)などにはアクセスできない。


4. guestの設定を編集し、既存のharddisk imageとして追加する。

5. Playerを起動してguestを動かす。
注意: guestがマウントしている間はhost上でマウントしないこと!!!ぶっ壊れるよ!1つのdiskに対してファイルシステムが起動することになるから。なので間違ってもfstabに登録するとかバカなことはしないように。

0 件のコメント: