Cloud and Self-Hosting

Proxmox VE 8 to 9 Upgrade Guide (Debian Bookworm to Trixie)

Upgrade Proxmox VE 8.4 to 9 step by step: pve8to9 --full, trixie .sources repos, apt dist-upgrade, apt modernize-sources and the mixed suites FAIL fix.

By Amjid Ali · · Updated · 6 min read

proxmox ve upgrade 8 to 9
In this article
  1. Quick steps
  2. In-place upgrade or fresh install?
  3. Step 1: check the prerequisites
  4. Step 2: run the pve8to9 checklist
  5. Step 3: move guests off the node (clusters)
  6. Step 4: switch the repositories to trixie
  7. Fix: "FAIL: found mixed old and new package repository suites"
  8. Step 5: run the upgrade
  9. Step 6: verify the upgrade
  10. Step 7: modernise the remaining sources (apt modernize-sources)
  11. Troubleshooting after the upgrade
  12. Upgrading Proxmox Backup Server too?

To upgrade Proxmox VE 8 to 9, bring the node to the latest 8.4, back up every VM and container, run pve8to9 --full until it shows no failures, switch all Debian and Proxmox repositories from bookworm to trixie, then run apt update and apt dist-upgrade and reboot. In a cluster, upgrade one node at a time after migrating its guests away. The most common blocker, FAIL: found mixed old and new package repository suites, means one repository file still says bookworm.

This is the in-place method from the official Proxmox wiki, the same one I used on the nodes in my homelab cluster. It applies to Proxmox VE 8.4 to the current 9.x release (9.2 at the time of this update, with kernel 7.0 and QEMU 11).

Proxmox VE 8 is end of life. The Proxmox support table lists 8.x support ending in August 2026, after Debian 12 Bookworm security updates stopped in July 2026. If you are still on 8, plan this upgrade now.

Quick steps

  1. apt update && apt dist-upgrade until pveversion shows 8.4.1 or newer.
  2. Back up all guests and /etc, /etc/pve.
  3. pve8to9 --full and fix every FAIL and WARN.
  4. Replace bookworm with trixie in every repository file; use .sources files for Proxmox and Ceph.
  5. apt update, then pve8to9 --full again.
  6. apt dist-upgrade, answer the config prompts, reboot.
  7. Check pveversion, then run apt modernize-sources.

In-place upgrade or fresh install?

  • In-place upgrade keeps your configuration, storage definitions and guests where they are. It is the normal path and what this guide covers.
  • Fresh install from the Proxmox VE 9 ISO and restore of backups is cleaner if the node has years of manual tweaks or third-party packages, or if you are changing disks anyway.

Either way you need working backups first. If you run Proxmox Backup Server, see my Proxmox Backup Server guide, and keep a copy of the host configuration as described in backing up the Proxmox host configuration.

Step 1: check the prerequisites

Requirement Detail
Proxmox VE version Latest 8.4, at least 8.4.1 on every node
Ceph (if hyperconverged) Upgrade Quincy or Reef to Ceph 19.2 Squid first
Backups Tested backups of all VMs and CTs, plus /etc and /etc/pve
Disk space At least 5 GB free on /, ideally 10 GB or more
Access IPMI, iKVM or a physical console, not only SSH or the web shell
Cluster All nodes online and quorate, no HA errors

Bring the node to the latest 8.4:

apt update
apt dist-upgrade
pveversion
pve-manager/8.4.x/... (running kernel: 6.8.12-x-pve)

Check free space and start a tmux session so a dropped SSH connection does not kill the upgrade:

df -h /
apt install tmux
tmux new -s upgrade

If the connection drops, log back in and run tmux attach -t upgrade.

Step 2: run the pve8to9 checklist

pve8to9 --full

The script only reports, it changes nothing. It ends with a summary like this:

= SUMMARY =

TOTAL:    <n>
PASSED:   <n>
SKIPPED:  <n>
WARNINGS: <n>
FAILURES: 0

Fix every FAILURE before you continue, and read every WARNING. The ones I see most:

  • systemd-boot meta-package installed. Remove it with apt remove systemd-boot unless you set up systemd-boot by hand. Proxmox manages its own boot loader through proxmox-boot-tool.
  • LVM autoactivation. If you use shared LVM storage (iSCSI or FC), run /usr/share/pve-manager/migrations/pve-lvm-disable-autoactivation. It is optional for local-only LVM.
  • Running guests. In a cluster, migrate them to another node first.
  • Old proxmox-ve version. You skipped Step 1; update to the latest 8.4.

Step 3: move guests off the node (clusters)

Live-migrate VMs and migrate containers to other nodes from the GUI or with qm migrate and pct migrate. Upgrade one node at a time: a cluster runs fine with mixed 8.4 and 9.x nodes during the upgrade window, but do not leave it that way longer than needed.

Step 4: switch the repositories to trixie

This is the step where most upgrades go wrong, so do it carefully.

