How to upgrade Proxmox VE 7 to Proxmox VE 8
This guide describes an in-place upgrade of a Proxmox VE 7 node to Proxmox VE 8 with apt. The upgrade moves the system from Debian 11 Bullseye to Debian 12 Bookworm and replaces the 5.15 kernel with a newer one. Plan for downtime: the node must be rebooted at least once, and usually twice.
Proxmox VE 7 reached end of life at the end of July 2024, and Proxmox VE 8 reached end of life on 31 August 2026. Upgrading to version 8 is a required intermediate step, but it does not leave you on a supported release. After completing this guide, plan the next upgrade to Proxmox VE 9.
Before you start
Requirements
Check the following before touching any repository:
- all nodes run the latest Proxmox VE 7.4 packages (
pve-manager7.4-15 or newer); - at least 5 GB of free space on the root file system;
- the cluster is healthy, if the node is part of a cluster;
- you have access to the server that does not depend on its network, such as IP-KVM;
- a valid and tested backup of all virtual machines and containers exists.
Check free space on the root file system:
df -h /
Back up every virtual machine and container before the upgrade and make sure the backups can be restored. A major upgrade replaces the base system, the kernel and the bootloader packages. If something goes wrong, a restore is the only reliable way back. Keep the backups outside the node being upgraded, for example on a separate storage or in INTROSERV Backup Service. Also copy /etc/pve, /etc/network/interfaces, /etc/passwd and /etc/resolv.conf.
If you have a hyper-converged Ceph cluster, it must run Ceph 17.2 Quincy before you start. Check the version in the Ceph panel of each node. If the cluster runs Octopus or Pacific, upgrade Ceph to Quincy first and only then continue with this guide.
If Proxmox Backup Server is installed on the same host, upgrade it from version 2 to version 3 before upgrading Proxmox VE. Follow the official Proxmox Backup Server 2 to 3 upgrade guide.
How to connect to the node
Do not run the major upgrade from the Shell (console) in the Proxmox VE web interface. The web console is served by Proxmox VE services that restart during the upgrade, and the session will break in the middle of the process.
Connect over SSH or through IP-KVM. With SSH, start a tmux session so that the upgrade keeps running if the connection drops:
apt update apt install tmux tmux new -s upgrade
If the connection is lost, reconnect and return to the session:
tmux attach -t upgrade
The safest option is IP-KVM, because it keeps working even if the network on the node does not come up after the reboot. To connect to a dedicated server through IP-KVM, see Connecting to IDRAC KVM or IP-KVM Access Guide via OpenVPN (DC2, DC3 Servers).
Virtual machines and containers on the node
Shut down the virtual machines and containers on the node, or migrate them to another node if they must keep running. Migration from an older Proxmox VE version to a newer one is supported. Migration from a newer version back to an older one is not supported.
If the node is part of a cluster, upgrade the nodes one at a time and put each node into maintenance mode before upgrading it. Maintenance mode moves HA-managed guests to other nodes: ha-manager crm-command node-maintenance enable <node>. Guests that are not managed by HA are not moved automatically, so migrate or shut them down manually. A reboot does not clear maintenance mode. After the node is upgraded and rebooted, disable it manually: ha-manager crm-command node-maintenance disable <node>.
Step 1. Update Proxmox VE 7 to version 7.4
The pve7to8 checker and a safe upgrade path are available only on the latest 7.4 packages. You can install the updates in the web interface or from the command line.
Configure the repositories
Open the node in the web interface and go to Updates → Repositories.
If you do not have a paid subscription, select the pve-enterprise repository and click Disable. This repository requires a subscription key.

Click Add, select No-Subscription and click Add in the dialog.

If you have a paid subscription, keep the pve-enterprise repository and skip this part.
Install the updates
Go to Updates and click Refresh. Wait until the package list is updated.

Click Upgrade. A terminal window opens. When asked to continue, enter Y and press Enter.

Wait until the process finishes and do not close the window. At the end, the output asks you to reboot the node.

