Diese Art der Partitionierung hat ein paar Vorteile:
- einfaches Online Backup über LVM Snapshot auf den Host
- Partitionen können ohne Probleme (zusätzliches Mapping durch kpartx, usw.) am Host gelesen werden
- sehr einfaches Online Resizing (vergrössern) der Partitionen durch ändern der Grösse des logischen Volumes und vergrössern des Dateisystems im Gast.
- sehr effizient, z.B. im Vergleich zu reinen Dateisystem Image Dateien
In unserem Beispiel möchte ich eine 32bit virtuelle Maschine erstellen, welche als Jenkins Slave mein Build Cluster um ein 32bit Debian System ergänzen soll. Die Maschine soll ein logisches Volume für root, swap und boot erhalten.
#Mapping: Host -> GastIm Gast werden die virtuellen Disks wie folgt verwendet.
/dev/vg0/vmi-jenkins-slave-debian32-boot -> /dev/vda
/dev/vg0/vmi-jenkins-slave-debian32-root -> /dev/vdb
/dev/vg0/vmi-jenkins-slave-debian32-swap -> /dev/vdc
/dev/vda -> PartitionstabelleIm folgenden werden wir nun die benötigten logischen Volumes erzeugen. Mein Host System sieht wie folgt aus.
-> + Boot Partition (/dev/vda1)
/dev/vdb -> Mount als ext4 Dateisystem
/dev/vdc -> Mount als Swap Partition
root@xx:~# vgsWir haben also eine Volume Gruppe (vg0) welche wir als Storage für unsere virtuellen Maschinen verwenden können. Es empfiehlt sich jedoch eine eigene exklusive Volume Gruppe nur für virtuelle Maschinen zu haben.
VG #PV #LV #SN Attr VSize VFree
vg0 1 11 0 wz--n- 1,73t 1,56t
Als erstes erzeugen wir uns nun das Volume (vmi-jenkins-slave-debian32-boot)für die Boot Festplatte (/dev/vda) mit einer Grösse von 256MB.
lvcreate -n vmi-jenkins-slave-debian32-boot -L 256M /dev/vg0Nun partitionieren wir das Volume mit fdisk mit folgenden Script wie folgt.
fdisk /dev/vg0/vmi-jenkins-slave-debian32-boot << __END__Zuerst wird also eine neue (n) primäre (p) 1.Partition (1) erzeugt. Anschliessend bestätigen wir die beiden default Werte (Startsektor und Grösse). Die so erzeugte Partition wird dann noch aktiv geschalten (a 1) und die Partitionsdaten geschrieben (w).
n
p
1
a
1
w
__END__
Nun Mappen wir die erste Partition über kpartx und erzeugen ein ext2 Dateisystem für die Bootpartition.
#map/reload partitionsJetzt müssen wir nur noch die logischen Volumes für die root und swap Partition erzeugen und formatieren.
kpartx -a /dev/vg0/vmi-jenkins-slave-debian32-boot
#erzeugt Dateisystem auf erster Partition
mkfs.ext2 /dev/vg0/vmi-jenkins-slave-debian32--boot1
#unmap partitions
kpartx -d /dev/vg0/vmi-jenkins-slave-debian32-boot
lvcreate -n vmi-jenkins-slave-debian32-root -L 8G /dev/vg0Wir haben nun 3 logische Volumes in der Volume Gruppe vg0. Das root und das swap Volume beinhalten komplette "Dateisysteme" ohne Partitionstabellen. Das boot Volume ist das einzige Volume welches selbst partitioniert ist und eine ext2 boot Partition beinhaltet. Um die Volumes verwenden zu können müssen wir diese noch in der entsprechenden libvirt Gast Beschreibung bekannt machen. Dies geht in der device Sektion wie folgt...
mkfs.ext4 /dev/vg0/vmi-jenkins-slave-debian32-root
lvcreate -n vmi-jenkins-slave-debian32-swap -L 2G /dev/vg0
mkswap /dev/vg0/vmi-jenkins-slave-debian32-swap
<disk type='block' device='disk'>Im folgenden Abschnitt werden wir nun den 32bit Gast erzeugen. Hierzu definieren wir zuerst den Gast über ein libvirt xml Template und verbinden uns anschliessend über virt-manager mit dem qemu Hypervisor um den Gast zu installieren. Als erstes erzeugen wir uns ein Template von einen bereits bestehenden Gast.
<driver name='qemu' type='raw' cache='none'/>
<source dev='/dev/vg0/vmi-jenkins-slave-debian32-boot'/>
<target dev='vda' bus='virtio'/>
</disk>
<disk type='block' device='disk'>
<driver name='qemu' type='raw' cache='none'/>
<source dev='/dev/vg0/vmi-jenkins-slave-debian32-root'/>
<target dev='vdb' bus='virtio'/>
</disk>
<disk type='block' device='disk'>
<driver name='qemu' type='raw' cache='none'/>
<source dev='/dev/vg0/vmi-jenkins-slave-debian32-swap'/>
<target dev='vdc' bus='virtio'/>
</disk>
virsh dumpxml <gast> > vm-templ.xmlIn diesem Template machen wir dann folgende Anpassungen.
- Änderung des Namens unter /domain/name auf den neuen Gast jenkins-slave-debian32
- Entfernen der UUID unter /domain/uuid da diese bereits vorhanden ist und bei fehlen automatisch neu generiert wird
- Anpassung/Ergänzen der disk Sektionen unter domain/devices/disk entsprechend obiger Beschreibung
- Entfernen/Anpassung der MAC Adresse unter /domain/interface/mac
virsh define vm-templ.xmlNun verwenden wir den virt-manager um mit diesem schnell und komfortabel die Maschine für den initialen Boot vorzubereiten.
virt-manager -c qemu+ssh://root@vm-host/systemNun nutzen wir den virt-manager um die Bootreihenfolge auf CD-ROM zu ändern, sowie um die Installations-CD zu mounten. Hierzu gehen wir auf Virtual Machine Details und dann auf Anzeige -> Details und ändern die Bootreihenfolge auf CD-ROM, ausserdem verbinden wir ein ISO-Image mit unseren CD Laufwerk. Jetzt kann die Installation des Gasts erfolgen, abschliessend trennen wir wieder das CD Image und ändern die Bootreihenfolge auf HD.
In einem anderen Post werde ich auf eine automatisierte Variante zum Bauen der Gäste eingehen.
Referenzen:
- http://blog.gadi.cc/better-lvm-for-kvm/
Keine Kommentare:
Kommentar posten