Debian base repositories

sed -i 's/bookworm/trixie/g' /etc/apt/sources.list

On some systems the Debian lines are already in /etc/apt/sources.list.d/debian.sources. In that case run the same sed on that file.

Proxmox VE repository

Pick one of the two, matching what you use today.

With a subscription, create /etc/apt/sources.list.d/pve-enterprise.sources:

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
rm /etc/apt/sources.list.d/pve-enterprise.list

Without a subscription, create /etc/apt/sources.list.d/proxmox.sources:

cat > /etc/apt/sources.list.d/proxmox.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

Then remove the old Proxmox VE 8 no-subscription line wherever it lives. The file name depends on how it was added: pve-no-subscription.list, pve-install-repo.list (the name the Debian install guide uses) or a line inside sources.list. If you are on no-subscription, also disable the enterprise repository so it does not return 401 Unauthorized; my guide to disabling the Proxmox enterprise repository covers that for both versions.

Ceph repository (also needed if Ceph is not in use)

The installer adds a Ceph repository even on nodes without Ceph, so update it too. With a subscription:

cat > /etc/apt/sources.list.d/ceph.sources <<'EOF'
Types: deb
URIs: https://enterprise.proxmox.com/debian/ceph-squid
Suites: trixie
Components: enterprise
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
EOF

Without a subscription:

cat > /etc/apt/sources.list.d/ceph.sources <<'EOF'
Types: deb
URIs: http://download.proxmox.com/debian/ceph-squid
Suites: trixie
Components: no-subscription
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
EOF
rm -f /etc/apt/sources.list.d/ceph.list

Also remove any download.ceph.com repository and any bookworm-backports line.

Check that nothing still says bookworm

grep -rn bookworm /etc/apt/sources.list /etc/apt/sources.list.d/

This must print nothing (third-party repositories aside, see below). Then refresh and check the sources:

apt update
apt policy

Every Debian and Proxmox entry in apt policy should show trixie. Run the checklist once more:

pve8to9 --full

Fix: "FAIL: found mixed old and new package repository suites"

If you search for this error, this is the section you want. pve8to9 prints something like:

FAIL: found mixed old and new package repository suites, fix before upgrading! Mismatches:
found suite trixie at in /etc/apt/sources.list:1
found suite bookworm at in /etc/apt/sources.list.d/pve-install-repo.list:1
Configure the same base-suite for all Proxmox and Debian provided repos and ask original vendor for any third-party repos.
E.g., for the upgrade to Proxmox VE 9 use the 'trixie' suite.

It means you changed some repository files to trixie but at least one still points at bookworm. The message tells you exactly which file and line. To fix it:

  1. Open each file listed with bookworm, for example nano /etc/apt/sources.list.d/pve-install-repo.list.
  2. If it is a Proxmox or Debian repository you have already recreated as a .sources file in Step 4, delete the old .list file. Otherwise change bookworm to trixie in it.
  3. If it is a third-party repository (for example a monitoring agent), comment it out until the vendor publishes a Trixie version.
  4. Run grep -rn bookworm /etc/apt/sources.list /etc/apt/sources.list.d/ until it prints nothing, then apt update and pve8to9 --full again.

The Updates > Repositories page in the GUI shows the same mismatch as a warning, which is a handy way to spot the file.

Never mix bookworm and trixie on purpose, for example to keep an old package. That leads to a broken dependency tree.

Step 5: run the upgrade

Inside your tmux session:

apt update
apt dist-upgrade

Use dist-upgrade (or full-upgrade), never apt upgrade. You will be asked about changed configuration files. The wiki's guidance:

File What to choose
/etc/issue Keep current version (it is regenerated anyway)
/etc/lvm/lvm.conf Install the maintainer's version, unless you edited it
/etc/default/grub Keep current version if unsure (keeps IOMMU and other kernel options)
/etc/chrony/chrony.conf Install the maintainer's version, unless you edited it

If you see W: (pve-apt-hook) You are attempting to remove the meta-package 'proxmox-ve'!, stop and answer no. It means a Proxmox repository is missing or still on bookworm. Go back to Step 4.

On UEFI systems with root on LVM, the wiki also recommends making sure the EFI GRUB package is installed:

[ -d /sys/firmware/efi ] && apt install grub-efi-amd64

When dist-upgrade finishes, reboot even if you already used a newer opt-in kernel on 8.4:

reboot

Step 6: verify the upgrade

pveversion
cat /etc/debian_version
uname -r
pve-manager/9.x.x/... (running kernel: 7.0.x-x-pve)
13.x
7.0.x-x-pve

Then:

  1. Clear the browser cache and force-reload the web UI (Ctrl+Shift+R).
  2. Check that every VM and container starts and that storage is online under Datacenter > Storage.
  3. Run pve8to9 --full once more to confirm a clean state.
  4. In a cluster, repeat the whole process node by node. HA groups are converted to the new HA rules once every node runs Proxmox VE 9.