The same update from the command line. Without a paid subscription, first disable the enterprise repository and add the no-subscription one, as in the web interface above:
sed -i 's/^deb/#deb/' /etc/apt/sources.list.d/pve-enterprise.list echo "deb http://download.proxmox.com/debian/pve bullseye pve-no-subscription" > /etc/apt/sources.list.d/pve-no-subscription.list
Then install the updates:
apt update apt dist-upgrade
Debian 11 is no longer supported, and its packages may eventually be moved from the regular mirrors to archive.debian.org. If apt update returns 404 errors for bullseye, replace the Debian lines in /etc/apt/sources.list with:
deb http://archive.debian.org/debian bullseye main contrib deb http://archive.debian.org/debian-security bullseye-security main contrib
These lines are needed only to finish Step 1. In Step 3, replace them with the Bookworm lines shown there instead of running sed.
Reboot and check the version
Reboot the node:
reboot
After the node starts, refresh the browser page and check the version in the node Summary, or run:
pveversion
The output must show 7.4-15 or newer.

Step 2. Run the pve7to8 checker
Proxmox VE 7.4 includes the pve7to8 script. It only checks the system and reports problems; it does not change anything. Run it with all checks enabled:
pve7to8 --full

Review the result:
FAILitems must be fixed before the upgrade;WARNitems must be read and evaluated, even if they do not block the upgrade;- after each fix, run the script again to confirm the problem is gone.
Remove packages, plugins and third-party storage modules that are not supported by Proxmox VE 8 before you continue. A third-party storage plugin must have a version compatible with Proxmox VE 8, otherwise wait until its author releases one.
If Proxmox VE was installed on top of a plain Debian 11 system and not from the Proxmox VE ISO, check whether the linux-image-amd64 package is installed. It conflicts with the Proxmox VE kernel packages and can make apt try to remove the proxmox-ve package. Remove it before you continue: apt remove linux-image-amd64.
Step 3. Switch the repositories to Bookworm
Debian repositories
Replace Bullseye with Bookworm in the main sources list:
sed -i 's/bullseye/bookworm/g' /etc/apt/sources.list
If you switched to archive.debian.org in Step 1, sed would point the lines to a Bookworm path that does not exist on the archive. Replace the content of /etc/apt/sources.list with the standard Debian 12 lines instead:
deb http://deb.debian.org/debian bookworm main contrib deb http://deb.debian.org/debian bookworm-updates main contrib deb http://security.debian.org/debian-security bookworm-security main contrib
Then make sure no Bullseye entries remain in any file:
grep -r bullseye /etc/apt/sources.list /etc/apt/sources.list.d/
If the command finds lines, update them to Bookworm or comment them out with #. Remove any backports lines: the upgrade was not tested with packages from backports.
Also check that there are no held or half-installed packages. Both commands must return empty output:
apt-mark showhold dpkg --audit
Proxmox VE repository
The repository file name depends on how the repository was added. List the files first:
ls /etc/apt/sources.list.d/
Without a subscription, update the file that contains the pve-no-subscription line. On a system installed from the ISO, this is usually pve-install-repo.list:
sed -i 's/bullseye/bookworm/g' /etc/apt/sources.list.d/pve-install-repo.list
The correct line for Proxmox VE 8 without a subscription is:
deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription
On some systems the line also contains [arch=amd64] after deb. This is fine, keep it.
Make sure the enterprise repository is disabled: if pve-enterprise.list exists, its line must be commented out with #, as it is after disabling it in Step 1.
With a paid subscription, write the enterprise repository and make sure no pve-no-subscription line remains active in other files:
echo "deb https://enterprise.proxmox.com/debian/pve bookworm pve-enterprise" > /etc/apt/sources.list.d/pve-enterprise.list
Ceph repository
Skip this part if Ceph is not installed on the node.
With a paid subscription:
echo "deb https://enterprise.proxmox.com/debian/ceph-quincy bookworm enterprise" > /etc/apt/sources.list.d/ceph.list
Without a subscription:
echo "deb http://download.proxmox.com/debian/ceph-quincy bookworm no-subscription" > /etc/apt/sources.list.d/ceph.list
If apt update returns a 401 error for the enterprise Ceph repository, refresh the subscription with pvesubscription update --force and try again.
Refresh the package index
apt update
The output must not contain errors. Every line must point to bookworm.
Step 4. Upgrade the system to Proxmox VE 8
Start the upgrade:
apt dist-upgrade
The duration depends on the speed of the root disk: a few minutes on SSD, up to an hour or more on slow HDD.
Prompts during the upgrade
If a page with release notes opens at the beginning, press q to close it and continue.
When asked whether to restart services automatically during package upgrades, select Yes with the arrow keys and press Enter.

