Bayangkan Anda tinggal di lantai 1 sebuah gedung dan ingin pindah ke lantai 3. Anda tidak bisa melompat langsung, tetapi harus naik tangga satu lantai demi satu lantai. Di setiap bordes, Anda berhenti sebentar untuk memastikan semua barang masih terbawa. Begitulah cara kerja upgrade Proxmox dari versi 7 ke versi 9: wajib lewat versi 8, dan Anda perlu mengecek setiap tahap sebelum lanjut.
Pada tutorial ini kami membagikan proses nyata saat meng-upgrade server Proxmox kantor dari 7.4 ke 8.4 lalu ke 9.2.24 tanpa instal ulang. Selain langkah resminya, kami juga menceritakan enam kendala yang benar-benar muncul, mulai dari repo yang tidak terjangkau lewat Starlink sampai panel yang macet saat boot pertama. Semua perintah di artikel ini adalah perintah yang kami jalankan. Selain itu, kami mengambil screenshot dari server asli lalu menyensor data sensitifnya.

Kenapa Upgrade Proxmox Harus Bertahap?
Setiap versi besar Proxmox VE memakai basis Debian yang berbeda. Oleh karena itu, upgrade Proxmox sebenarnya juga upgrade sistem operasi Debian di bawahnya. Debian sendiri hanya mendukung upgrade dari satu rilis ke rilis berikutnya, sehingga lompatan langsung dari Debian 11 ke 13 berada di luar dukungan dan rawan merusak paket.
| Versi Proxmox | Basis Debian | Kernel | Pemeriksa upgrade |
|---|---|---|---|
| 7.4 | Debian 11 (bullseye) | 5.15 | pve7to8 |
| 8.4 | Debian 12 (bookworm) | 6.8 | pve8to9 |
| 9.2 | Debian 13 (trixie) | 7.0 | – |
Selain itu, Proxmox VE 7 sudah lama tidak mendapat update keamanan. Akibatnya, server yang masih di versi 7 rentan terhadap celah yang sudah lama tertutup di versi baru. Kabar baiknya, Proxmox menyediakan skrip pemeriksa resmi (pve7to8 dan pve8to9) yang mendeteksi masalah sebelum Anda melangkah ke tahap berikutnya.
Persiapan Sebelum Upgrade Proxmox
Pertama, backup semua VM dan container. Server kami saat itu masih kosong, tetapi jika server Anda sudah berisi, langkah ini wajib. Simpan hasil backup di storage lain, misalnya NAS atau disk terpisah.
# backup semua VM/LXC ke storage bernama "backup" (sesuaikan) vzdump --all --mode snapshot --storage backup --compress zstd # cek versi sekarang dan sisa ruang disk pveversion df -h / /boot
Kemudian pastikan Anda punya akses konsol langsung ke server, misalnya monitor dan keyboard, IPMI, atau iLO. Jika jaringan bermasalah setelah reboot, hanya akses inilah yang bisa menolong. Terakhir, sediakan waktu sekitar satu jam. Proses kami sendiri selesai dalam ±30 menit, tetapi koneksi internet yang lambat bisa membuatnya lebih lama.
Tahap 1: Perbarui Proxmox 7.4 ke Rilis Terakhir
Sebelum pindah ke versi 8, Anda harus memperbarui Proxmox 7.4 dulu ke rilis paling akhir. Setelah itu, jalankan pemeriksa pve7to8.
apt update apt dist-upgrade -y pveversion pve7to8 --full
Jangan lanjut ke tahap 2 sebelum bagian SUMMARY dari pve7to8 menunjukkan FAILURES: 0. Sebaiknya Anda juga membereskan peringatan (WARNINGS). Di server kami, tahap yang terlihat sepele ini justru memunculkan tiga kendala.
Kendala 1: Repo Proxmox Tidak Terjangkau
Perintah apt update pertama langsung gagal. Server kami tersambung ke internet lewat Starlink, dan saat itu DNS mengarahkan download.proxmox.com ke node CDN sg3 di Singapura. Ternyata rute dari Starlink ke node tersebut tidak sampai. Selain itu, apt juga mencoba alamat IPv6, padahal jaringan kantor tidak punya rute IPv6.

Untuk mencari node yang terjangkau, kami menguji beberapa node CDN resmi Proxmox satu per satu dengan perintah berikut.
for h in sg3.cdn.proxmox.com sg.cdn.proxmox.com au.cdn.proxmox.com us.cdn.proxmox.com de.cdn.proxmox.com; do
ip=$(getent ahostsv4 $h | head -1 | cut -d" " -f1)
curl -s -o /dev/null -m 15 -w "%{http_code} %{time_total}s $h ($ip)\n" \
--resolve download.proxmox.com:80:$ip http://download.proxmox.com/debian/pve/dists/trixie/Release \
|| echo "GAGAL $h ($ip)"
done
Opsi --resolve memaksa curl memakai IP node tertentu tanpa mengubah nama domainnya. Dengan demikian, Anda bisa melihat node mana yang menjawab 200 paling cepat. Di jaringan kami, pemenangnya adalah sg.cdn.proxmox.com.
Arahkan apt ke Node yang Terjangkau

echo 'Acquire::ForceIPv4 "true";' > /etc/apt/apt.conf.d/99force-ipv4 echo "deb http://sg.cdn.proxmox.com/debian/pve bullseye pve-no-subscription" \ > /etc/apt/sources.list.d/pve-no-subscription.list apt update
Baris pertama membuat apt hanya memakai IPv4, sehingga tidak lagi membuang waktu mencoba IPv6. Kemudian baris kedua menulis ulang repo no-subscription agar langsung menuju node sg.cdn. Perlu Anda ingat, langkah ini hanya perlu jika repo bawaan memang tidak terjangkau. Dua hari kemudian, node sg3 ternyata sudah terjangkau lagi dari jaringan yang sama, jadi masalahnya bersifat rute sementara.
Kendala 2 dan 3: Repo Security 404 dan Peringatan GRUB
Setelah repo Proxmox beres, apt gagal lagi dengan pesan 404 Not Found dari security.debian.org untuk paket xsltproc. Penyebabnya, Debian 11 sudah melewati masa dukungannya, sehingga sebagian paket di repo security bullseye sudah tidak tersedia. Karena kita akan segera pindah ke Debian 12, kita cukup menonaktifkan repo tersebut sementara.
cp /etc/apt/sources.list /root/sources.list.pve7 sed -i "s|^deb http://security.debian.org bullseye-security|#&|" /etc/apt/sources.list apt update && apt dist-upgrade -y pve7to8 --full # WARN: System booted in uefi mode but grub-efi-amd64 meta-package not installed ... apt install -y grub-efi-amd64 pve7to8 --full
Perintah sed menambahkan tanda # di depan baris security, sedangkan perintah cp menyimpan salinan aslinya di /root. Selanjutnya, pve7to8 memberi satu peringatan: server boot dengan UEFI, tetapi paket grub-efi-amd64 belum terpasang. Tanpa paket itu, apt tidak ikut memperbarui bootloader di partisi EFI. Setelah kami memasang paket itu, pemeriksa menunjukkan 0 peringatan dan 0 kegagalan.
Tahap 2: Upgrade Proxmox 7 ke 8
Ganti Repo ke Debian 12 (bookworm)
cat > /etc/apt/sources.list <<EOF 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 EOF echo "deb http://sg.cdn.proxmox.com/debian/pve bookworm pve-no-subscription" \ > /etc/apt/sources.list.d/pve-no-subscription.list sed -i "s/bullseye/bookworm/" /etc/apt/sources.list.d/pve-enterprise.list apt update
Perintah di atas mengubah semua repo dari bullseye ke bookworm, termasuk repo enterprise. Jika Anda tidak punya kendala repo seperti kami, cukup gunakan download.proxmox.com pada baris kedua. Kami tetap mengganti nama rilis di repo enterprise agar tidak tertinggal di versi lama, walaupun tanpa langganan Anda tidak bisa memakai repo ini.
Jalankan Upgrade di Latar Belakang
Upgrade besar bisa memakan waktu belasan menit. Jika koneksi SSH terputus di tengah jalan, proses dpkg bisa ikut berhenti dan meninggalkan sistem setengah ter-upgrade. Oleh karena itu, kami menjalankannya sebagai unit systemd sementara, sehingga proses tetap berjalan walaupun SSH putus.
systemd-run --unit=pve-upg8 \ --setenv=DEBIAN_FRONTEND=noninteractive --setenv=APT_LISTCHANGES_FRONTEND=none \ bash -c "apt-get -y -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold dist-upgrade > /root/upg-8.log 2>&1; echo SELESAI exit=\$? >> /root/upg-8.log" # pantau dari sesi mana pun tail -f /root/upg-8.log
Opsi --force-confdef dan --force-confold membuat dpkg mempertahankan file konfigurasi lama yang sudah Anda ubah, tanpa bertanya. Hasilnya, upgrade tidak tertahan oleh pertanyaan interaktif. Setelah log menampilkan SELESAI exit=0, periksa sisa error dengan grep -E "^(E|W):" /root/upg-8.log dan dpkg --audit.
Kendala 4: Kunci Nama Kartu Jaringan Sebelum Reboot
Ini pelajaran dari kejadian sebelumnya. Saat kami baru menginstal Proxmox, konfigurasi bridge vmbr0 menunjuk ke enp8s0, yaitu kartu jaringan tambahan yang kemudian kami lepas. Kartu yang tersisa bernama enp5s0. Akibatnya, bridge tidak punya port fisik, statusnya DOWN, dan server hilang dari jaringan. Kami harus memperbaikinya langsung dari monitor server.
Nama seperti enp5s0 berasal dari posisi slot PCI, sehingga bisa berubah ketika kernel atau perangkat berganti. Karena upgrade ini mengganti kernel dari 5.15 ke 6.8, kami mengunci nama kartu berdasarkan MAC address sebelum reboot.
MAC=$(cat /sys/class/net/enp5s0/address) mkdir -p /etc/systemd/network cat > /etc/systemd/network/10-nic0.link <<EOF [Match] MACAddress=$MAC Type=ether [Link] Name=nic0 EOF cp /etc/network/interfaces /root/interfaces.pre-nic0 sed -i "s/enp5s0/nic0/g" /etc/network/interfaces update-initramfs -u -k all
File .link memberi tahu systemd agar kartu dengan MAC tersebut selalu bernama nic0. Setelah itu, sed mengganti semua enp5s0 di konfigurasi jaringan. Terakhir, update-initramfs memastikan aturan nama ini sudah berlaku sejak tahap awal boot. Ganti enp5s0 dengan nama kartu di server Anda, yang bisa Anda lihat dengan ip -br link.

