VMware saját virtuáldisk használat

VMware kétfeleképpen lehet lemezt használni: vagy a vmware virtual diskjet, vagy rawaccessben egy meglevo sd/hd-t (sda, sdb, hda, hdb, stb). Így pl nem lehet „beadni” neki raid tömböt (md0, md1) vagy HW raid exotikus driver diskjet: HP Smart Array (cciss/c0d0, cciss/c0d1).

De van megoldás: Saját virtualdisket csinálunk, amit saját magunk építünk fel.

Előkészületek (kicsit átverjük a vmware progit):
Töltsuk le innen a legfrissebb kátránylabdat, majd kibontás, lefordítás, telepítés:


# wget http://homepage3.nifty.com/tjh/vmware-bdwrapper/vmware-bdwrapper-20060304-0.tar.gz
# tar xfz vmware-bdwrapper-20060304-0.tar.gz
# cd vmware-bdwrapper-20060304-0
# make
# make install

Mivel a vmware csak /dev/hd vagy /dev/sd eszközöket enged disknek használni (egyszerű string ellenőrzés), ezért kicsit trükközni kell az udevvel: az udev-ben csinalunk egy symlinket az eszközre, a megfelelő néven.
A /etc/udev/rules.d/60-symlinks.rules (Ubuntu) vagy /etc/udev/rules.d/40-gentoo.rules fájlhoz adjunk hozzá egy sort:


KERNEL=="md*[0-9]",                     SYMLINK+="hd-%k"

Ekkor /dev/hd-md0, /dev/hd-md1, stb nevet kell használni.
Vagy pl cciss eseten (FIXME):


KERNEL=="cciss?c[0-9]d[0-9]",                     SYMLINK+="hd-%k"

„Virtualdisk” létrehozása:
Most az md0 és md1-et fogjuk beadni neki:

Először is tudnunk kell mennyi blokkbol állnak a tömbök:
fdisk /dev/md0 (igen, így!)
Az „u” paranccsal állítsuk át a mértékegységet sectorra, majd listázzuk ki „p”-vel a particiokat. Persze nem lesz partíció, de nekünk a fejléc infó kell, abból is a total sectors:


Command (m for help): p

Disk /dev/md0: 1003 MB, 1003356160 bytes
2 heads, 4 sectors/track, 244960 cylinders, total 1959680 sectors
Units = sectors of 1 * 512 = 512 bytes

(A másik tömbön ez: 19518720)

Namost készítsük el a virtualdisket (akarmi.vmdk) :


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

# Extent description
RW 63 FLAT "disk-mbr.img" 0
RW 1959680 FLAT "/dev/hd-md0" 0
RW 19518720 FLAT "/dev/hd-md1" 0

# The Disk Data Base
#DDB

ddb.toolsVersion = "6532"
ddb.virtualHWVersion = "4"
ddb.geometry.cylinders = "1"
ddb.geometry.heads = "255"
ddb.geometry.sectors = "63"
ddb.adapterType = "ide"

Az RW után a total sector méretet kell írni. A CID egy 8 karakterből álló hexa szám.

Kell még a kis fájl az mbr-hez:


# dd if=/dev/zero of=disk-mbr.img size=512 count=63

El kell készíteni egy wrapper scriptet a vmware-vmx-hez (VMware serverben ez van):
Nevezzük át a vmware-vmx-t vmware-vmx-real-ra. Majd csináljunk egy vmware-vmx scriptet:


#!/bin/sh
LD_PRELOAD=libvmware-bdwrapper.so.0.0.0 \
VMWARE_BDWRAPPER_DEVICES=/dev/hd-md0:/dev/hd-md1 \
$0-real $*

A VMWARE_BDWRAPPER_DEVICES-hez azokat az eszközöket kell felsorolni, amit használtunk a disk „összeállításakor”, kettősponttal elválasztva.

Adjuk hozzá kezzel a disket az egyik guesthez, majd bootoljunk be egy rendszert. (de akar telepíthetünk is.)
Azért kell a kezi hozzáadas, mert a vmware-server-console hibákat fog dobni, hogy „invalid disk” (ugyanis a vmware-serverd-be nemlett preloadolva a libvmware-bdwrapper.so)


ide0:0.present = "TRUE"
ide0:0.fileName = "akarmi.vmdk"
ide0:0.redo = ""

A 0:0 helyett írhatunk 0:1, 1:0 vagy 1:1-et, attól függ van-e másik disk/cdrom a guestben.

Namost a guestben (a beállítás szerint) megjelenik a diskünk: pl hda.
fdisk-el megparticionlájuk:
fdisk /dev/hda
Az „u” paranccsal váltsunk megint mértékegységet. A partíció végét az alábbi képlettel tudjuk kiszámolni:
end = total sector + start - 1
Tehat az md0, ami a guestben hda1: start 63, end 1959742.
Az md1, ami hda2 lesz: start 1959743, end 21478462.
Hozzuk letre a particiokat:


   Device Boot      Start         End      Blocks   Id  System
/dev/hda1              63     1959742      979840   82  Linux swap / Solaris
/dev/hda2         1959743    21478462     9759360   83  Linux

(Amit itt ir blocks oszlopban az a total sector fele: 1959680/2=979840, 19518720/2=9759360)

Még egy hasznos dolog: miután megformáztuk a particiókat, es leállt a guest, a hoston simán fel is tudjuk mountolni: mount /dev/md1 /mnt/guest

Hozzászólások

Huh... hajmeresztoen meredek iras. Megy deliciousra.

bükkmárk

Szép! Főleg az fdisk-es md0-ás, illetve az udev-es symlinkelés fontos más hasonló esetekben is!

ami át van húzva, azt teljesen fölösleges elolvasni. az olyan, mintha ott sem lenne