{"id":6130,"date":"2026-09-02T20:44:16","date_gmt":"2026-09-02T11:44:16","guid":{"rendered":"https:\/\/eternalsphere.net\/echoes\/?p=6130"},"modified":"2026-09-12T17:17:04","modified_gmt":"2026-09-12T08:17:04","slug":"1xbi3em79gcbhf0","status":"publish","type":"post","link":"https:\/\/blog.eternalsphere.net\/index.php\/2026\/09\/02\/1xbi3em79gcbhf0\/","title":{"rendered":"Proxmox Backup Server 3 to 4: A Read-Only Post-Upgrade Health Audit"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Introduction<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A major Proxmox Backup Server upgrade changes several layers at once:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>PBS 3.x \u2192 PBS 4.x\nDebian 12 \u2192 Debian 13\nolder Proxmox kernel \u2192 newer Proxmox kernel<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The system may boot successfully while still carrying:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>repository residue;<\/li>\n\n\n\n<li>failed services;<\/li>\n\n\n\n<li>package inconsistencies;<\/li>\n\n\n\n<li>stale configuration files;<\/li>\n\n\n\n<li>datastore issues;<\/li>\n\n\n\n<li>bootloader warnings;<\/li>\n\n\n\n<li>mail compatibility warnings.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">A structured read-only audit provides a safer way to validate the upgrade before attempting any cleanup.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">1. Confirm the Version Stack<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Start with:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>hostnamectl\ncat \/etc\/os-release\nuname -a\nproxmox-backup-manager versions<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">A fully migrated PBS 4 system should consistently show:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>PBS 4.x;<\/li>\n\n\n\n<li>Debian 13 Trixie;<\/li>\n\n\n\n<li>a supported Proxmox kernel;<\/li>\n\n\n\n<li>no running PBS 3 daemon.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Any mixture of Debian 12 and Debian 13 packages deserves further inspection.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">2. Check System Health Before Configuration Details<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Useful commands:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>systemctl is-system-running\nsystemctl --failed\nuptime\nfree -h\ndf -hT\ndf -ih<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">A healthy result typically includes:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>systemctl is-system-running\nrunning<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">and:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>0 loaded units listed<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">from:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>systemctl --failed<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Also review:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>memory pressure;<\/li>\n\n\n\n<li>swap state;<\/li>\n\n\n\n<li>root filesystem capacity;<\/li>\n\n\n\n<li>inode exhaustion;<\/li>\n\n\n\n<li>OOM history.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">3. Validate PBS Services<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The most important services include:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>systemctl status proxmox-backup.service --no-pager\nsystemctl status proxmox-backup-proxy.service --no-pager<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Both should normally be active.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A service that failed during boot but later recovered should not automatically be treated as a current fault.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Repeated restarts or persistent failed state are much more significant.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">4. Verify the Datastore<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">List configured datastores:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>proxmox-backup-manager datastore list<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Then confirm the mount:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>findmnt\ndf -hT<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">A datastore may be correctly configured in PBS while the underlying mount is missing.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Both layers must therefore be checked:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>PBS datastore configuration\n        +\nactual filesystem mount\n        =\nusable datastore<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">5. Audit Backup Tasks<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Use:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>proxmox-backup-manager task list<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Also inspect recent task results.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">An active backup immediately after a reboot may produce:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>high disk I\/O;<\/li>\n\n\n\n<li>elevated CPU usage;<\/li>\n\n\n\n<li>increased network throughput;<\/li>\n\n\n\n<li>hashing and compression load.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Those are expected conditions.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A completed task with <code>OK<\/code> is much more meaningful than a brief high load average.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">6. Repository Consistency<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Inspect repositories without refreshing them:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>grep -Rhv '^&#091;&#091;:space:]]*#' \\\n  \/etc\/apt\/sources.list \\\n  \/etc\/apt\/sources.list.d\/*.list \\\n  \/etc\/apt\/sources.list.d\/*.sources 2&gt;\/dev\/null<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Then inspect package policy:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>apt-cache policy<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">A post-upgrade PBS 4 installation should not have active Bookworm\/PBS 3 repositories mixed with Trixie\/PBS 4 repositories.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Disabled historical repository files are harmless.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pbs-enterprise.sources.disabled\npbs-no-subscription.list.disabled<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">are not active package sources.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">7. Check Package State<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Use:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>dpkg --audit<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">An empty result is desirable.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Also inspect PBS package versions:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>proxmox-backup-manager versions<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Upgrade residue such as:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>*.dpkg-old\n*.dpkg-dist\n*.ucf-dist<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">is not automatically a problem.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Those files should be classified as:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>harmless historical backup;<\/li>\n\n\n\n<li>potentially active configuration conflict;<\/li>\n\n\n\n<li>unresolved.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Deleting them only for cosmetic reasons provides little value.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">8. Bootloader Warnings Require Context<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Some Proxmox systems use GRUB directly rather than <code>proxmox-boot-tool<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A command such as:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>proxmox-boot-tool status<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">may report:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/etc\/kernel\/proxmox-boot-uuids does not exist<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This does not necessarily indicate a boot problem.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>the machine boots successfully;<\/li>\n\n\n\n<li>EFI entries are correct;<\/li>\n\n\n\n<li>GRUB is installed correctly;<\/li>\n\n\n\n<li>the upgrade checker accepts the bootloader state;<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">then the missing <code>proxmox-boot-uuids<\/code> file may simply mean that the installation uses a different supported boot path.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A warning should be interpreted according to the actual boot architecture.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">9. ACPI and Firmware Noise<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Kernel logs may contain messages such as:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ACPI BIOS Error\nAE_NOT_FOUND\nAE_ALREADY_EXISTS<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>the messages occur only during boot;<\/li>\n\n\n\n<li>services start normally;<\/li>\n\n\n\n<li>storage remains healthy;<\/li>\n\n\n\n<li>no kernel panic occurs;<\/li>\n\n\n\n<li>no hardware instability follows;<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">then they usually belong in a firmware-warning category rather than an operational-error category.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Firmware noise should not be \u201cfixed\u201d solely to obtain a clean log.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">10. Postfix Can Become the Only Remaining Upgrade Warning<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A PBS upgrade to Debian 13 may also upgrade Postfix.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A common warning is:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>support for parameter \"smtp_use_tls\" will be removed;\ninstead, specify \"smtp_tls_security_level\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Another common warning is:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Postfix is using backwards-compatible default settings<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">These are not PBS service failures.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">They belong to the local mail subsystem and should be audited separately.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">11. Final PBS Health Criteria<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A PBS 4 system can be considered healthy when:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>PBS version is correct;<\/li>\n\n\n\n<li>Debian release is correct;<\/li>\n\n\n\n<li>supported kernel is running;<\/li>\n\n\n\n<li>PBS services are active;<\/li>\n\n\n\n<li>datastore is mounted and writable;<\/li>\n\n\n\n<li>no failed systemd units remain;<\/li>\n\n\n\n<li>repositories are consistent;<\/li>\n\n\n\n<li><code>dpkg --audit<\/code> is clean;<\/li>\n\n\n\n<li>backup jobs complete successfully;<\/li>\n\n\n\n<li>no active filesystem or I\/O error exists;<\/li>\n\n\n\n<li>no upgrade regression is visible.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">A healthy system may still contain harmless upgrade residue or firmware messages.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A PBS major-version upgrade should not be considered complete merely because the web interface loads.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A better validation process checks:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>package state;<\/li>\n\n\n\n<li>service state;<\/li>\n\n\n\n<li>datastore state;<\/li>\n\n\n\n<li>repository state;<\/li>\n\n\n\n<li>backup execution;<\/li>\n\n\n\n<li>filesystem health;<\/li>\n\n\n\n<li>kernel logs;<\/li>\n\n\n\n<li>mail subsystem compatibility.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">This approach provides a stronger operational conclusion than simply searching logs for the word <code>error<\/code>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction A major Proxmox Backup Server upgrade changes several layers at once: The system may boot successfully while still carrying: A structured read-only audit provides a safer way to validate the upgrade before attempting any cleanup. 1. Confirm the Version Stack Start with: A fully migrated PBS 4 system should &hellip;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[118],"tags":[266,241],"class_list":["post-6130","post","type-post","status-publish","format-standard","hentry","category-tm5418kixf8ipqv","tag-backup","tag-proxmox"],"_links":{"self":[{"href":"https:\/\/blog.eternalsphere.net\/index.php\/wp-json\/wp\/v2\/posts\/6130","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.eternalsphere.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.eternalsphere.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.eternalsphere.net\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.eternalsphere.net\/index.php\/wp-json\/wp\/v2\/comments?post=6130"}],"version-history":[{"count":1,"href":"https:\/\/blog.eternalsphere.net\/index.php\/wp-json\/wp\/v2\/posts\/6130\/revisions"}],"predecessor-version":[{"id":6131,"href":"https:\/\/blog.eternalsphere.net\/index.php\/wp-json\/wp\/v2\/posts\/6130\/revisions\/6131"}],"wp:attachment":[{"href":"https:\/\/blog.eternalsphere.net\/index.php\/wp-json\/wp\/v2\/media?parent=6130"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.eternalsphere.net\/index.php\/wp-json\/wp\/v2\/categories?post=6130"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.eternalsphere.net\/index.php\/wp-json\/wp\/v2\/tags?post=6130"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}