41.6Direkter Zugriff auf den Inhalt einer Image-Datei
In diesem Abschnitt geht es um die Frage, wie Sie den Inhalt eines virtuellen Datenträgers auslesen oder verändern können, ohne die virtuelle Maschine selbst zu starten. Das ist beispielsweise praktisch, um von außen Reparaturen durchzuführen oder um Konfigurationsdateien durch ein Script zu verändern.
Für den Zugriff auf den virtuellen Datenträger gibt es verschiedene Vorgehensweisen:
-
Sie können den Inhalt der virtuellen Datenträger direkt im Hostsystem lesen oder verändern,
-
Sie können auf diverse libguestfs-Werkzeuge zurückgreifen, oder
-
Sie können ein Linux-Live-System zu Hilfe nehmen, also die virtuelle Maschine vom ISO-Image einer Linux-Distribution starten und von dort aus auf die virtuellen Festplatten zugreifen.
In diesem Abschnitt gehe ich nur auf die beiden ersten Varianten ein. Manche der hier vorgestellten Werkzeuge können ausschließlich RAW-Images bearbeiten. Gegebenenfalls müssen Sie eine in einem anderen Format vorliegende Image-Datei in dieses Format umwandeln:
Mit dem folgenden Kommando erzeugen Sie aus einem Logical Volume oder einer Festplattenpartition ein äquivalentes RAW-Image:
Ein Schreibzugriff auf einen virtuellen Datenträger ist nur zulässig, wenn die virtuelle Maschine vollkommen heruntergefahren ist! Andernfalls riskieren Sie ein kaputtes Dateisystem!
Zugriff auf partitionierte RAW-Images im Hostsystem
Mit dem Kommando kpartx aus dem gleichnamigen Paket verbinden Sie alle in einer RAW-Datei enthaltenen Partitionen mit Loop-Devices:
Bei unseren Tests hat dies auch funktioniert, wenn die Image-Datei eine GUID Partition Table enthält (also keine traditionelle Partitionstabelle im Master Boot Record). Sofern es sich um normale Partitionen handelt, können Sie diese nun direkt mit mount in das Dateisystem einbinden:
Wenn Sie innerhalb der virtuellen Maschine LVM konfiguriert haben, stehen die resultierenden Physical und Logical Volumes sowie Volume Groups direkt zur Verfügung. Listen der LVM-Elemente liefern lvscan, pvscan und vgscan. Der Zugriff auf die LVs setzt voraus, dass auf dem Hostsystem die LVM-Werkzeuge installiert sind.
Nun können Sie über die Verzeichnisse repairn auf die Dateisysteme der virtuellen KVM-Festplatte zugreifen. Wenn Sie damit fertig sind, müssen Sie aufräumen:
libguestfs-Werkzeuge
Anstatt die Image-Datei selbst zu analysieren und die relevanten Partitionen in das lokale Dateisystem zu integrieren, können Sie diese Aufgaben diversen Werkzeugen überlassen, die auf der libguestfs-Bibliothek aufbauen.
Die Bibliothek libguestfs erlaubt den direkten Zugriff auf die Dateisysteme, die sich innerhalb einer Image-Datei befinden. libguestfs unterstützt alle erdenklichen Image-Formate, Partitionen, LVM sowie alle gängigen Dateisysteme. Die Bedienung der libguestfs-Werkzeuge ist auf der folgenden Website sowie auf der man-Seite libguestfs umfassend dokumentiert:
Aktuelle CentOS-, Debian-, Fedora-, RHEL- und Ubuntu-Distributionen liefern alle erforderlichen Pakete gleich mit:
Das Paket enthält diverse Kommandos zur Manipulation von Image-Dateien. Die zu bearbeitende oder zu analysierende Image-Datei geben Sie in der Regel mit -a image-datei an. Alternativ können Sie mit -d vmname den libvirt-Namen der virtuellen Maschine angeben.
virt-df gibt einen raschen Überblick über die Auslastung aller Dateisysteme aller virtuellen Maschinen, die den libvirt-Werkzeugen bekannt sind. Das Kommando kommt auch mit Logical Volumes innerhalb von virtuellen Datenträgern zurecht.
Wenn Sie nur an den Ergebnissen einer einzelnen virtuellen Maschine interessiert sind, geben Sie den Dateinamen der Image-Datei mit -a oder den libvirt-Namen der virtuellen Maschine mit -d an.
virt-filesystems verrät, welche Dateisysteme sich in einer Image-Datei befinden. Mit den Optionen --all, --long und --uuid listet das Kommando auch LVM- und Swap-Partitionen auf und gibt die UUID-Nummern der Dateisysteme an:
virt-inspector wirft einen Blick in die Dateisysteme einer Image-Datei und verrät, welche Distribution darin installiert ist, welche Partitionen es gibt, welche Kernelversion und welche Pakete installiert sind etc. virt-inspector kennt sowohl das RPM- als auch das Debian-Paketsystem.
virt-cat gibt eine Datei einer virtuellen Maschine aus:
Um die Datei in einem Editor zu verändern, verwenden Sie anstelle von virt-cat das Kommando virt-edit. Es darf nur für ausgeschaltete virtuelle Maschinen verwendet werden! Abweichend von den anderen Kommandos wird der Name der Image-Datei bzw. der virtuellen Maschine ohne die Optionen -a bzw. -d angegeben. virt-edit berücksichtigt bei der Wahl des Editors die Umgebungsvariable EDITOR. Standardmäßig wird der Editor vi ausgeführt.
Mit virt-tar können Sie ein Archiv von Dateien aus dem Dateisystem der virtuellen Maschine lesen oder dorthin schreiben – Letzteres aber nur, wenn die virtuelle Maschine ausgeschaltet ist. Das folgende Kommando liest das Verzeichnis /root der virtuellen Maschine vm1 aus und speichert es in einem tar-Archiv:
virt-make-fs erzeugt eine neue Image-Datei und speichert darin den Inhalt eines Verzeichnisses oder eines tar-Archivs: