tmux bzw. screen, damit ein abgebrochener SSH-Tunnel nicht das Upgrade killt.cat /etc/network/interfaces
ip -br a
/)
df -h /
apt install -y tmux
tmux new -s pveupgrade
Mit Strg+B dann D detachen, mit tmux attach -t pveupgrade wieder rein.
qm list
Beispiel-Output: VMID 100 = Win2022, 101 = Debian-Nginx, 102 = DietPi-WG. Passe die IDs unten entsprechend an!
local oder ein NAS-Share) anlegen:vzdump 100 101 102 --mode snapshot --compress zstd --storage local --notes-template "pre-pve9-upgrade"
--mode snapshot erlaubt Backup bei laufender VM. Für Windows Server empfiehlt es sich trotzdem, vorher innerhalb Windows alle Services (AD, SQL, etc.) sauber zu stoppen bzw. konsistente Volume Shadow Copies zu nutzen. Alternativ VMs vor dem Backup herunterfahren.
mkdir -p /root/pve8-backup && cp -a /etc/network/interfaces /etc/hosts /etc/hostname /etc/resolv.conf /etc/pve /root/pve8-backup/ 2>/dev/null; tar czf /root/pve8-backup-$(date +%F).tar.gz /root/pve8-backup /etc/apt/sources.list /etc/apt/sources.list.d/
qm shutdown 101 && qm shutdown 102 && qm shutdown 100
Warte 1–2 Minuten, dann prüfe:
qm list
Alle VMs sollten stopped sein. Falls eine hängt:
qm stop <VMID>
cat /etc/apt/sources.list.d/pve-enterprise.list
Die Datei sollte exakt so aussehen (nicht auskommentiert!):
deb https://enterprise.proxmox.com/debian/pve bookworm pve-enterprise
Falls die Datei fehlt oder auskommentiert ist, neu anlegen:
echo "deb https://enterprise.proxmox.com/debian/pve bookworm pve-enterprise" > /etc/apt/sources.list.d/pve-enterprise.list
Falls eine No-Subscription-Repo aus alten Zeiten herumliegt: entfernen, damit keine Paket-Mischung entsteht:
rm -f /etc/apt/sources.list.d/pve-no-subscription.list /etc/apt/sources.list.d/pve-install-repo.list
Subscription-Status auf dem Host prüfen:
pvesubscription get
Erwartet: status: active. Falls nicht aktiv bzw. abgelaufen, im Web-UI unter Datacenter → Node → Subscription den Key neu einlesen oder erneuern:
pvesubscription update --force
apt update && apt dist-upgrade -y
pveversion
Falls ein neuer Kernel installiert wurde: jetzt einmal rebooten, bevor das 9er-Upgrade startet:
reboot
pve8to9 ausführenpve8to9 --full
Das Script zeigt am Ende eine Zusammenfassung wie:
TOTAL: ... PASSED: ... WARNINGS: ... FAILURES: ...
systemd-boot meta-package installed – nur entfernen falls das Script es verlangt UND du proxmox-boot-tool (ZFS on root, UEFI ohne Secure Boot) nutzt. Auf klassischem LVM/ext4 mit GRUB kannst du es einfach entfernen:
apt remove systemd-boot
systemd-boot-efi / systemd-boot-tools als Ersatz verlangt – dann erst:
apt install systemd-boot-efi systemd-boot-tools && apt remove systemd-boot
/usr/share/pve-manager/migrations/pve-lvm-disable-autoactivation --assume-yes
pve8to9 --full
sed -i 's/bookworm/trixie/g' /etc/apt/sources.list
Falls die Datei existiert (Enterprise-Setup):
[ -f /etc/apt/sources.list.d/pve-enterprise.list ] && sed -i 's/bookworm/trixie/g' /etc/apt/sources.list.d/pve-enterprise.list
cat > /etc/apt/sources.list.d/pve-enterprise.sources << 'EOF'
Types: deb
URIs: https://enterprise.proxmox.com/debian/pve
Suites: trixie
Components: pve-enterprise
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
EOF
Alte Listen-Datei entfernen (verhindert doppelte Repo-Einträge):
rm -f /etc/apt/sources.list.d/pve-enterprise.list
apt update
apt policy | grep -E "trixie|pve"
Es sollte die pve-enterprise-Repo mit trixie auftauchen, zusammen mit den Debian-Basis-Repos (trixie / trixie-updates / trixie-security). Keine Fehlermeldungen, kein 401! Bei 401 → pvesubscription update --force aus Schritt 4.1 erneut ausführen.
systemctl disable --now systemd-journald-audit.socket
apt dist-upgrade
Der Prozess dauert je nach Disk-Speed 5–60 Minuten. Während des Upgrades wirst du mehrfach zu Config-File-Merges befragt.
| Datei | Empfehlung |
|---|---|
/etc/issue | N – eigene Version behalten (wird eh neu generiert) |
/etc/lvm/lvm.conf | Y – Maintainer-Version (sofern nicht manuell angepasst) |
/etc/ssh/sshd_config | Y – Maintainer-Version (wechsel auf KbdInteractiveAuthentication) |
/etc/default/grub | N – eigene Version behalten (falls Kernel-Parameter gesetzt) |
/etc/chrony/chrony.conf | Y – Maintainer-Version |
| „Restart services during upgrade?" | Yes (Reboot folgt eh) |
| apt-listchanges Anzeige | q drücken zum Weitermachen |
pve8to9 --full
reboot
pveversion -v
Erwartet: proxmox-ve: 9.1.x, Kernel 6.14.x-pve oder 6.17.x-pve.
uname -r
ip -br a && pvesm status
/etc/network/interfaces an oder nutze das neue Pin-Tool:
pve-network-interface-pinning
https://<IP_DEINES_PROXMOX>:8006
Wichtig: Strg+Shift+R (bzw. ⌘+Alt+R) drücken, damit der Browser-Cache geleert wird.
qm start 100
Warte bis Windows hochgefahren ist, dann:
qm start 101
qm start 102
systemctl status nginx, Reverse-Proxy-URLs extern erreichbar?systemctl status wg-quick@wg0, Handshake eines Clients prüfen (wg show).apt modernize-sources
Erst mit n Preview anzeigen, dann mit erneutem Aufruf und Y anwenden.
/etc/sysctl.d/ – falls du in /etc/sysctl.conf Werte (z.B. net.ipv4.ip_forward=1 für WireGuard am Host) hattest:
cat /etc/sysctl.conf | grep -v '^#' | grep -v '^$' > /etc/sysctl.d/99-local.conf && sysctl --system
ip_forward oder ähnliches gesetzt hattest.
apt dist-upgradeapt -f install
dpkg --configure -a
Danach erneut:
apt dist-upgrade
[ -d /sys/firmware/efi ] && apt install grub-efi-amd64
Falls Server nicht mehr bootet: Proxmox VE ISO booten → Advanced → Rescue Boot → /etc/network/interfaces oder GRUB reparieren.
lvconvert --repair pve/data
Wenn alles schief geht: Proxmox VE 9 ISO frisch installieren, dann deine VM-Backups aus Schritt 2 zurückspielen:
qmrestore /var/lib/vz/dump/vzdump-qemu-100-<TIMESTAMP>.vma.zst 100
virtio-win-guest-tools.exe aktualisieren.pc-q35-9.2+pve1 pinnen (siehe Known Issues).Normal in PVE 9 – die Anzeige berücksichtigt jetzt den QEMU-Overhead. Solange der Ballooning-Device aktiv ist und der Gast-Agent läuft, zeigt das neue Feld Host memory usage den korrekten Wert. Falls falsch: BalloonService in Windows prüfen.