Step 7: modernise the remaining sources (apt modernize-sources)

Debian 13 still reads .list files, but apt warns about them and .sources is the format Proxmox VE 9 uses. Convert what is left:

apt modernize-sources

Answer n the first time to see what it would change, run it again and answer Y to apply. The old files are kept as .list.bak. After a clean apt update, remove them:

apt update
rm /etc/apt/sources.list.d/*.list.bak

Troubleshooting after the upgrade

No network after reboot. Network interface names can change with the new kernel and systemd (a different suffix on the same card, for example), so vmbr0 no longer finds its port. From the console, compare ip link with /etc/network/interfaces, fix the name and run ifreload -a. Proxmox VE 9 includes pve-network-interface-pinning to pin names to stable nicX names so it does not happen again. If ifreload is missing, see fixing "you need ifupdown2 to reload network configuration".

PCI or GPU passthrough VM will not start. Some passthrough setups broke with the newer kernel. As a workaround, boot the previous kernel from the boot menu and pin it with proxmox-boot-tool kernel pin <version> until a fixed kernel is out. Also check your IOMMU options survived in /etc/default/grub or /etc/kernel/cmdline; see my GPU passthrough guide.

401 Unauthorized from enterprise.proxmox.com. With a subscription, refresh it with pvesubscription update --force. Without one, disable the enterprise and Ceph enterprise repositories.

Settings in /etc/sysctl.conf ignored. Debian 13 no longer reads that file. Move your settings to a file such as /etc/sysctl.d/90-custom.conf and run sysctl --system.

/tmp filling RAM or files vanishing. /tmp is now a tmpfs that can use up to half the memory, and old files in /tmp and /var/tmp are cleaned automatically. Do not keep anything important there.

Veeam backups fail. Veeam did not support QEMU machine version 10.0 or newer at the time the wiki was written. Pin affected VMs to machine version 9.2+pve1 until your Veeam version supports it.

NVIDIA vGPU. Use GRID 18.3 (driver 570.158.02) or newer before you upgrade.

Upgrading Proxmox Backup Server too?

Proxmox Backup Server 3 to 4 is a separate upgrade with its own checker (pbs3to4) and the pbs-no-subscription repository. Follow the official PBS 3 to 4 upgrade guide for that box.

For minor updates once you are on 9.x (for example 9.1 to 9.2), you do not need any of the above: see how to upgrade Proxmox VE to the latest point release.

Frequently asked questions

How do I upgrade Proxmox VE 8 to 9?+

Update to the latest 8.4 with apt update and apt dist-upgrade, back up your guests, run pve8to9 --full and fix every FAIL, change all Debian and Proxmox repositories from bookworm to trixie, run apt update and apt dist-upgrade, then reboot. In a cluster, do one node at a time after moving its guests away.

What does "FAIL found mixed old and new package repository suites" mean?+

The pve8to9 checker found some apt sources on trixie and others still on bookworm. Usually /etc/apt/sources.list was changed but a file in /etc/apt/sources.list.d, such as pve-install-repo.list or pve-no-subscription.list, still says bookworm. Change or remove every bookworm entry so all Debian and Proxmox repos use trixie, then run pve8to9 again.

What does apt modernize-sources do on Proxmox VE 9?+

It converts old one-line .list repository files into the deb822 .sources format that Debian 13 and Proxmox VE 9 use. Run it after the upgrade, answer n first to preview, then run it again and answer Y. The old files are kept with a .bak suffix so you can delete them once apt update is clean.

Can I upgrade from Proxmox VE 7 directly to 9?+

No. Major upgrades must be done one release at a time. Upgrade 7 to 8 with pve7to8 first, update to the latest 8.4, then follow the 8 to 9 steps.

Is Proxmox VE 8 still supported?+

No. The Proxmox support table lists Proxmox VE 8 end of life as August 2026, after Debian 12 Bookworm security support ended in July 2026. Nodes still on 8.x should be upgraded to 9.

How long does the Proxmox 8 to 9 upgrade take?+

It depends mostly on storage speed. On SSD or NVMe it is a short job, while Proxmox notes it can take 60 minutes or more on slow spinning disks. Add time for the reboot and for checking your guests afterwards, per node.

Sources

  1. Upgrade from 8 to 9, Proxmox Server Solutions
  2. Package Repositories, Proxmox Server Solutions
  3. Proxmox VE Roadmap, Proxmox Server Solutions
  4. Proxmox VE FAQ (support table), Proxmox Server Solutions

Related videos

Video library
  • Cloud and Self-Hosting

    Upgrade Proxmox VE 8 to 9 in Cluster with Ceph | Full Step-by-Step Guide 2025

    · 18:46 · 3.6K views

    Watch on YouTube
  • Cloud and Self-Hosting

    How to Upgrade Proxmox to 8.3 Without a Subscription - Step-by-Step Guide

    · 4:20 · 5.9K views

    Watch on YouTube