Upgrade PVE 8 to 9 with systemd-boot and a ZFS rpool on UEFI, no secure boot. The upgrade itself is easy, but systemd-boot needs a couple of extra steps the forum thread never settles.

Back up first, and not just the VMs
Run vzdump on everything. Then grab /etc/pve, /etc/network/interfaces, and the output of zpool status. If the bootloader breaks, the pool is still there, but the config files are the annoying part to rebuild.
Update PVE 8 fully before the upgrade
Get every package current on 8 first. A half-updated 8 is the fastest way to a broken 9.
apt update && apt full-upgrade -y
Reboot, then check pveversion. It should show the latest 8.x.
Switch repos from 8 to 9
Edit /etc/apt/sources.list and the files under /etc/apt/sources.list.d/. Change bookworm to trixie. The Proxmox repo line should look like:
deb http://download.proxmox.com/debian/pve trixie pve-no-subscription
Also update the Ceph repo if you use it, same word change.

Run the upgrade
apt update && apt dist-upgrade -y
This pulls in the new kernel, new systemd, new ZFS. It takes a while. Don’t interrupt it.
Now the systemd-boot part
PVE 9 uses a newer systemd-boot. The bootloader on the ESP needs updating. If you skip this, the box can boot the old kernel and then get weird.
Check which disk holds the ESP:
lsblk -o NAME,PARTLABEL,MOUNTPOINT | grep -i esp
Usually it’s a small vfat partition on the rpool disk. Then reinstall the bootloader:
proxmox-boot-tool refresh
If that complains, run it with the disk path:
proxmox-boot-tool format /dev/sdX2 --force
Replace sdX2 with your actual ESP partition. Then refresh again.
Reboot and verify
Reboot. Check pveversion shows 9.x. Check zpool status is clean. Check bootctl status shows the new systemd-boot and the correct ESP.
What I’d do different
I’d run the upgrade from a console, not SSH. If networking drops mid-upgrade, you’re blind. And I’d keep the old kernel around for a week. The new one usually works, but ZFS and systemd-boot have a history of not agreeing right after a major version bump.
If you hit a wall, the random reboots guide covers the kernel and watchdog side, which is where most post-upgrade weirdness shows up.