# KVM & LVM - "best practice" Tipps gesucht

## slick

Auf eine Maschine sollen mittels KVM mehrere Gentoo-Gäste virtualisiert werden. Dabei sollen einzelne logical volumes von LVM jeweils einzelnen VMs zugeordnet werden.

Beispiel: 

```
kvm drive file=/dev/mapper/lvm-kvm01,if=virtio,boot=on ...
```

Allerdings ist mir nicht ganz klar, wie praxistauglich das ganze ist. Innerhalb der VM verhalten sich die volumes wie Festplatten, d.h. sie müssen auch partitioniert werden (/dev/vda1 ... vdaX)

Was ist allerdings wenn ich eine Partition innerhalb der VM vergrößern möchte? Dazu müßte ich ja nicht nur das zugrundeliegende LVM logical volume vergrößern, sondern anschliessend auch die Partitionsgröße innerhalb der VM (sowie das Dateisystem). Geht das überhaupt so wie ich mir das vorstelle? Das klingt irgendwie eher nach LVM in der VM - doppelt-gemoppelt.

Wie wird das denn in der Praxis gelöst? Ich möchte einerseits den Platz für die VMs über LVM bereitstellen, andererseits aber auch sehr flexibel bleiben was Größenänderungen von Partitionen in der VM angeht.

Ich denke ich suche eine Alternative zu "virtuellen Festplatten", sowas wie "virtuelle Partitionen".

Jemand Tipps und Erfahrungen aus der Praxis für mich?

Desweiteren möchte ich in alle VMs einen zentralen Speicher (von einer der VMs) einbinden, z.B. den portage-tree via NFS. Ist hier NFS Mittel der Wahl oder gibt es bessere Lösungen unter KVM dafür?

----------

## slick

Inzwischen habe ich _meine_ "best practice" Lösung gefunden. Wenn sie auch auf den ersten Blick verwirrend klingen mag, so decke ich damit fast alle meine Vorstellungen ab:

Jede VM bootet via pxeboot + nfs übers (interne, virtuelle) Netz. Das hat den Vorteil sie braucht keine lokale Root-Platte. (Spart auch eine (im Gast) lokale Bootpartition/-konfiguration) Ich kann von extern das (Gast) Root-Dateisystem besser überwachen und mit ein wenig basteln den Gast auch (einfacher?) readonly und/oder in eine Ramdisk booten. Fühlt sich insgesamt recht sicher und flexibel an. 

Da der Hostname des Gast per dhcp gesetzt wird, ist die Zuordung mac/ip<>hostname zentral in der config vom dhcp-server zu finden.

Für jede zusätzlich im Gast benötigte (zusätzliche, z.B. beschreibbare) Partition (z.B. /home) wird eine logische lvm-Partition genutzt und unter kvm via -drive in die VM gehangen. Das Partitionieren spare ich mir und lege das Dateisystem direkt auf die virtuelle Platte:

```
host# lvcreate ... lv_guest_home

host# kvm ... -drive file=/dev/mapper/lv_guest_home,if=virtio,cache=off ...
```

```
guest# mkfs .. /dev/vda

guest# mount /dev/vda /home
```

Das hat den Vorteil ich bin sehr flexibel. (Evt. auch direkte Umgehung des "VM Disk Alignment Problems"?) 

Desweiteren, ich brauche nur die VM zu stoppen und kann anschliessend sofort das Dateisystem direkt im Host mounten 

```
host# mount /dev/mapper/lv_guest_home /mnt
```

oder es direkt die lvm-Partition/das Dateisystem vergrößern/verkleinern. 

```
host# lvresize ... /dev/mapper/lv_guest_home ...
```

Sehr praktisch!

Hat man diese Flexibilität/Vorteile erkannt, legt man das Root-Dateisystem des Gast auch in eine lvm-Partition, mountet diese am Host und gibt es über nfs wieder frei. Damit hat man zum einen den Vorteil des bootens über Netz (s.o.) sowie bleibt flexibel in der Größe des Dateisystem (s.o.) und man spart sich Quota am Fileserver, da der Platz durch die Größe der lvm-Partition effektiv begrenzt wird. Gemeinsame Ressouchen (z.B. /usr/portage) lassen sich bequem über nfs (ro) an alle verteilen.

Einziges verschmerzbares Manko ist ein laufender nfs- und dhcp- und tftp-Server am Host.

----------