Reboot dan Cek Proxmox 8
systemctl reboot # setelah server kembali pveversion # pve-manager/8.4.21/2606ac850d46da29 (running kernel: 6.8.12-43-pve) ip -br link pve8to9 --full
Di server kami, reboot berjalan mulus. Jaringan langsung naik dengan nama nic0, dan tunnel WireGuard ke VPS tersambung lagi secara otomatis. Kemudian kami langsung menjalankan pve8to9 untuk menyiapkan tahap terakhir.
Kendala 5: Peringatan EFI dan Microcode
pve8to9 memberikan dua peringatan. Pertama, GRUB belum terpasang di jalur EFI “removable”, padahal sebagian motherboard membutuhkan jalur ini agar tetap bisa boot. Kedua, paket microcode CPU belum terpasang, padahal paket ini memuat perbaikan bug dan celah keamanan prosesor.
echo "grub-efi-amd64 grub2/force_efi_extra_removable boolean true" | debconf-set-selections -u sed -i "s/main contrib$/main contrib non-free-firmware/" /etc/apt/sources.list apt update apt install -y --reinstall grub-efi-amd64 apt install -y intel-microcode # untuk CPU AMD: amd64-microcode pve8to9 --full
Baris pertama mengaktifkan opsi EFI removable, kemudian perintah reinstall memasang ulang GRUB agar opsi itu berlaku. Selanjutnya sed menambahkan komponen non-free-firmware ke repo, karena paket microcode berada di sana. Setelah itu, pve8to9 kembali bersih.
Tahap 3: Upgrade Proxmox 8 ke 9
Ganti Repo ke Debian 13 (trixie) dan Upgrade
cp /etc/apt/sources.list /root/sources.list.pve8 sed -i "s/bookworm/trixie/g" /etc/apt/sources.list echo "deb http://sg.cdn.proxmox.com/debian/pve trixie pve-no-subscription" \ > /etc/apt/sources.list.d/pve-no-subscription.list sed -i "s/bookworm/trixie/" /etc/apt/sources.list.d/pve-enterprise.list apt update systemd-run --unit=pve-upg9 \ --setenv=DEBIAN_FRONTEND=noninteractive --setenv=APT_LISTCHANGES_FRONTEND=none \ bash -c "apt-get -y -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold dist-upgrade > /root/upg-9.log 2>&1; echo SELESAI exit=\$? >> /root/upg-9.log"
Polanya sama dengan tahap 2. Bedanya, tahap ini lebih lama karena apt mengganti lebih banyak paket. Log upgrade kami mencapai 4.435 baris. Di bagian akhir log sempat muncul pesan gagal me-restart postfix. Namun, pesan ini tidak berbahaya karena postfix berjalan normal kembali setelah reboot.
Bereskan Peringatan Sebelum Reboot
Sebelum reboot, pve8to9 masih memberi dua peringatan. Kernel 7.0 sudah terpasang tetapi belum aktif, jadi peringatan ini hilang sendiri setelah reboot. Sementara itu, server belum punya layanan sinkronisasi waktu (NTP). Selain itu, upgrade membuat file repo enterprise baru berformat .sources, sehingga repo enterprise jadi ganda dengan file .list lama.
apt install -y chrony rm -f /etc/apt/sources.list.d/pve-enterprise.list grep -q "^Enabled:" /etc/apt/sources.list.d/pve-enterprise.sources \ || echo "Enabled: no" >> /etc/apt/sources.list.d/pve-enterprise.sources apt update && apt autoremove -y systemctl reboot
Paket chrony menjaga jam server tetap akurat. Kemudian rm menghapus file .list lama, lalu baris Enabled: no mematikan repo enterprise di file baru, karena tanpa langganan repo ini hanya menghasilkan error 401 saat apt update.
Kendala 6: Panel Proxmox Macet Saat Boot Pertama
Setelah reboot, server menyala dengan kernel 7.0 dan jaringan normal. Namun, pve8to9 menunjukkan pveproxy masih berstatus activating dan pvescheduler tidak jalan. Setelah kami telusuri, ternyata pada boot pertama pveproxy menjalankan pveupdate untuk mengambil daftar paket dan template. Program ini menghubungi download.proxmox.com, yaitu node sg3 yang tidak terjangkau tadi, lalu menunggu tanpa batas.

