Login
Newsletter
Do, 1. September 2016, 15:00

Festplatten in Qemu online vergrößern

Kommandos an Qemu absetzen, während die virtuelle Maschine läuft, kann für verschiedene Dinge nützlich sein. Hier wird es für die Vergrößerung der virtuellen Festplatte im Betrieb genutzt.

Gelegentlich ist es erforderlich, einer virtuellen Maschine (VM) in Qemu mehr Festplattenplatz zuzuweisen. Wenn man die VM herunterfährt, ist das einfach: Man vergrößert zunächst einfach nur die entsprechende Image-Datei oder das Blockgerät, auf dem das Image liegt. Da viele Dateisysteme, u.a. ext4 und XFS, die Online-Vergrößerung erlauben, kann man die Anpassung an die vergrößerte virtuelle Festplatte nach dem Neustart der VM vornehmen.

Wenn jedoch VMs im Hintergrund laufen und möglichst nicht gestoppt werden sollen, muss man auch die Vergrößerung der virtuellen Festplatte online vornehmen. Im Prinzip ist auch das nicht schwer, da Qemu das bereits vorsieht. Im »Monitor« von Qemu gibt man das Kommando info block -v ein, um eine Liste der benutzten Blockgeräte zu erhalten. Die Ausgabe könnte beispielsweise so aussehen:

drive-virtio-disk0 (#block138): /dev/vm/101_root (raw)
    Cache mode:       writeback, direct

Images:
image: /dev/vm/101_root
file format: raw
virtual size: 3.0G (3221225472 bytes)
disk size: 0

drive-virtio-disk1 (#block305): /dev/vm/101_swap (raw)
    Cache mode:       writeback, direct

Images:
image: /dev/vm/101_swap
file format: raw
virtual size: 512M (536870912 bytes)
disk size: 0

drive-virtio-disk2 (#block515): /dev/vm/101_srv (raw)
    Cache mode:       writeback, direct

Images:
image: /dev/vm/101_srv
file format: raw
virtual size: 12G (12884901888 bytes)
disk size: 0

Unser Ziel sei es nun, /dev/vm/101_srv von 12 auf 20 GB zu vergrößern. Dazu muss man zunächst - dabei kann die VM weiterlaufen - /dev/vm/101_srv auf dem Hostrechner vergrößern. In diesem Beispiel handelt es sich um ein LVM-Partition, die man mit dem Kommando lvresize -L 20G /dev/vm/101_srv vergrößert.

Mit folgendem Kommando kann man nun auch die laufende VM dazu bringen, die neue Größe des Laufwerks zu sehen:

block_resize drive-virtio-disk2 20G

Die Reaktion der VM ist eindeutig, wie man im Kernel-Log sieht:

[3088391.174260] virtio_blk virtio4: new size: 41943040 512-byte logical blocks (21.4 GB/20.0 GiB)
[3088391.175555] vdc: detected capacity change from 12884901888 to 21474836480
[3088391.287327] VFS: busy inodes on changed media or resized disk vdc

Das Problem bei diesem Verfahren: Es ist leicht, bei einer interaktiven Qemu-Sitzung zum Monitor zu wechseln - die Tastenkombination <host> + 2 erledigt das, wobei <host> definiert werden kann, meist aber aus Umschalt + Strg + Alt besteht. Läuft Qemu dagegen im Hintergrund ohne grafische Ausgabe, so wird der Monitor üblicherweise auf ein anderes Gerät umgeleitet. Leider gibt es für diesen Fall kein konsistentes Werkzeug.

Wenn man allerdings Qemu über libvirt gestartet hat, dann steht in der Shell »virsh« ein Kommando zur Verfügung, um mit dem Monitor zu kommunizieren, und die Syntax ist nicht allzu schwer. Statt info block -v ist dann

qemu-monitor-command --hmp name-der-vm info block -v

einzugeben, und der block_resize-Befehl wird zu

qemu-monitor-command --hmp name-der-vm block_resize drive-virtio-disk2 20G

Was aber, wenn man nicht libvirt benutzt? Dann sollte man mit der Option -qmp ein Monitor-Gerät definieren. Es gibt mehrere Möglichkeiten, aber ein TCP-Socket dürfte am leichtesten handhabbar sein. Dann kann man telnet, netcat oder socat nutzen, um mit dem Monitor zu kommunizieren. Hier kommt allerdings noch ein weiteres Problem hinzu, und das ist die Syntax der Kommunikation mit dem Monitor. Standardmäßig wird dafür QMP eingesetzt, das auf JSON-Syntax beruht und für interaktive Eingaben wenig geeignet ist. Da aber HMP eine Teilmenge von QMP ist, kann man Kommandos in QMP in einer halbwegs benutzbaren Syntax absetzen:

{ "execute": "<HMP-Kommando" }

Die QMP-Seite sowie diverse Beiträge im Web (hier und hier) erläutern dies näher.

  • Das Werk darf vervielfältigt, verbreitet und öffentlich zugänglich gemacht werden, Abwandlungen und Bearbeitungen des Werkes müssen unter den gleichen Bedingungen weitergegeben werden. Der Name des Autors/Rechteinhabers muss in der von ihm festgelegten Weise genannt werden.

    - Weitere Informationen
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten