Automatische Größenanpassung von VM-Datenträgern

Automatische Größenanpassung von VM-Datenträgern

Ich habe ein KVM/Qemu-Setup, das großartig funktioniert. Jetzt möchte ich die Bereitstellung neuer VMs optimieren.

Die zwei offensichtlichen Möglichkeiten bestehen darin, entweder eine vorhandene Festplatte zu klonen oder eine Neuinstallation durchzuführen (mit einem automatischen Preseed/Kickstart).

In meinen Tests dauert die Installation mit einem Preseed/Kickstart von der Erstellung bis zum Start mindestens ein paar Minuten (selbst mit lokalen Mirrors). Das Ergebnis ist großartig, aber es dauert zu lange.

Das Klonen ist natürlich viel schneller, verursacht aber Probleme, sobald Sie eine größere Festplatte als die Quelle benötigen.

Wenn es sich nur um eine einmalige Sache handeln würde, wäre es trivial gewesen, das System hochzufahren und die Festplatte manuell zu erweitern. Ich möchte dies jedoch beim ersten Start automatisch erledigen.

Grundsätzlich müssen drei Aufgaben ausgeführt werden:

  • Erweitern Sie die Festplatte (fdisk/cfdisk usw.)
  • Größe des Volume-Pools ändern (im Fall von LVM)
  • Erweitern Sie das eigentliche Dateisystem

Obwohl es möglich wäre, dies per Skript zu tun, wollte ich es hier ansprechen, da ich bezweifle, dass ich der Einzige bin, der dies automatisiert tun möchte. Das Nächste, was ich gefunden habe, istraspi-konfigurationfür den Raspberry Pi, der hierfür ein automatisiertes Tool bietet.

Ich könnte den Code natürlich aus raspi-config übernehmen, aber dieser basiert auf vielen Annahmen, daher hatte ich gehofft, dass es vielleicht ein universelleres Tool gibt.

Antwort1

libguestfskönnte der Aufgabe gewachsen sein, kann es aber nicht an Ort und Stelle erledigen, Zitat:

Copy olddisk to newdisk, extending one of the guest's partitions to fill the extra 5GB of space.

    virt-filesystems --long -h --all -a olddisk

    truncate -r olddisk newdisk
    truncate -s +5G newdisk

    # Note "/dev/sda2" is a partition inside the "olddisk" file.
    virt-resize --expand /dev/sda2 olddisk newdisk

Wenn Sie dies als Klonschritt durchführen, sollte es funktionieren.

Antwort2

Es stellt sich heraus, dass growroot, das ist Teil vonCloud Initkann das. Ein vollständiges Beispiel dafür, wie das funktioniert, finden Sie in meiner Implementierung invmprep.

verwandte Informationen