Files
ProxMenux/web/messages/en/docs/utils/upgrade-pve8-pve9.json
T

336 lines
27 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"meta": {
"title": "Upgrade PVE 8 to PVE 9 | ProxMenux Documentation",
"description": "Three ways to upgrade Proxmox VE 8 to 9 (Debian Bookworm to Trixie + PVE 8 to 9): Automatic / Unattended, Interactive, or by hand following the official Proxmox procedure step by step. Pre-flight pve8to9 check, repository migration, dist-upgrade with safe defaults, post-upgrade validation. Refuses to run from the web terminal.",
"ogTitle": "Upgrade PVE 8 to PVE 9 | ProxMenux Documentation",
"ogDescription": "Three upgrade approaches (Auto / Interactive / Manual) for the Proxmox VE 8 to 9 major-version migration."
},
"header": {
"title": "Upgrade PVE 8 to PVE 9",
"description": "Performs the Proxmox VE 8 to 9 major-version upgrade following the official Proxmox procedure (Debian Bookworm to Trixie + PVE 8 to 9). Three upgrade approaches available — Automatic, Interactive, or Manual step-by-step — plus a stand-alone Pre-check to verify readiness without committing to the upgrade. Refuses to run from the web terminal because losing the connection mid-upgrade leaves the host in a broken state.",
"section": "Utilities"
},
"dangerCallout": {
"title": "A major-version upgrade is destructive and not reversible",
"intro": "This operation rewrites the Debian base (Bookworm → Trixie) and the Proxmox stack in place. There is <strong>no rollback path</strong>. Before starting:",
"items": [
"<strong>Verified backups</strong> of every VM and CT (PBS, vzdump, ZFS snapshots — and verify they restore).",
"<strong>Console / IPMI / iKVM access</strong> to the host for when SSH drops mid-upgrade.",
"The host already up-to-date on PVE 8.4.x (the script enforces this).",
"Ceph (if present) on version 19.x Squid.",
"At least <strong>5 GB free</strong> on the root filesystem."
]
},
"modeMenu": {
"heading": "The mode menu",
"intro": "Launching the option opens a four-way menu: Automatic, Interactive, Pre-check and Manual guide. Three choices <em>perform</em> the upgrade or show how to do it; the separate pre-check <em>verifies</em> readiness and may offer repairs.",
"imageAlt": "PVE 8 to 9 upgrade mode menu with Automatic, Interactive, Pre-check and Manual guide options"
},
"threeWays": {
"heading": "Three ways to upgrade",
"intro": "Automatic and Interactive run the same upgrade flow, including pre-checks and post-upgrade verification. They differ in how dpkg prompts during <code>dist-upgrade</code> are handled. The Manual guide displays commands for you to run, including the checks; you are responsible for completing each step.",
"auto": {
"title": "Automatic / Unattended",
"summary": "Sets <code>ASSUME_YES=1</code> + <code>DEBIAN_FRONTEND=noninteractive</code>. For modified configuration files, dpkg uses its default action when available; otherwise it will <strong>keep the current file</strong> (<code>--force-confold</code>).",
"items": [
"Fastest — no dpkg prompts during the upgrade",
"Best for vanilla installs without custom config files",
"Risk: a config you customised is silently kept and may shadow new defaults"
]
},
"interactive": {
"title": "Interactive",
"summary": "Same flow, but the user answers each dpkg prompt about config-file conflicts. Slower but maximum visibility.",
"items": [
"You see every config conflict and decide",
"Best when you have customised <code>/etc/lvm</code>, <code>/etc/ssh</code>, etc.",
"Consult the recommended-answers table in the manual procedure below"
]
},
"manual": {
"title": "Manual upgrade guide",
"summary": "Read-only display of the 17-step procedure, faithful to the official Proxmox upgrade wiki. Run the commands by hand from a separate shell.",
"items": [
"Maximum control — you type every command",
"Best when you want to learn the procedure or you trust nothing",
"The script displays the steps; nothing is executed automatically"
]
}
},
"precheckCallout": {
"title": "Plus a separate Pre-check",
"body": "Option 3 — <strong>Run PVE 8 to 9 check</strong> — runs Proxmox’s official <code>pve8to9 --full</code>, offers guided repairs for common blocking issues, then <strong>stops</strong>. Use it before upgrading or after manual repairs. Automatic and Interactive also run this check; the Manual guide tells you to run it yourself."
},
"webTerminal": {
"heading": "Why the web terminal is blocked",
"body": "All three upgrade modes detect <code>termproxy</code> / <code>vncshell</code> in the parent process chain and refuse to run. Reason: the Proxmox web terminal is served by <code>pveproxy</code>, which is one of the services that gets upgraded mid-flow. As soon as <code>pveproxy</code> restarts, your terminal session dies — and so does the upgrade script that was running inside it. The host is left half-upgraded, no good way to resume.",
"warningTitle": "Use SSH or physical / IPMI / iKVM console",
"warningBody": "SSH is the most common choice. Open it inside <code>tmux</code> or <code>screen</code> so the upgrade survives a brief network blip. The very first thing the script does is print the tmux/screen reminder if it detects you're in a plain SSH shell."
},
"auto": {
"heading": "Automatic / Unattended mode",
"intro": "Package and configuration-file prompts use the defaults in the table below, and a 401 from the enterprise repository switches to no-subscription without asking. The upgrade confirmation, the PVE 8 update summary, any pre-check repairs and the reboot prompt are still shown.",
"behaviourHeading": "Auto-mode-specific behaviour",
"behaviourTable": {
"settingHeader": "Setting",
"effectHeader": "Effect",
"rows": [
{
"settingRich": "<code>ASSUME_YES=1</code>",
"effectRich": "Internal flag — the script answers its own yes/no questions, such as switching to no-subscription after a 401"
},
{
"settingRich": "<code>DEBIAN_FRONTEND=noninteractive</code>",
"effectRich": "apt / dpkg run without opening any debconf prompt"
},
{
"settingRich": "<code>--force-confdef</code>",
"effectRich": "For untouched config files: install the maintainer's new version"
},
{
"settingRich": "<code>--force-confold</code>",
"effectRich": "For modified files: use dpkg’s default action when available; otherwise <strong>keep your version</strong>."
}
]
},
"flowHeading": "Auto-mode flow",
"flowIntro": "Six sequential phases. Phase 2 updates the PVE 8 packages and phase 3 writes the PVE 9 repository configuration. A failure stops the flow without rolling those changes back; if the PVE 8 update fails or is cancelled, the repositories are left unchanged. Phase 5 runs the PVE 9 <code>dist-upgrade</code>.",
"flowDiagram": "1. CHECKS\nBlock termproxy / vncshell; confirm the upgrade; reject PVE 9.\n\n2. PREPARE PVE 8\nscripts/global/update-pve8.sh\nUpdate PVE 8 packages; stop if the update fails or is cancelled.\npve8to9 --full (may offer repairs).\nCheck space and connectivity; Ceph 19.x Squid on hyper-converged nodes.\n\n3. MIGRATE REPOSITORIES\nBookworm → Trixie; write deb822 .sources files.\nComment legacy .list files; apt-get update.\n\n4. VALIDATE THE PVE 9 CANDIDATE\napt-cache policy proxmox-ve\napt-get -s dist-upgrade\nStop if the candidate is not 9.x or proxmox-ve would be removed.\n\n5. UPGRADE\napt-get -y -o Dpkg::Options::='--force-confdef' -o Dpkg::Options::='--force-confold' dist-upgrade\nNo subscription: disable pve-enterprise.sources.\nLog: /var/log/pve8-a-pve9-'<'timestamp'>'.log\n\n6. VERIFY AND REBOOT\nEFI: apt install grub-efi-amd64\npve8to9 --full; review results and the reboot prompt.",
"preflightHeading": "Pre-flight: what gets checked",
"preflightTable": {
"checkHeader": "Check",
"whyHeader": "Why it matters",
"rows": [
{
"checkRich": "<strong>Web terminal block</strong>",
"whyRich": "Prevents the upgrade from killing the shell that runs it"
},
{
"checkRich": "<strong>Already on 9.x</strong>",
"whyRich": "Aborts if the host already runs PVE 9 (nothing to do)"
},
{
"checkRich": "<strong>Latest PVE 8.4.x</strong>",
"whyRich": "Brings PVE 8 to its final patch level via the PVE 8 update worker first; an old 8.x has different upgrade prerequisites"
},
{
"checkRich": "<strong>pve8to9 --full</strong>",
"whyRich": "Proxmox's own upgrade-readiness check; FAILs block the upgrade until repaired"
},
{
"checkRich": "<strong>Disk space</strong>",
"whyRich": "≥ 1024 MB free in <code>/var/cache/apt/archives</code> (downloaded .deb files)"
},
{
"checkRich": "<strong>Connectivity</strong>",
"whyRich": "Ping to <code>download.proxmox.com</code> — if down, no point starting"
},
{
"checkRich": "<strong>Ceph 19.x Squid</strong>",
"whyRich": "If Ceph is installed, must already be on 19.x. PVE 9 cannot run with Ceph 17/18. Override flags exist (<code>--ignore-ceph-check</code>, <code>--warn-ceph-check</code>) but use them only if you know what you're doing"
}
]
},
"distUpgradeHeading": "The dist-upgrade command (auto mode)",
"distUpgradeCode": "apt-get -y \\\n -o Dpkg::Options::='--force-confdef' \\\n -o Dpkg::Options::='--force-confold' \\\n dist-upgrade",
"distUpgradeOutro": "Output streams to stdout in real time and is also tee'd to <code>/var/log/pve8-a-pve9-&lt;timestamp&gt;.log</code>. You see everything — only the prompts are suppressed.",
"postHeading": "Post-upgrade tasks (auto mode)",
"postItems": [
"<strong>EFI hosts:</strong> installs <code>grub-efi-amd64</code> (known issue per Proxmox docs — the upgrade doesn't pull it in automatically and the next boot would fail without it).",
"<strong>Enterprise repository without a subscription.</strong> pve-manager 9 adds <code>pve-enterprise.sources</code> during the upgrade; in no-subscription mode the script sets it to <code>Enabled: false</code>.",
"<strong>Re-run <code>pve8to9 --full</code>.</strong> Surfaces any residual issues that the upgrade didn't resolve. If FAILs are reported, the same guided-repair menu as the pre-check appears.",
"<strong>Reboot prompt.</strong> \"It is RECOMMENDED to reboot now to load the new kernel and services. Reboot now?\" Decline only if you have a specific reason — running on the old kernel after a major upgrade is risky."
]
},
"interactive": {
"heading": "Interactive mode",
"intro": "Same overall flow as the <autolink>automatic mode</autolink> — same pre-flight checks, same repository migration, same post-upgrade verification. The only difference is in the <code>dist-upgrade</code> step: <strong>you answer every dpkg config-file conflict prompt yourself</strong>. ProxMenux passes the upgrade through to plain <code>apt-get dist-upgrade</code> without the <code>--force-conf*</code> flags.",
"distUpgradeHeading": "The dist-upgrade command (interactive mode)",
"distUpgradeCode": "apt-get dist-upgrade\n# (user answers each dpkg config-file conflict prompt as it appears)",
"whenHeading": "When interactive is the right choice",
"whenItems": [
"You've customised <code>/etc/lvm/lvm.conf</code>, <code>/etc/ssh/sshd_config</code>, <code>/etc/default/grub</code> or any other config file that gets touched by the upgrade.",
"You want to see exactly which packages introduce config conflicts and decide on a per-file basis.",
"You're upgrading a production host where any hidden change is unacceptable."
],
"promptCalloutTitle": "What to answer at each prompt",
"promptCalloutBody": "The same recommended-answers table that the manual procedure uses applies here too — see the <dpkglink>Recommended answers for the dpkg prompts</dpkglink> section in the manual procedure below. At any prompt, type <strong>D</strong> to see the diff before deciding, or <strong>Z</strong> to drop into a shell."
},
"manual": {
"heading": "Manual upgrade procedure",
"intro": "This is what the <strong>Manual upgrade guide</strong> menu option displays — a faithful mirror of <wikilink>the official Proxmox 8-to-9 upgrade wiki</wikilink> organised in 4 phases. The script <em>shows</em> these commands; you type them yourself in a separate root shell. No automation — full visibility.",
"rootCalloutTitle": "All commands need root",
"rootCalloutBody": "Use a root shell for these commands, including redirections and here-documents. If you use <code>sudo</code>, ensure the entire command runs with root privileges.",
"phase1Heading": "Phase 1 — Preparation",
"phase1Intro": "Bring the host to the latest PVE 8.4.x, verify the version, validate Ceph (if used), run Proxmox's own pre-check, and start a terminal multiplexer to survive disconnections.",
"phase1Code": "# Step 1 — Update PVE 8 to the latest 8.4+\napt update && apt dist-upgrade -y\n\n# Step 2 — Verify version (must be 8.4.1 or newer)\npveversion\n\n# Step 2.1 — Hyper-converged Ceph: must already be on 19.x Squid\nceph --version\n# If older, follow https://pve.proxmox.com/wiki/Ceph_Reef_to_Squid\n\n# Step 3 — Run the official upgrade-readiness check\npve8to9 --full\n# If it warns about systemd-boot meta-package, remove it:\n# apt remove systemd-boot\n\n# Step 4 — Start tmux or screen (so SSH disconnect doesn't kill the upgrade)\ntmux new-session -s upgrade\n# or\nscreen -S upgrade",
"phase2Heading": "Phase 2 — Repository migration",
"phase2Intro": "Switch every Debian and Proxmox repository from the Bookworm codename to Trixie, and convert the Proxmox sources to the new deb822 format. <strong>Pick step 7 OR step 8</strong> depending on whether you have an Enterprise subscription. Skip step 9 if you don't run Ceph.",
"phase2Code": "# Step 5 — Debian: bookworm → trixie\nsed -i 's/bookworm/trixie/g' /etc/apt/sources.list\n\n# Step 6 — Same for the legacy enterprise list (only if you use enterprise)\nsed -i 's/bookworm/trixie/g' /etc/apt/sources.list.d/pve-enterprise.list\n\n# Step 7 — Add the new PVE 9 enterprise repo (deb822) — Enterprise users only\ncat > /etc/apt/sources.list.d/pve-enterprise.sources << EOF\nTypes: deb\nURIs: https://enterprise.proxmox.com/debian/pve\nSuites: trixie\nComponents: pve-enterprise\nSigned-By: /usr/share/keyrings/proxmox-archive-keyring.gpg\nEOF\n\n# Step 8 — OR add the no-subscription repo (most home / lab users)\ncat > /etc/apt/sources.list.d/proxmox.sources << EOF\nTypes: deb\nURIs: http://download.proxmox.com/debian/pve\nSuites: trixie\nComponents: pve-no-subscription\nSigned-By: /usr/share/keyrings/proxmox-archive-keyring.gpg\nEOF\n\n# Step 8.1 — Refresh and verify proxmox-ve candidate is 9.x\napt update && apt policy | sed -n '1,120p'\n\n# Step 9 — Update Ceph repo (only if you run Ceph)\ncat > /etc/apt/sources.list.d/ceph.sources << EOF\nTypes: deb\nURIs: http://download.proxmox.com/debian/ceph-squid\nSuites: trixie\nComponents: no-subscription\nSigned-By: /usr/share/keyrings/proxmox-archive-keyring.gpg\nEOF\n\n# Step 10 — Remove old .list files now superseded by deb822 .sources\nrm -f /etc/apt/sources.list.d/pve-enterprise.list /etc/apt/sources.list.d/ceph.list\n\n# Step 11 — Final apt update\napt update",
"phase3Heading": "Phase 3 — The dist-upgrade",
"phase3Intro": "The actual upgrade. Step 12 is optional but recommended (silences a torrent of audit messages during the upgrade). Step 13 is the long one — answer every dpkg prompt using the table below. Step 13.1 is EFI-only and per the official known issues.",
"phase3Code": "# Step 12 — Disable kernel audit messages (optional)\nsystemctl disable --now systemd-journald-audit.socket\n\n# Step 13 — The main upgrade (this takes a while)\napt dist-upgrade\n# (answer prompts using the table below)\n\n# Step 13.1 — EFI hosts: install grub for EFI (per known issues)\n[ -d /sys/firmware/efi ] && apt install grub-efi-amd64",
"dpkgHeading": "Recommended answers for the dpkg prompts",
"dpkgIntro": "These are the answers the official Proxmox guide recommends. <strong>Y</strong> = install maintainer's new version (overwrites your file); <strong>N</strong> = keep your current file. Always check the diff first when in doubt:",
"dpkgTable": {
"fileHeader": "File / prompt",
"answerHeader": "Recommended answer",
"whyHeader": "Why",
"rows": [
{
"fileRich": "/etc/issue",
"answerRich": "<strong>N</strong> (keep current)",
"whyRich": "Banner you're used to seeing",
"fileFont": true
},
{
"fileRich": "/etc/lvm/lvm.conf",
"answerRich": "<strong>Y</strong> (maintainer)",
"whyRich": "PVE 9 needs the new LVM defaults",
"fileFont": true
},
{
"fileRich": "/etc/ssh/sshd_config",
"answerRich": "<strong>Y</strong> for default-only changes; inspect customised files first",
"whyRich": "Review local SSH settings and preserve access before replacing the file. The default-only changes include renamed options and comments.",
"fileFont": true
},
{
"fileRich": "/etc/default/grub",
"answerRich": "<strong>N</strong> if customised",
"whyRich": "Boot params (IOMMU, PCI passthrough) live here",
"fileFont": true
},
{
"fileRich": "/etc/chrony/chrony.conf",
"answerRich": "<strong>Y</strong> if unmodified; preserve local settings first",
"whyRich": "Trixie updates time-sync defaults. Move local settings into chrony’s conf.d / sources.d directories before accepting the new file.",
"fileFont": true
},
{
"fileRich": "Service restarts during upgrade",
"answerRich": "<strong>Yes</strong> (default)",
"whyRich": "Avoids reboot for most services",
"fileFont": false
},
{
"fileRich": "<code>apt-listchanges</code>",
"answerRich": "Press <kbd>q</kbd>",
"whyRich": "Just exits the pager — info shown is the changelog summary",
"fileFont": false
}
]
},
"inspectCalloutTitle": "Inspecting a specific dpkg conflict",
"inspectCalloutBody": "At any prompt, type <strong>D</strong> to see the diff between your current file and the maintainer's version, or <strong>Z</strong> to drop into a shell and decide later. Both of those are always safer than guessing.",
"phase4Heading": "Phase 4 — Post-upgrade",
"phase4Intro": "Verify the upgrade landed cleanly, reboot to load the PVE 9 kernel, confirm the new version, and (optional) modernise the few remaining legacy <code>.list</code> files into deb822.",
"phase4Code": "# Step 14 — Re-run the readiness check (should be much cleaner now)\npve8to9 --full\n\n# Step 15 — Reboot to load the new kernel and PVE 9 daemons\nreboot\n\n# Step 16 — After reboot, confirm PVE 9.x\npveversion\n# Should show pve-manager/9.x.x\n\n# Step 17 — Optional: modernise the remaining legacy .list files to deb822\napt modernize-sources\n# (keeps .list backups as .bak)"
},
"clusterCeph": {
"heading": "Cluster & Ceph",
"clusterCalloutTitle": "Cluster: upgrade nodes one at a time",
"clusterCalloutBody": "Detected via <code>pvecm status</code>. <strong>Do not</strong> upgrade more than one node at a time. Move guests off the node, upgrade, reboot and verify cluster membership before proceeding. During the upgrade, live migration from an older PVE version to a newer one works; the reverse direction is generally unsupported. HA groups migrate automatically to HA rules once all nodes run PVE 9.",
"cephCalloutTitle": "Ceph: upgrade Ceph FIRST, then Proxmox",
"cephCalloutBody": "Ceph must already run 19.x Squid before upgrading Proxmox. Follow the official sequence: Quincy 17 → Reef 18 → Squid 19, updating packages and restarting Ceph daemons in the documented rolling order. Verify <code>ceph --version</code> before upgrading each Proxmox node. Follow the full procedure: <cephlink>Ceph Reef to Squid upgrade wiki</cephlink>."
},
"troubleshooting": {
"heading": "Troubleshooting",
"items": [
{
"title": "Script aborts: \"This script cannot be executed from the Proxmox web terminal\"",
"bodyRich": "Open SSH (or use console / IPMI / iKVM) and re-run from there. <code>tmux new -s pveupgrade</code> first if you want to survive a brief network drop."
},
{
"title": "pve8to9 reports FAIL and auto-repair Option 1 produces \"command not found\"",
"bodyRich": "If the error mentions <code>configure_repositories</code>, the script copy is outdated: the current repair uses cleanup_duplicate_repos and ensure_repositories. Update that copy or use Option 2 to review the manual commands. <code>apt-get update</code> refreshes package lists, but does not fix every blocking check."
},
{
"title": "apt simulation flags \"proxmox-ve will be REMOVED\"",
"bodyRich": "The new repos aren't reachable or the codename substitution didn't take effect. Check <code>cat /etc/apt/sources.list.d/proxmox.sources</code> — the <code>Suites:</code> line must say <code>trixie</code>, not <code>bookworm</code>. Also confirm <code>apt-cache policy proxmox-ve</code> shows a 9.x candidate from the new repo."
},
{
"title": "dist-upgrade fails partway through",
"bodyRich": "Run <code>apt-get -f install</code> to resolve broken dependencies, then re-run the upgrade. If that fails, check the log at <code>/var/log/pve8-a-pve9-&lt;timestamp&gt;.log</code> — the last lines usually pinpoint the offending package. Do not reboot until <code>dpkg -l | grep ^iU</code> returns empty (no half-installed packages)."
},
{
"title": "EFI host won't boot after reboot",
"bodyRich": "The post-upgrade <code>grub-efi-amd64</code> install handles this. If you skipped that step or it failed, boot from the Proxmox installer ISO in rescue mode, mount the root, chroot, and <code>apt-get install grub-efi-amd64 &amp;&amp; update-grub</code>."
},
{
"title": "GUI does not load after upgrade",
"bodyRich": "<code>systemctl status pveproxy</code> and <code>systemctl restart pveproxy</code>. If still broken, check <code>journalctl -u pveproxy -b</code> for the actual error."
},
{
"title": "Network does not work after reboot",
"bodyRich": "Check <code>/etc/network/interfaces</code> still references existing devices and <code>ifupdown2</code> is installed: <code>apt install ifupdown2</code>. If interface names changed, see <netlink>Persistent interface names</netlink>."
},
{
"title": "Cluster split-brain after upgrading one node",
"bodyRich": "Mixed PVE 8 / PVE 9 clusters are supported during the upgrade. Live migration from older to newer versions works; the reverse direction is generally unsupported. If the upgraded node appears offline, check <code>corosync</code> and the QDevice / network configuration. Run <code>pvecm status</code> on each node to confirm quorum."
}
]
},
"files": {
"heading": "Files involved",
"code": "scripts/utilities/upgrade_pve8_to_pve9.sh # main upgrade orchestrator\nscripts/utilities/pve8to9_check.sh # pre-check (separate menu option)\nscripts/utilities/proxmox-upgrade-pve8-to-pve9-manual-guide.sh # 17-step runbook\nscripts/global/update-pve8.sh # PVE 8 worker (final patches)\n/etc/apt/sources.list # bookworm → trixie sed\n/etc/apt/sources.list.d/proxmox.sources # created (deb822 PVE 9)\n/etc/apt/sources.list.d/debian.sources # created (deb822 trixie)\n/etc/apt/sources.list.d/ceph.sources # created if Ceph\n/etc/apt/sources.list.d/*.list # legacy files commented out / removed\n/var/log/pve8-a-pve9-'<'timestamp'>'.log # full upgrade log"
},
"references": {
"heading": "Official references",
"intro": "The script's manual procedure is a faithful mirror of these official sources. When in doubt during a real upgrade, follow the official wiki — ProxMenux helps you execute it, but the source of truth is Proxmox.",
"items": [
{
"href": "https://pve.proxmox.com/wiki/Upgrade_from_8_to_9",
"title": "Upgrade from 8 to 9",
"desc": "The main Proxmox wiki page for the 8 → 9 upgrade. Source of truth for every command in the manual procedure above."
},
{
"href": "https://pve.proxmox.com/wiki/Ceph_Reef_to_Squid",
"title": "Ceph Squid (19.x) upgrade",
"desc": "Mandatory pre-step for hyper-converged Ceph nodes. Ceph must be on 19.x Squid before PVE 9."
},
{
"href": "https://pve.proxmox.com/wiki/Roadmap",
"title": "Proxmox VE Roadmap",
"desc": "PVE 9 release notes and what changed since 8.x — read before you upgrade so you know what to expect."
},
{
"href": "https://www.debian.org/releases/trixie/releasenotes",
"title": "Debian Trixie release notes",
"desc": "PVE 9 ships on Debian Trixie. Read the upstream release notes for the underlying OS changes that also affect your host."
},
{
"href": "https://forum.proxmox.com/forums/proxmox-ve-installation-and-configuration.16/",
"title": "Proxmox VE installation forum",
"desc": "If something goes wrong during the upgrade, search this forum first — chances are someone hit the same edge case already."
},
{
"href": "https://pve.proxmox.com/wiki/Backup_and_Restore",
"title": "Backup and Restore",
"desc": "A major-version upgrade is not reversible. Verify your backup discipline before starting."
}
]
},
"video": {
"heading": "Video walkthrough",
"intro": "Prefer watching the upgrade run end-to-end before doing it yourself? This walkthrough demonstrates the ProxMenux upgrade flow in real time.",
"title": "ProxMenux — Upgrade Proxmox VE 8 to 9 walkthrough",
"caption": "External video on YouTube. Plays in privacy-enhanced mode (no cookies until you press play)."
},
"related": {
"heading": "Related",
"items": [
{
"href": "/docs/utils/system-update",
"label": "Proxmox System Update",
"tail": " — for the regular within-major-version updates (8.4.1 → 8.4.5, etc.)."
},
{
"href": "/docs/utils",
"label": "Utilities overview",
"tail": " — back to the section overview."
}
]
}
}