Configuration file prompts
During the upgrade, apt asks what to do with configuration files that were changed both by you and by the package. Press D to see the difference before answering. Recommended answers for common files:
/etc/issue: keep your version (N). Proxmox VE regenerates this file at boot, it only affects the login screen;/etc/lvm/lvm.conf: install the package maintainer's version (Y) if you did not edit the file yourself;/etc/apt/sources.list.d/pve-enterprise.list: ifaptasks about this file, keep your version (N), otherwiseaptoverwrites the repository you configured in Step 3;/etc/ssh/sshd_config: if you did not edit the file, install the maintainer's version (Y), it replaces the deprecatedChallengeResponseAuthenticationoption withKbdInteractiveAuthentication. If you changed SSH settings yourself, compare the files carefully;/etc/default/grub: this prompt usually appears only if you changed the file, for example to add kernel parameters. Check the difference; if unsure, keep your version (N).
On a system that boots in UEFI mode with root on LVM, GRUB may fail to boot after the upgrade with the error disk `lvmid/...' not found. On such a system, install the correct GRUB package before rebooting:
[ -d /sys/firmware/efi ] && apt install grub-efi-amd64
Run this command on UEFI systems that boot with GRUB, which is the default for installations from the Proxmox VE ISO with root on LVM. On a legacy BIOS system it does nothing. Skip it if root is on ZFS: such systems boot through proxmox-boot-tool and are not affected.
Check the result
When apt dist-upgrade finishes without errors, run the checker again:
pve7to8 --full
Before the reboot, the checker can show WARN items about the running kernel and about LXCFS still using the old FUSE library. This is expected: both disappear after you reboot into the new kernel in Step 5. There must be no FAIL items.

Step 5. Reboot into the new kernel
Reboot the node. This is required even if you already used the opt-in 6.2 kernel on Proxmox VE 7:
reboot
The new kernel can rename network interfaces on some hardware. If the node does not respond on the network after the reboot, connect through IP-KVM, check the current interface names with ip link, and update them in /etc/network/interfaces. Then apply the configuration with ifreload -a.
Step 6. Check the result
Clear the browser cache or force-reload the web interface with Ctrl+Shift+R (Cmd+Shift+R on macOS). Check the version in the node Summary or with:
pveversion

Start the virtual machines and containers and check that they work. In a cluster, disable maintenance mode on the node and continue with the next node, starting again from the requirements check.
Systems that boot in UEFI mode through proxmox-boot-tool, usually with root on ZFS installed from the ISO, get a pve7to8 warning about the systemd-boot package after the upgrade. Install the package only if the checker reports this warning. On other systems it is not needed, and its installation script can replace GRUB as the bootloader.
Troubleshooting
The upgrade wants to remove proxmox-ve
The message W: (pve-apt-hook) You are attempting to remove the meta-package 'proxmox-ve'! means that some repository is still configured for Bullseye or does not exist for Bookworm. Check all files in /etc/apt/sources.list.d/, fix the repositories and run apt update again. Do not confirm the removal.
The upgrade was interrupted
If the connection was lost or the upgrade stopped halfway, reconnect to the tmux session or log in again and run:
dpkg --configure -a apt -f install apt dist-upgrade
Dependency errors for Ceph packages
If apt dist-upgrade reports unmet dependencies for Ceph packages on a node without Ceph, add the Ceph Quincy no-subscription repository from Step 3 and run apt update again. Some Proxmox VE packages can require it during the upgrade.
The node does not boot
Connect through IP-KVM to see the boot error. For GRUB problems, see the official Recover From Grub Failure page.
What's next
Proxmox VE 8 no longer receives updates. Plan the upgrade to Proxmox VE 9 on Debian 13 Trixie, which follows the same procedure with the pve8to9 checker.
If you prefer not to perform major upgrades yourself, INTROSERV System Administration specialists can plan and carry out the upgrade for you.