Übersicht
Eine VM-Disk unter Proxmox VE zu vergrößern ist ein Klick. Verkleinern wird dagegen offiziell nicht unterstützt: Der übliche Weg führt über eine GParted-Live-ISO, Herumklicken im Partitionseditor, danach qemu-img resize --shrink und das Nachziehen des GPT-Backup-Headers von Hand. Wer das einmal mit einer Windows-VM samt Recovery-Partition durchgespielt hat, weiß, wie viele Stellen dabei schiefgehen können.
pve-disk-shrink ersetzt diese Prozedur durch ein dialog-basiertes Tool, das komplett offline auf dem PVE-Host läuft. Keine Live-ISO, kein Eingriff im Gast. Das Tool erkennt Volume, Storage-Backend und Layout selbst, berechnet die kleinste sichere Zielgröße aus den tatsächlich belegten Daten und weigert sich, ein Volume kleiner zu machen als Daten plus gewählten Puffer.

Was unterstützt wird
Gäste: QEMU-VMs (qm) und LXC-Container (pct), gemeinsam in einer Liste.
VM-Storage-Backends: ZFS zvol, qcow2, raw LV, Ceph/RBD (mit aktiviertem KRBD).
Container-Backends: dir/raw-Image, LVM-thin, ZFS subvol.
Dateisysteme: ext2/3/4 und NTFS werden in-place verkleinert. Ein ZFS subvol wird über die refquota reduziert, der Inhalt bleibt unberührt.
Layouts: Beliebige GPT-Layouts. Du wählst die zu verkleinernde Partition, nachfolgende Partitionen werden unter Beibehaltung von Reihenfolge, Nummerierung und Identität nach unten verschoben. Das deckt auch Windows ab, also C: mit einer Recovery-Partition dahinter. Alternativ lässt sich nur der freie Platz hinter der letzten Partition einsammeln, ohne dass ein Dateisystem angefasst wird; das bietet das Tool als sichere Standardoption an, wann immer solcher Platz existiert.

Für LVM im Gast gibt es drei Modi: nur den freien Platz hinter der LVM-Partition einsammeln, die Volume Group per pvmove und pvresize kompaktieren (funktioniert auch mit XFS und gemischten Volume Groups, weil kein Dateisystem angefasst wird), oder ein verkleinerbares ext-Logical-Volume tatsächlich schrumpfen.
Was nicht geht
- XFS kann prinzipbedingt nicht geschrumpft werden. Eine reine XFS-Partition wird abgelehnt, XFS in einer Volume Group lässt sich aber über den Kompakt-Modus reduzieren.
- BitLocker und andere verschlüsselte Volumes werden erkannt und nie angefasst. Erst in Windows verkleinern oder BitLocker deaktivieren.
- MBR-Partitionstabellen werden abgelehnt (vorher zu GPT konvertieren). Eine Disk ganz ohne Partitionstabelle ist dagegen kein Problem.
- Ein NTFS muss sauber heruntergefahren sein, Hibernation und Fast Startup werden abgelehnt.
Ablauf
git clone https://github.com/Garfieldttt/pve-disk-shrink.git
cd pve-disk-shrink
chmod +x pve-disk-shrink.sh
./pve-disk-shrink.sh
Mit --dry-run zeigt das Tool den kompletten Plan samt berechneter Größen an, ohne etwas zu ändern. Der interaktive Ablauf:
- VM oder Container wählen. EFI-Disk, TPM-State, Cloud-Init und CD-Laufwerke werden gar nicht erst angeboten, die Boot-Disk ist markiert.
- Disk oder Volume wählen, bei partitionierten Disks zusätzlich die Partition.
- Läuft der Gast, wird zum Stoppen aufgefordert. Vorhandene Snapshots blockieren den Shrink und müssen nach expliziter Bestätigung gelöscht werden.
- Zielgröße wählen: belegte Daten plus 10 bis 50 Prozent Puffer oder eine manuelle Größe.
- Zusammenfassung prüfen und bestätigen. Vor dieser Bestätigung wird nichts geschrieben.

Danach läuft die Kette automatisch: Dateisystem-Check (e2fsck bzw. ntfsresize --info), Dateisystem verkleinern, Partition mit sgdisk schrumpfen (Startsektor, Typ, Name, GUID und GPT-Attribute bleiben erhalten, damit root=, fstab und die Windows-Bootkette weiter funktionieren), Backing-Device verkleinern (zfs set volsize, qemu-img resize --shrink, rbd resize oder lvreduce), GPT-Backup-Header ans neue Ende verschieben (sgdisk -e), Tabelle verifizieren (sgdisk -v) und die neue Größe in die Gast-Konfiguration zurückschreiben.
Sicherheitsmodell
Das Tool arbeitet nur am gestoppten Gast, die Zielgröße kann nie kleiner als die belegten Daten plus Puffer werden, jeder destruktive Schritt braucht eine explizite Bestätigung, und eine Cleanup-Routine räumt nbd-Devices, Partition-Mappings und aktivierte Volume Groups beim Beenden immer auf. Nach dem Shrink wird die GPT verifiziert; schlägt die Prüfung fehl, stoppt der Lauf mit dem Hinweis, den Gast nicht zu starten, und das ursprüngliche Partitionslayout steht im Log zum Nachbauen.
Ein Backup erstellt das Tool bewusst nicht. Vor dem Shrink gehört ein aktuelles Backup des Gasts dazu.
Alles wird nach /var/log/pve-disk-shrink/pve-disk-shrink.log geloggt.
Fazit
pve-disk-shrink macht aus der fehleranfälligen GParted-Prozedur einen reproduzierbaren, geführten Ablauf direkt auf dem Host, inklusive Windows-Layouts, Guest-LVM und Ceph. Repo und ausführliche Doku: github.com/Garfieldttt/pve-disk-shrink