1. Introduction
This document describes the manual in-place upgrade process for Proxmox VE using apt.
Scope: PVE 7 → 8, then PVE 8 → 9
Philosophy:
-
No script magic - you execute each command and understand what it does
-
The
pve7to8andpve8to9checklist tools are your safety net - run them before AND after major steps -
Known issues are documented where they occur, not buried at the end
|
Caution
|
These upgrades change the underlying Debian distribution (Bullseye → Bookworm → Trixie). This is a significant operation. Take it seriously. |
2. General Prerequisites
Before starting ANY upgrade, ensure:
-
❏ Tested backups of all VMs, containers, and host configurations
-
❏ Console/IPMI access - never rely solely on SSH during upgrades
-
❏ Minimum 5GB free disk space on root mount (10GB+ recommended)
-
❏ Healthy cluster state - all nodes online and communicating
-
❏ Critical workloads migrated away from the node being upgraded
-
❏ Time and focus - do not rush, do not multitask
3. Upgrade from PVE 7 to PVE 8
3.1. Phase 1: Get the Checklist Tool
The pve7to8 checklist tool is included in PVE 7.4-15 and later. You must upgrade to this version first.
apt update
apt dist-upgrade
pveversion
Verify output shows pve-manager/7.4-15 or higher. If not, repeat until you reach 7.4-15+.
3.2. Phase 2: Run Checklist and Resolve Issues
Run the checklist with full checks enabled:
pve7to8 --full
This tool identifies problems but does NOT fix them automatically. You must resolve each warning before proceeding.
Common issues at this stage:
-
Pending reboot required
-
Outdated package versions
-
Ceph not on Quincy 17.2 (required for hyper-converged setups)
-
Corosync configuration issues in clusters
|
Important
|
Do not proceed until pve7to8 --full reports no critical warnings.
|
3.3. Phase 3: Update APT Repositories
3.3.1. Update Debian Base Repository
Change from Bullseye to Bookworm:
sed -i 's/bullseye/bookworm/g' /etc/apt/sources.list
Verify the file looks correct:
cat /etc/apt/sources.list
Expected content (non-free-firmware is new in Bookworm):
deb http://ftp.debian.org/debian bookworm main contrib non-free non-free-firmware
deb http://ftp.debian.org/debian bookworm-updates main contrib non-free non-free-firmware
deb http://security.debian.org bookworm-security main contrib non-free non-free-firmware
3.3.2. Update Proxmox VE Repository
For enterprise subscription:
echo "deb https://enterprise.proxmox.com/debian/pve bookworm pve-enterprise" > /etc/apt/sources.list.d/pve-enterprise.list
For no-subscription (testing/home use):
echo "deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription" > /etc/apt/sources.list.d/pve-no-subscription.list
Remove any old repository files that still reference bullseye:
ls -la /etc/apt/sources.list.d/
# Review and edit/remove files still pointing to bullseye
3.3.3. Update Ceph Repository (Hyper-Converged Only)
|
Important
|
Ceph must already be running Quincy 17.2 before upgrading PVE. Upgrade Ceph first if needed. |
For enterprise:
echo "deb https://enterprise.proxmox.com/debian/ceph-quincy bookworm enterprise" > /etc/apt/sources.list.d/ceph.list
For no-subscription:
echo "deb http://download.proxmox.com/debian/ceph-quincy bookworm no-subscription" > /etc/apt/sources.list.d/ceph.list
3.3.4. Known Issue: Network Interface Name Changes
|
Warning
|
The kernel upgrade may cause network interface names to change (e.g., eth0 becomes enp3s0). Ensure you have IPMI/console access before proceeding. If you lose network after reboot, you will need console access to fix /etc/network/interfaces.
|
3.4. Phase 4: Perform the Upgrade
3.4.1. Refresh Package Index
apt update
If you see errors about missing repositories, go back and fix your sources.list files.
3.4.2. Known Issue: Package Conflict with proxmox-ve
The upgrade may fail if linux-image-amd64 conflicts with proxmox-ve. Remove it first:
apt remove linux-image-amd64
This removes the Debian kernel meta-package. PVE uses its own kernel (pve-kernel).
3.4.3. Known Issue: GRUB on UEFI with LVM Root
If your system boots via UEFI and uses LVM for root, install the UEFI grub package before upgrading:
[ -d /sys/firmware/efi ] && apt install grub-efi-amd64
3.4.4. Run the Distribution Upgrade
|
Important
|
Run this from console/IPMI, not SSH. SSH connections may drop during the upgrade. |
apt dist-upgrade
This will take 5-60+ minutes depending on disk speed.
3.4.5. Configuration File Prompts
During upgrade, you will be asked about configuration files. Recommended responses:
| File | Recommended | Notes |
|---|---|---|
|
No (keep current) |
Cosmetic only, auto-regenerated |
|
Yes (install maintainer’s) |
Unless you have custom LVM settings |
|
Yes (install maintainer’s) |
Unless you have custom SSH settings |
|
No (keep current) |
Unless you have NO custom kernel parameters |
3.5. Phase 5: Verify and Reboot
3.5.1. Re-run Checklist
pve7to8
Address any new warnings.
3.5.2. Reboot
reboot
You MUST reboot even if you were already running a 6.x kernel. The new userspace requires the new kernel ABI.
3.5.3. Known Issue: Network Hangs on Boot (NTPsec)
If the system hangs during boot waiting for network time sync, NTPsec is the cause.
Fix Option 1 - Switch to chrony (recommended):
apt install chrony
Fix Option 2 - Disable ntpsec-ntpdate:
apt remove ntpsec-ntpdate
If already stuck at boot: Boot into recovery mode and run:
chmod -x /etc/network/if-up.d/ntpsec-ntpdate
3.5.4. Known Issue: ZFS on UEFI Systems
If you boot from ZFS on UEFI, install systemd-boot after the upgrade:
apt install systemd-boot
proxmox-boot-tool status
3.6. Phase 6: Post-Upgrade Tasks
-
Clear browser cache and force-reload the web GUI (Ctrl+Shift+R, or Cmd+Alt+R on macOS)
-
Verify
pveversionshows 8.x -
In clusters: proceed with next node only after confirming this node is healthy
4. Upgrade from PVE 8 to PVE 9
4.1. Phase 1: Get the Checklist Tool
The pve8to9 checklist tool is included in PVE 8.4.1 and later. You must upgrade to this version first.
apt update
apt dist-upgrade
pveversion
Verify output shows pve-manager/8.4.1 or higher.
4.2. Phase 2: Run Checklist and Resolve Issues
Run the checklist with full checks enabled:
pve8to9 --full
4.2.1. Firmware Warning
Debian 12 (Bookworm) moved firmware from the non-free component to a new non-free-firmware component. You must add this to your sources to resolve the "missing microcode" warning.
1. Edit Sources List
Open the configuration file:
nano /etc/apt/sources.list
Append non-free-firmware to the end of your Debian repository lines.
-
Change this:
deb http://ftp.debian.org/debian bookworm main contrib -
To this:
deb http://ftp.debian.org/debian bookworm main contrib non-free-firmware
2. Update and Install
Refresh the package list and install the microcode package matching your CPU:
apt update
# For Intel CPUs (fixes your specific warning)
apt install intel-microcode
# For AMD CPUs
apt install amd64-microcode
3. Verify
After installation, you should see update-initramfs running in the output, which ensures the microcode is loaded at the next boot.
4.2.2. Known Issue: LVM Autoactivation Migration
If pve8to9 warns about LVM autoactivation, run the migration script:
/usr/share/pve-manager/migrations/pve-lvm-disable-autoactivation
4.2.3. Known Issue: systemd-boot Meta-Package
If pve8to9 suggests removing the systemd-boot meta-package (and you did not manually configure systemd-boot):
apt remove systemd-boot
4.2.4. Known Issue: Kernel Audit Messages
To avoid noisy audit messages during upgrade, disable the audit socket:
systemctl disable --now systemd-journald-audit.socket
|
Important
|
Do not proceed until pve8to9 --full reports no critical warnings.
|
4.3. Phase 3: Update APT Repositories
4.3.1. Update Debian Base Repository
Change from Bookworm to Trixie:
sed -i 's/bookworm/trixie/g' /etc/apt/sources.list
Verify the result:
cat /etc/apt/sources.list
4.3.2. Update Proxmox VE Repository
For PVE 9, you can use the new deb822 format (recommended) or classic format.
Best is to run sources udpate tool (might be only accessible after update but thats ok)
apt modernize-sources
Manual - New deb822 format (enterprise):
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
Remove the old .list file if it exists:
rm -f /etc/apt/sources.list.d/pve-enterprise.list
Manual - New deb822 format (no-subscription):
cat > /etc/apt/sources.list.d/pve-no-subscription.sources << 'EOF'
Types: deb
URIs: http://download.proxmox.com/debian/pve
Suites: trixie
Components: pve-no-subscription
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
EOF
Manual - Classic format:
sed -i 's/bookworm/trixie/g' /etc/apt/sources.list.d/pve-enterprise.list
# or
sed -i 's/bookworm/trixie/g' /etc/apt/sources.list.d/pve-no-subscription.list
4.3.3. Update Ceph Repository (Hyper-Converged Only)
|
Important
|
Ceph must be running Squid 19.2 before upgrading to PVE 9. |
For enterprise:
echo "deb https://enterprise.proxmox.com/debian/ceph-squid trixie enterprise" > /etc/apt/sources.list.d/ceph.list
For no-subscription:
echo "deb http://download.proxmox.com/debian/ceph-squid trixie no-subscription" > /etc/apt/sources.list.d/ceph.list
4.3.4. Known Issue: Network Interface Name Changes
Same as PVE 7→8. Interface names may change. Have console access ready.
You can use the pinning tool after upgrade if names change:
pve-network-interface-pinning
4.4. Phase 4: Perform the Upgrade
4.4.1. Refresh Package Index
apt update
4.4.2. Known Issue: Package Conflict with proxmox-ve
Same as PVE 7→8. Remove conflicting package first:
apt remove linux-image-amd64
4.4.3. Known Issue: GRUB on UEFI with LVM Root
Same as PVE 7→8:
[ -d /sys/firmware/efi ] && apt install grub-efi-amd64
4.4.4. Run the Distribution Upgrade
|
Important
|
Run this from console/IPMI, not SSH. |
apt dist-upgrade
4.4.5. Known Issue: LVM Thin Pool Check Failure
If you see "Check of pool pve/data failed" during upgrade:
lvconvert --repair pve/data
4.4.6. Known Issue: Ceph Full Mesh Network Restart
If using Ceph with FRR for full mesh networking, update /etc/network/interfaces to include:
post-up /usr/bin/systemctl is-active --quiet frr.service && /usr/bin/systemctl restart frr.service || true
4.4.7. Configuration File Prompts
| File | Recommended | Notes |
|---|---|---|
|
No (keep current) |
Auto-regenerated |
|
Yes (install maintainer’s) |
Unless custom LVM settings |
|
Yes (install maintainer’s) |
Unless custom SSH settings |
|
No (keep current) |
Unless no custom parameters |
|
Yes (install maintainer’s) |
Unless custom NTP settings |
4.5. Phase 5: Verify and Reboot
4.5.1. Check apt status
if its still running want to check the logs, look here:
tail -f /var/log/apt/term.log
# Ctrl + C to quit
if you lost access /track of the process or you might have missed a question to answer
sudo fuser -vki -TERM /var/lib/dpkg/lock /var/lib/dpkg/lock-frontend
sudo dpkg --configure --pending
4.5.2. Re-run Checklist
pve8to9
4.5.3. Reboot
It will warn you that APT is still running when its not done yet.
reboot
4.6. Phase 6: Post-Upgrade Tasks
-
Clear browser cache and force-reload web GUI
-
Verify
pveversionshows 9.x -
In clusters: HA groups are automatically migrated to HA rules
-
Optional: modernize apt sources with
apt modernize-sources
5. Additional Considerations
5.1. NVIDIA vGPU Compatibility
| PVE Version | Minimum NVIDIA GRID Version |
|---|---|
PVE 8 |
GRID 16.0+ (driver 535.54.06+) |
PVE 9 |
GRID 18.3+ (driver 570.158.02+) |
Upgrade NVIDIA drivers BEFORE upgrading PVE.
5.2. cgroupv2 Migration
PVE 8 deprecated cgroup v1. PVE 9 removes support entirely.
Containers running systemd older than version 230 (released 2016) will NOT work on PVE 9. Plan migration during PVE 8 lifecycle.
5.3. VM Live Migration
-
Always test migrations with non-production VMs first
-
CPU heterogeneity in clusters causes problems
-
Intel Skylake+ CPUs: target host needs kernel 6.2.16-5+ for restricted CPU types
5.4. PCI Passthrough on PVE 9
Kernel 6.14 may break some VMs using PCI passthrough. If affected, pin to pve-kernel 9.2+pve1 or newer.
5.5. Veeam Backup Compatibility
Veeam is incompatible with QEMU 10.0+ in PVE 9. Pin to pve-qemu 9.2+pve1 until Veeam releases a fix.
5.6. Clustered Environments
-
Upgrade one node at a time
-
Migration from older PVE to newer PVE works
-
Migration from newer PVE to older PVE does NOT work
-
Do not upgrade all nodes simultaneously
-
Verify cluster health after each node upgrade before proceeding