Xen Setup · 2 min read · Feb 05, 2026

Debian Wheezy: Xen-Disk-Image aufteilen und verkleinern

Hintergrund

Einer meiner Xen-virtuellen Server musste am Wochenende seine 400G Festplatte aufteilen und verkleinern, und ich wollte die Ausfallzeit minimal halten. Die Festplatte hatte 240G belegt, von denen 235G ein /backup-Verzeichnis waren, und die verbleibenden 5G waren für eine reguläre Debian-Linux-Installation vorgesehen. Ich wollte die Festplatte in zwei Festplatten aufteilen - eine 20GB Festplatte, die das Linux-System enthält, und eine 300G Festplatte, die als /backup gemountet wird. Dann könnte ich mein DRBD-Setup anwenden, um diese 300G Backup-Partition auf eine separate 2. Backup-Maschine zu replizieren.

Ich wollte nicht in die Situation geraten, eine Menge Daten auf dem physischen Host kopieren zu müssen, und ich wollte auf keinen Fall, dass die virtuelle Maschine währenddessen ausfällt.

Images einrichten

Die virtuelle Maschine hat ihr Disk-Image in /vm/domains/b1/disk.img und ein begleitendes swap.img, um das wir uns keine Sorgen machen müssen.

Problem:

losetup -a

Um alle verwendeten Loop-Geräte zu lokalisieren. In meinem Fall war /dev/loop20 das erste freie Gerät. Als nächstes werde ich ein Loopback-Gerät für das Image einrichten und es dann mounten:

mkdir -p /mnt/loop-copy-from /mnt/loop-copy-to
losetup /dev/loop20 /vm/domains/b1/disk.img
mount /dev/loop20 /mnt/loop-copy-from

Erstellen eines neuen leeren Sparse-Images

Jetzt werden wir /backup nicht verschieben, stattdessen werden wir alles andere in das neue 20G-Image verschieben. Wir erstellen eine Sparse-Image-Datei von 20G mit:

dd if=/dev/zero of=/vm/domains/b1/disk-root.img bs=1k count=1 seek=$(((20*1024*1024)-1))

Als nächstes müssen wir ein neues Loop-Gerät einrichten, ein Dateisystem erstellen und schließlich dieses neue Image mounten.

losetup /dev/loop21 /vm/domains/b1/disk-root.img
mkfs.ext3 /dev/loop21
mount /dev/loop21 /mnt/loop-copy-to

Root-Dateisystem kopieren

Jetzt werde ich alles von /mnt/loop-copy-from nach /mnt/loop-copy-to kopieren, außer dem 235G Backup-Verzeichnis:

rsync -arplogu --exclude "/backup" --stats --progress /mnt/loop-copy-from/ /mnt/loop-copy-to

Bestehendes Dateisystem bereinigen

Ich möchte alles auf /mnt/loop-copy-from außer dem Backup-Verzeichnis entfernen:

cd /mnt/loop-copy-from; ls | grep -v 'backup' | xargs rm -rf

Dann werden wir beide Geräte unmounten:

umount /mnt/loop-copy-from
umount /mnt/loop-copy-to

Bestehendes Dateisystem verkleinern

Ich muss jetzt /dev/loop20 von 400G auf 300G verkleinern:

e2fsck -f /dev/loop20
resize2fs /dev/loop20 300G

Boot-Daten kopieren

Und dann die Boot-Daten kopieren, bevor ich die Loopback-Geräte zerstöre:

dd if=/dev/loop20 of=/dev/loop21 bs=1 count=512
losetup -d /dev/loop20
losetup -d /dev/loop21

Xen-Konfiguration und VM-Boot

Jetzt die Xen-VM-Konfigurationsdatei bearbeiten, in meinem Fall /etc/xen/b1.cfg, und ändern:

disk = [
  'file:/vm/domains/b1/disk.img,xvda2,w',
  'file:/vm/domains/b1/swap.img,xvda1,w',
]

In:

disk = [
  'file:/vm/domains/b1/disk-root.img,xvda2,w',
  'file:/vm/domains/b1/disk.img,xvda3,w',
  'file:/vm/domains/b1/swap.img,xvda1,w',
]

Und schließlich:

xm create b1.cfg

Links

IO Digital Sec

Debian Wheezy XEN + Gast-Setup

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.