Namen von Blockdevices in KVM-Gaesten

19/01/2010 - 15:28 von Marc Haber | Report spam
Ich konnte mich in den letzten Tagen ein wenig mit KVM und libvirt
beschàftigen und habe noch ein Thema, für das ich bisher keine
zufriedenstellende Lösung gefunden habe: Die Namen von Blockdevices in
den Gàsten.

KVM ist an dieser Stelle meiner Meinung nach verhàltnismàßig
unflexibel. Ich kann auf dem Host definieren, welche Files oder
ganzen Devices aus dem Host im Gast sichtbar sein sollen. Wenn ich bei
einem Linux-Gast Performanz möchte, legt mir die Dokumentation nahe,
die Devices nicht als ATA- oder SCSI-Device in den Gast zu bringen,
sondern mit dem virtio-Modell, das Unterstützung im Kernel des Gastes
braucht.

Die so in den Gast hineingebrachten Devices tauchen im /dev-Bereich
des Gastsystems als /dev/vd<x> sowie in /dev/disk/by-uuid und
/dev/disk/by-path auf, wobei die vd<x> Node stur durchnummeriert wird,
/dev/disk/by-uuid zumindest bei ext3 und einer innerhalb des Gastes
partitionierten blockdevice die richtige UUID des auf der Device
abgelegten Filesystems ist und ich die Terminologie des Pfades aus
/dev/disk/by-path nich verstehe.

Ich scheine also gezwungen zu sein, bei Änderungen am Massenspeicher
(z.B. Migration auf eine anderes Dateisystem oder Konfiguration
weiterer Blockdevices) im Zweifel am Linux des Gastes
herumzukonfigurieren, um die neue Reihenfolge der /dev/vd<x> oder die
neue UUID des neuen Dateisystems einzustellen: Das ist màchtig Stoff
für Konfigurationsfehler.

Kriege ich auf diese Art und Weise überhaupt mehr als 26 Devices in
einen Gast? Was passiert hinter vdz?

Bei "auf Blech" laufenden Linuxen habe ich diese Problematik schon
seit vielen Jahren durch LVM gelöst: Da bekommt die schon Blockdevice
einen sprechenden Namen, der auch bei Mirgrationen und
Umkopieraktionen konstant bleiben kann (was bei einer UUID nicht geht,
sonst wàre sie ja nicht mehr unique), und bin damit nicht auf
dateisystemabhàngige Dinge wie Label oder UUID angewiesen. Spàtestens
dann, wenn ich mit "data-auf-raw-device" wie bei den CNFS-Buffern
eines Newsservers arbeite, geht das gar nicht mehr anders.

Am liebsten hàtte ich ja ein "paravirtualisiertes
Devicemapper-Interface", bei dem ich in der Konfiguration des _Hosts_
sagen kann, welche LV des Hosts mit welchem Namen in welchem Gast
unterhalb von /dev/mapper/ sichtbar sein soll. Auf diese Weise könnte
die Konfiguration aller Gàste immer gleich sein, und ich müsste nicht
im Gast herumkonfigurieren nur weil ich an der Speicherorganisation
des Hosts gedreht habe.

Ich könnte natürlich hergehen und für jeden Gast eine einzige LV
haben, diese LV dann als /dev/vda in den Gast hineingeben und dort wie
eine richtige Platte partitionieren und wieder einen LVM darauf
anlegen. Dann kann ich die Dateisysteme des Gasts aber nicht einfach
für Test- und Reparaturzwecke im Host einhàngen, ohne mir mit kpartx
einen abzubrechen, und ich verliere Flexibilitàt beim Resizen von
Dateisystemen.

Diese Herausforderungen hat wohl jeder, der mit KVM virtualisiert,
anders und mehr oder weniger befriedigend gelöst. Mich würde
interessieren, wie Ihr das angegangen seid und ob es noch
Möglichkeiten gibt, die ich nicht in Betracht gezogen habe. Vielleicht
ist ja etwas dabei, was mich zufriedenstellt. Existiert vielleicht
sogar das von mir weiter oben gewünschte Interface zwischen KVM im
Host und dem Device-Mapper im Gast? Oder gibt es irgend eine andere
Lösung, um Blockdevices aus dem Host im Gast mit einem durch
Hostkonfiguration festlegbarem, beliebigen Devicenamen sichtbar zu
machen?

Grüße
Marc

Marc Haber | " Questions are the | Mailadresse im Header
Mannheim, Germany | Beginning of Wisdom " | http://www.zugschlus.de/
Nordisch by Nature | Lt. Worf, TNG "Rightful Heir" | Fon: *49 621 72739834
 

Lesen sie die antworten

#1 Sven Hartge
19/01/2010 - 15:34 | Warnen spam
Marc Haber <mh+ wrote:

Kriege ich auf diese Art und Weise überhaupt mehr als 26 Devices in
einen Gast? Was passiert hinter vdz?



Schuss ins Blaue: Es geht bei vdaa, vdab, vdac,... weiter. Zumindest bei
SCSI-Geràten ist das der Fall. (Nein, ich habe kein 30 Festplatten im
System, wohl aber testweise einmal über 30 iSCSI-LUNs eingebunden.)



Sig lost. Core dumped.

Ähnliche fragen