Proxmox VE 9 is officially out, bringing a new Debian base and a wave of improvements to the platform. In this post, I’ll walk through a quick, practical in-place upgrade from Proxmox VE 8 to 9, focused purely on getting an existing system upgraded with minimal effort. This is not a replacement for the official documentation, and you should absolutely read the Proxmox upgrade guide first.

⚠️ 🚨Important: Always consult and follow the official Proxmox VE 8→9 upgrade guide first:
🔗 https://pve.proxmox.com/wiki/Upgrade_from_8_to_9

Make sure Ceph is upgraded before touching Proxmox. If your cluster uses Ceph storage, it must be running Ceph 19.2 “Squid” before upgrading Proxmox nodes, otherwise the upgrade won’t work properly. Ceph Reef to Squid guide: https://pve.proxmox.com/wiki/Ceph_Reef_to_Squid
If you’re upgrading over SSH, install and use tmux to avoid session drops: apt install tmux

Step 1 — Prepare the Node(s)

⚠️ Verify Backup and Free Space

Confirm you have tested backups of:

  • Virtual Machines and Containers
  • /etc/pve
  • /etc/network/interfaces
  • PBS backups (if used)

Ensure the root partition has at least ~5 GB free (10 GB or more recommended).

Check Current Proxmox Version

#!/bin/bash
pveversion

You need Proxmox VE 8.4.1 or newer before attempting the upgrade.


Step 2 — Update Proxmox VE 8 to Latest Patch

Update and install all current fixes:

#!/bin/bash
apt update
apt dist-upgrade

Reboot once done:

#!/bin/bash
reboot

Verify version again after reboot:

#!/bin/bash
pveversion

Step 3 — Merge Maintenance and Ceph Considerations

If you are in a cluster environment, migrate all tasks off the node you are about to update and enable maintenance mode to stop HA services:

#!/bin/bash
ha-manager crm-command node-maintenance enable <node-name>

If using Ceph:

#!/bin/bash
ceph osd set noout

This prevents data rebalancing while the node is offline for upgrade.

Also run the official Proxmox upgrade checker:

#!/bin/bash
pve8to9 --full

Resolve any issues reported before proceeding, if need to remove packages, perform the operation carefully.

One of the common error you may ran into it will be the systemd-boot package:

See the links for details: https://pve.proxmox.com/wiki/Upgrade_from_8_to_9#sd-boot-warning, otherwise, remove it using the following command:

#!/bin/bash
apt remove systemd-boot

Please run the pve8to9 --full command again to ensure no additional issues are present.

Try to fix everything before continuing, do not skip!

Step 4 — 📦Update APT Repositories for Debian & Proxmox VE 9

Proxmox VE 9 is based on Debian 13 “Trixie”, the source repository in the new deb822 style, so update the underlying Debian and Proxmox repositories:

/etc/apt/sources.list.d/debian.sources

#!/bin/bash
cat > /etc/apt/sources.list.d/debian.sources << EOF
Types: deb deb-src
URIs: http://deb.debian.org/debian/
Suites: trixie trixie-updates
Components: main non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg

EOF

Add Debian security:

#!/bin/bash
cat >> /etc/apt/sources.list.d/debian.sources << EOF
Types: deb deb-src
URIs: http://security.debian.org/debian-security/
Suites: trixie-security
Components: main non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
EOF

Verify the the file, use command:

#!/bin/bash
ls /etc/apt/sources.list.d/

Add Proxmox VE 9 Repositories

Enterprise repository

#!/bin/bash
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

No-Subscription repository

#!/bin/bash
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

Verify the the file, use command:

#!/bin/bash
ls /etc/apt/sources.list.d/

Step 5 — 📦Update Ceph Repositories (Optional)

If using Ceph and already running Ceph 19.2 Squid, update its repository entries:

Enterprise Ceph

#!/bin/bash
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

No-Subscription Ceph

#!/bin/bash
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

Verify the the file, use command:

