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 -aUm 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-tolosetup /dev/loop20 /vm/domains/b1/disk.imgmount /dev/loop20 /mnt/loop-copy-fromErstellen 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.imgmkfs.ext3 /dev/loop21mount /dev/loop21 /mnt/loop-copy-toRoot-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-toBestehendes 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 -rfDann werden wir beide Geräte unmounten:
umount /mnt/loop-copy-fromumount /mnt/loop-copy-toBestehendes Dateisystem verkleinern
Ich muss jetzt /dev/loop20 von 400G auf 300G verkleinern:
e2fsck -f /dev/loop20resize2fs /dev/loop20 300GBoot-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=512losetup -d /dev/loop20losetup -d /dev/loop21Xen-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.cfgLinks
IO Digital Sec
Debian Wheezy XEN + Gast-Setup
Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.