echo "51.79.228.122 download.proxmox.com" >> /etc/hosts pkill -f /usr/bin/pveupdate pveupdate pveam update systemctl is-active pveproxy pvescheduler
Baris pertama mengarahkan download.proxmox.com ke node sg.cdn yang terjangkau. Akibatnya, pveupdate dan pveam (pengunduh template LXC) ikut memakai node tersebut. Setelah kami menghentikan proses yang macet dan menjalankannya ulang, semua layanan aktif dalam hitungan detik. Jika suatu saat node bawaan sudah normal kembali, sebaiknya Anda menghapus baris di /etc/hosts ini.
Hasil Akhir Upgrade Proxmox
Server kini menjalankan Proxmox VE 9.2.24 di atas Debian 13 dengan kernel 7.0. Riwayat apt menunjukkan seluruh proses, dari update 7.4 sampai boot pertama Proxmox 9, selesai dalam waktu sekitar 30 menit.

| Jam (WIB) | Kegiatan | Kendala yang muncul |
|---|---|---|
| 18:00 | Update ke 7.4 terakhir | Repo sg3 timeout, security 404, GRUB EFI |
| 18:06 | Upgrade ke Proxmox 8 | Risiko nama NIC berubah |
| 18:13 | Persiapan ke Proxmox 9 | EFI removable, microcode |
| 18:22 | Upgrade ke Proxmox 9 | NTP belum ada, repo enterprise ganda |
| 18:28 | Boot pertama Proxmox 9 | pveproxy macet karena pveupdate |
Kesalahan Umum Saat Upgrade Proxmox
- Melompat langsung dari 7 ke 9. Debian tidak mendukung lompatan dua rilis. Selalu lewati versi 8 lebih dulu.
- Mengabaikan peringatan pemeriksa. Membiarkan peringatan GRUB EFI bisa membuat server gagal boot setelah update kernel berikutnya.
- Menjalankan dist-upgrade langsung di sesi SSH. Jika koneksi putus, upgrade berhenti di tengah. Gunakan
systemd-run,tmux, atauscreen. - Reboot tanpa mengecek nama kartu jaringan. Jika nama NIC berubah, bridge kehilangan port dan Anda hanya bisa memperbaikinya dari konsol fisik.
- Menganggap repo pasti terjangkau. Uji dulu dengan
apt updatedan perhatikan barisW:atauE:sebelum memulai. - Lupa repo enterprise. Tanpa langganan, repo ini hanya menghasilkan error 401. Matikan setelah upgrade.
- Tidak membuat backup. Upgrade jarang gagal, tetapi tanpa backup satu kegagalan bisa menghapus semua VM dan container.
Kesimpulan
Anda bisa melakukan upgrade Proxmox dari 7 ke 9 tanpa instal ulang, asalkan bertahap: perbarui 7.4 sampai terakhir, naik ke 8, lalu naik ke 9. Kuncinya ada pada pemeriksa resmi pve7to8 dan pve8to9. Jalankan sebelum dan sesudah setiap tahap, lalu bereskan semua peringatannya sebelum lanjut.
Selain itu, kendala terbesar justru sering datang dari lingkungan, bukan dari Proxmox. Di kasus kami, rute Starlink ke satu node CDN membuat apt gagal sekaligus membuat panel macet saat boot. Dengan demikian, siapkan akses konsol, backup, dan cara mengecek repo, maka upgrade Proxmox bisa selesai dalam waktu sekitar setengah jam.
Baca Juga
- Cara Akses Proxmox dari Internet Tanpa IP Publik (WireGuard + VPS)
- Keamanan Server Linux: Tutorial Hardening SSH, Firewall UFW, CrowdSec, dan Alarm Telegram
- Cara Membuat Dashboard Monitoring Server (NOC) dengan Uptime Kuma dan Beszel
Referensi: Proxmox Wiki: Upgrade from 7 to 8, Proxmox Wiki: Upgrade from 8 to 9, Proxmox VE Package Repositories, systemd.link(5).