#!/bin/bash
ls /etc/apt/sources.list.d/

Step 6 — Remove Old .list Repository Files and Refresh Packages

After adding the new repositories for Debian Trixie, Proxmox 9, and (optionally) Ceph Squid, remove any remaining old Debian/Bookworm or Proxmox 8 .list files to prevent conflicts during the upgrade.

Before deleting anything, you may want to back up old repo files, in case you need to inspect them later:

#!/bin/bash
mkdir -p ~/apt-repo-backups
cp /etc/apt/sources.list ~/apt-repo-backups/
cp -a /etc/apt/sources.list.d ~/apt-repo-backups/

Run this command:

#!/bin/bash
# Review old .list in the /etc/apt/sources.list.d files first
find /etc/apt/sources.list.d -type f -name '*.list' -print

# Remove all old .list files
find /etc/apt/sources.list.d -type f -name '*.list' -exec rm -fv {} \;

# Show current sources.list
cat /etc/apt/sources.list

# remove the sources.list file
rm /etc/apt/sources.list

With all new repositories in place:

#!/bin/bash
apt update  #ensure it is from the Trixie sources are listed.

Step 7 — Upgrade to Proxmox VE 9

If VMs just running on one node, the upgrade causes downtime cannot be avoided. It’s strongly recommended to shut down all VMs and containers before starting the Proxmox VE 8 to 9 upgrade.

Now proceed with the upgrade:

#!/bin/bash
apt dist-upgrade

During the process you will be prompted about configuration file decisions:

Click Yes on the Configuring libc6:amd64 Prompt:

FileSuggested Choice
/etc/issueN (Keep the current settings)
/etc/lvm/lvm.confY (use new maintainer version)
/etc/ssh/sshd_configN (Keep the current settings)
/etc/default/grubN (Keep the current settings, unless unchanged)
/etc/chrony/chrony.confY (Use maintain a version, if unchanged)

Review prompts and respond based on your customizations.

⚠️Important, also in the official documentation, if you're using UEFI mode with LVM, GRUB Might Fail To Boot, using the following commands to check:

#!/bin/bash
[ -d /sys/firmware/efi ] && echo "UEFI boot" || echo "Legacy BIOS boot"   # To check if your system are using UEFI.


# Installing the following correct grub meta-package to boot
[ -d /sys/firmware/efi ] && apt install grub-efi-amd64

# Command to check grub menu if needed: 
grep "^menuentry" /boot/grub/grub.cfg
Do not reboot if you see the following messages, instead, you want to fix that using the on-screen instruction.

Step 8 — Reboot & Verify

If the system boots directly into the BIOS after rebooting, use your USB key to start the system and select the Rescue option to attempt recovery.

After the upgrade completes:

#!/bin/bash
reboot

Verify you are now running Proxmox VE 9:

#!/bin/bash
pveversion

Step 9 — Restore Cluster Services

If in a cluster:

#!/bin/bash
ha-manager crm-command node-maintenance disable <node-name>

If using Ceph:

#!/bin/bash
ceph osd unset noout

Verify cluster status:

#!/bin/bash
pvecm status  $ Check the Proxmox cluster status
ceph -s  # verify the Ceph cluster is in a healthy state

Repeat for each node one at a time if needed.

Optional: after successfully upgraded, use command 'apt autoremove' to clean up, and we can also use the Proxmox VE Helper-Scripts to clean unsure kernel: bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/misc/kernel-clean.sh)"

Tips & Summary

  • Perform the upgrade one node at a time in a cluster to maintain quorum and reduce risk.
  • If using maintenance or HA, ensure all workloads have been migrated off the node before upgrading.
  • Test upgrades in a staging environment if possible.
  • Console access (iDRAC/iKVM) is recommended in case SSH drops.

Proxmox VE 9 introduces improvements in storage, networking, and overall system management. A careful, planed upgrade, updating repositories, and following the official checklist and repository changes — will help ensure a smooth transition from version 8 to version 9.