Wie kann ich die LVM-Partition der virtuellen Maschine auf dem KVM-Host bereitstellen?

11

Wenn ich versuche, Folgendes auf dem KVM-Host zu tun:

# kpartx -av /dev/VolGroup00/kvm101_img
add map kvm101_img1 : 0 208782 linear /dev/VolGroup00/kvm101_img 63
add map kvm101_img2 : 0 125612235 linear /dev/VolGroup00/kvm101_img 208845
# mount /dev/mapper/kvm101_img1 /mnt

dann werde ich / boot partition gemountet. Aber ich erhalte eine Fehlermeldung, wenn ich dann Folgendes eingebe:

# mount /dev/mapper/kvm101_img2 /mnt
mount: you must specify the filesystem type

Hier ist ein fdisk-Layout auf dem Gastcomputer:

# fdisk -l
Device Boot      Start         End      Blocks   Id  System
/dev/hda1   *           1          13      104391   83  Linux
/dev/hda2              14        7832    62806117+  8e  Linux LVM

Ist es möglich, eine Root-Partition auf dem Gast zu finden und auf dem Host-System bereitzustellen?

Evolver
quelle
Ich nehme an, Ihr Verweis auf kvm101_img2 ist ein Tippfehler. Es sollte stattdessen _img1 sein, oder?
Joechip
_img1 wird mit der obigen Methode korrekt bereitgestellt, aber _img1 ist eine / boot-Partition, die / dev / hda1 auf dem Gast entspricht. Problem war, dass ich _img2 mit / dev / hda2 Linux LVM nicht mounten konnte. Dieses Partitionslayout ist Standard für das CentOS-Installationsprogramm.
Evolver
Oh OK, ich wurde durch den Hinweis auf KVM rausgeworfen. Es gibt dann nichts KVM-spezifisches an dieser Frage, es ist einfach eine LVM-Struktur in einer anderen.
Joechip

Antworten:

14

Scheint, als hätte ich endlich herausgefunden, wie ich Dinge tun soll, die ich brauchte. Folgendes habe ich getan:

# kpartx -av /dev/VolGroup00/kvm101_img
# vgscan

Wenn VolGroup-Namen in Gast- und Hostsystemen identisch sind, müssen Sie die Gast-VolGroup umbenennen

# vgrename <uuid> VolGroupXX

uuid von VolGroups können Sie einchecken vgdisplay. Der Trick besteht also darin, die Gast-VolGroup zu aktivieren:

# lvscan
# vgchange -ay VolGroupXX
# lvscan

Danach ist es einfach zu montieren:

# mount /dev/VolGroupXX/LogVol00 /mnt

Schließlich ist der Rückwärtsprozess:

# umount /mnt
# vgchange -an VolGroupXX
# kpartx -dv /dev/VolGroup00/kvm101_img
# pvscan

Der letzte Befehl bereinigt den LVM-Cache und entfernt das von kpartx erstellte physische Volume aus LVM.

Evolver
quelle
Möglicherweise müssen Sie die fstab des Gasts bearbeiten, um dann VolGroupXX anstelle von VolGroup00 zu verwenden.
Joechip
4

Ich bin froh, dass Sie es für Ihre Situation herausgefunden haben.

Im allgemeineren Fall kann das Gastlaufwerk in verschiedenen Formaten wie qcow, qcow2 usw. vorliegen, sodass Sie nicht direkt daran arbeiten können. In diesem Fall können Sie Folgendes verwenden:

# modprobe nbd
# kvm-nbd -c /dev/nbd0 file.qcow2

Dann können Sie auf / dev / nbd0 als unformatiertes Gastlaufwerk zugreifen. Um die Verwendung dieses Geräts zu beenden, sollten Sie Folgendes ausführen:

# nbd-client -d /dev/nbd0

Wenn andererseits das Gastlaufwerk im Rohformat wäre, würden Sie losetup verwenden:

# losetup -f file.raw

Dies würde das erste verfügbare Schleifengerät finden und verwenden (z. B. / dev / loop0). So beenden Sie die Verwendung:

# losetup -d /dev/loop0

Danach können Sie die in Ihrer Antwort beschriebene Prozedur kpartx / vgscan / lvscan / mount ausführen.

Joechip
quelle
2

Sie können dies mit guestfish tun - http://libguestfs.org/guestfish.1.html

dyasny
quelle
Vielen Dank für den Vorschlag, aber leider konnte ich nicht einmal guestfish installieren: Ich habe stundenlang gegoogelt und nachgeforscht - alles nutzlos, es funktioniert nicht :( Vielleicht gibt es eine andere Möglichkeit, eine Linux-Partition zu mounten? Ich brauche kein All-In Ein Werkzeug, um alles zu montieren, nur LVM.
Evolver
1
versuche zu rennen qemu-img info /path/to/image. Wenn das Feld Typ nicht "RAW" ist, kann ein Betriebssystem dieses Image auf keinen Fall als Partition bereitstellen, da es als qemu-spezifische virtuelle Festplatte formatiert ist. Dies ist, was Guestfish befasst, es ist nicht nur ein einfaches Montagewerkzeug
dyasny
1

Es könnte einfacher sein, nur guestfishdas libguestfs- Paket zu verwenden, das alle nervigen Details für Sie herausarbeiten sollte, anstatt zu versuchen, es manuell zu tun

TomH
quelle