Kurztipp: Vergrößern einer NetBSD-domU (mit NetBSD-dom0)

(2008-10-31)

Vor kurzem hatte ich das Problem, dass ich einer domU zu wenig Festplattenspeicher zugewiesen habe. Hinterher ist man immer schlauer, und merkt dann auch, dass man mit 256 MB swap nicht weit kommt, wenn man die domU auslastet ;-). Blöderweise hat NetBSD (noch) kein funktionierendes Programm um das Dateisystem live zu verkleinern/vergrößern, sonst wäre die Änderung relativ kurz und schmerzlos.

Das bestehende resize_ffs (aus NetBSD-current vom 31.10.2008) ist leider nicht stabil und stürzte bei mir mit einem coredump ab.

Meine Installation, die ich hier beschrieben habe, setzt darauf, dass man Partitionen erstellt und xen diese direkt übergibt, sodass sozusagen „unter-partitioniert” wird, also in einer Partition erneut in der domU ein disklabel erstellt wird. Daher gibt es keine Möglichkeit (zumindest keine mir bekannte), auf der dom0 die Daten 1:1 zu kopieren auf ein neues, größeres Dateisystem. vnconfig möchte zumindest keine Partitionen „loop-mounten”.

Die Lösung ist etwas umständlich und setzt voraus, dass du genug freien Speicherplatz auf der Festplatte hast:

  1. Angenommen, die Festplatte heißt /dev/wd0, dann erstellen wir eine neue Partition, sagen wir /dev/wd0f, welche groß genug ist.
  2. In der Konfiguration der domU ergänzen wir das disk-Array mit dem Eintrag für die neue Festplatte, sodass es zum Beispiel so aussieht:
    disk = [ 'phy:/dev/wd0e,0x2,w', 'phy:/dev/wd0f,0x3,w' ]
    Wichtig ist dabei, dass die zweite Nummer nicht dieselbe ist, da sie zur Identifikation dient.
  3. In der domU haben wir dann ein neues block device namens /dev/xbd1. Diesem verpassen wir ein disklabel mit ausreichend Speicherplatz und Swapspace.
  4. Anschließend erstellen wir das Dateisystem mit newfs /dev/xbd1a und mounten es mit mount /dev/xbd1a /mnt. Via df -h können wir uns noch vergewissern, dass diesmal genügend Platz da ist.
  5. Sollte es sich um ein Live-System handeln, also um ein System mit kritischen Daten, die sich im Moment verändern, solltest du alle Dienste stoppen, sodass du einen möglichst konstanten Status des Systems hast, während du kopierst.
  6. Mithilfe von dump und restore kopieren wir das Dateisystem 1:1 auf das neue device:
    cd /; dump 0f - . | (cd /mnt; restore -rf - )
    Nach ca. 20 Minuten für 4 GB (auf meinem System) hat man dann eine exakte Kopie.
  7. Wir entfernen den alten Eintrag aus der domU-Konfiguration und starten die domU neu. Nun nochmal mit df -h und swapctl -l vergewissern das alles geklappt hat.

Logischerweise hat man anschließend zwar ein „Loch” in seiner Festplatte durch den nunmehr ungenutzten Speicher, den die domU vorher hatte, sofern man den nicht irgendwie wiederverwerten kann. Dafür hat man aber relativ problemlos seine domU migriert.

Möglicherweise gibt es eine geschicktere Variante mit dem Live-Migration-Feature von xen. Sofern du damit Erfahrungen gemacht hast, insbesondere unter NetBSD, kontaktiere mich bitte.