從 Promox 6.x 升級到 7.x 後 vm “不是可引導磁碟”
今天我決定將PVE從V6.2.4升級到V7.1我是按照以下步驟進行的:
- 首先升級到最新的 6.x 版本,
apt-get update
然後是apt-get upgrade-dist
.- 我按照這些步驟https://pve.proxmox.com/wiki/Upgrade_from_6.x_to_7.0
在升級過程中,我遇到了一些關於“找不到磁碟”的錯誤,我很擔心,但升級仍在繼續。(也許他們與我現在遇到的問題有關)升級完成後,我重新啟動主機以完成升級。啟動的 LXC 容器(啟動時啟動)沒有任何問題。一些虛擬機(啟動時啟動)也可以直接工作。
一些虛擬機
Boot failed: not a bootable disk
在控制台中給出了錯誤並不斷重新啟動。經過一些Google嘗試後,我在某處發現了一個文章,有時它有助於重新啟動主機,所以我再次這樣做,之後所有的虛擬機都給出了相關的錯誤。我用Google搜尋了幾個小時,發現了很多類似的問題。唯一對大多數虛擬機有用的是恢復備份。不幸的是,這不適用於最重要的機器,郵件伺服器。它包含 170Gb 的郵件和唯一的備份我有一個“proxmox 備份”(圖像。7x)。它們都不起作用,因為它們都給出了相同的問題。問題:
- 如何讓 VM 再次啟動?如果它無法修復,有沒有辦法進入磁碟以便我可以獲取數據?
- 這是怎麼發生的?是我的錯嗎?這是一個錯誤嗎?這是一個已知問題嗎?
- 我不敢再重新啟動 proxmox,因為我害怕其他 VM 也會永久損壞。我怎麼能確定這不會再次發生?或者至少確保備份有效!
一些重要的事實:
- 我 100% 確定在 Proxmox 升級之前找到所有虛擬機的工作
- 在執行任何更新相關命令之前,我將每台機器的備份創建到網路共享(備份伺服器)
- 備份是通過 proxmox Web 界面進行的
- 所有虛擬機都在 Ubuntu 20.04 LTS 上執行,包括。郵件伺服器
- 我試圖將BIOS設置為UEFI(沒有成功)
- 我不是 Proxmox Pro 使用者,所以如果需要額外數據,請提及我如何獲得它以避免不必要的文章
錯誤:
pveversion -v 輸出 root@hv1:/home/axxmin# pveversion -v proxmox-ve: 7.1-1 (執行核心: 5.13.19-2-pve) pve-manager: 7.1-8 (執行版本: 7.1-8/5b267f33) pve-核心助手:7.1-6 pve-kernel-5.13:7.1-5 pve-kernel-5.4:6.4-11 pve-kernel-5.3:6.1-6 pve-kernel-5.13.19-2-pve:5.13.19- 4 pve-kernel-5.4.157-1-pve: 5.4.157-1 pve-kernel-5.4.41-1-pve: 5.4.41-1 pve-kernel-5.3.18-3-pve: 5.3.18 -3 pve-kernel-5.3.18-2-pve:5.3.18-2 ceph-fuse:14.2.21-1 corosync:3.1.5-pve2 criu:3.15-1+pve-1 glusterfs-client:9.2- 1 ifupdown:剩餘配置 ifupdown2:3.1.0-1+pmx3 ksm-control-daemon:1.4-1 libjs-extjs:7.0.0-1 libknet1:1.22-pve2 libproxmox-acme-perl:1.4.0 libproxmox-backup- qemu0:1.2.0-1 libpve-access-control:7.1-5 libpve-apiclient-perl:3.2-1 libpve-common-perl:7.0-14 libpve-guest-common-perl:4.0-3 libpve-http-server -perl:4.0-4 libpve-storage-perl:7.0-15 libqb0:1.0。5-1 libspice-server1:0.14.3-2.1 lvm2:2.03.11-2.1 lxc-pve:4.0.11-1 lxcfs:4.0.11-pve1 novnc-pve:1.2.0-3 proxmox-backup-client: 2.1.2-1 proxmox-backup-file-restore:2.1.2-1 proxmox-mini-journalreader:1.3-1 proxmox-widget-toolkit:3.4-4 pve-cluster:7.1-2 pve-container:4.1-3 pve-docs:7.1-2 pve-edk2-firmware:3.20210831-2 pve-firewall:4.2-5 pve-firmware:3.3-3 pve-ha-manager:3.3-1 pve-i18n:2.6-2 pve-qemu- kvm:6.1.0-3 pve-xtermjs:4.12.0-1 qemu-server:7.1-4 smartmontools:7.2-pve2 spiceterm:3.2-2 swtpm:0.7.0~rc1+2 vncterm:1.7-1 zfsutils-linux : 2.1.1-pve31-2 pve-edk2-firmware:3.20210831-2 pve-firewall:4.2-5 pve-firmware:3.3-3 pve-ha-manager:3.3-1 pve-i18n:2.6-2 pve-qemu-kvm:6.1。 0-3 pve-xtermjs:4.12.0-1 qemu-server:7.1-4 smartmontools:7.2-pve2 spiceterm:3.2-2 swtpm:0.7.0~rc1+2 vncterm:1.7-1 zfsutils-linux:2.1.1 -pve31-2 pve-edk2-firmware:3.20210831-2 pve-firewall:4.2-5 pve-firmware:3.3-3 pve-ha-manager:3.3-1 pve-i18n:2.6-2 pve-qemu-kvm:6.1。 0-3 pve-xtermjs:4.12.0-1 qemu-server:7.1-4 smartmontools:7.2-pve2 spiceterm:3.2-2 swtpm:0.7.0~rc1+2 vncterm:1.7-1 zfsutils-linux:2.1.1 -pve3
相關備份的備份配置:
balloon: 6144 boot: cdn bootdisk: sata0 cores: 2 ide2: none, media=cdrom memory: 12288 name: axx-mcow-srv01 net0: virtio=4E:86:95:6A:FC:46,bridge=vmbr20, firewall=1 numa: 0 onboot: 1 ostype: l26 sata0: vm_instances:vm-140-disk-0,size=200G scsihw: virtio-scsi-pci smbios1: uuid=a238b981-27dd-4ebd-acee-1a9ee97d66a1 sockets: 1 vmgenid: 971eb84d-7502-4a68-97af-66c595c011b9 #qmdump#map:sata0:drive-sata0:vm_instances:raw:
虛擬機配置
root@hv1:~# qm config 140 balloon: 6144 boot: cdn bootdisk: sata0 cores: 2 ide2: none,media=cdrom memory: 12288 name: axx-mcow-srv01 net0: virtio=4E:86:95:6A:FC:46,bridge=vmbr20,firewall=1 numa: 0 onboot: 1 ostype: l26 sata0: vm_instances:vm-140-disk-0,size=200G scsihw: virtio-scsi-pci smbios1: uuid=a238b981-27dd-4ebd-acee-1a9ee97d66a1 sockets: 1 vmgenid: 66102f99-158b-451b-a8e2-187ebed7b183
更新1
我發現這個https://forum.proxmox.com/threads/after-backup-boot-failed-not-a-bootable-disk.67954/>對我的理解很有意義。由於我沒有分區表的單獨備份,我發現了一個“引導修復磁碟”(<https://help.ubuntu.com/community/Boot-Repair)。這並沒有修復我的虛擬機,但給了我一些可能有用的額外資訊。
更新2
在使用 Gparted live 啟動後,我可以說分區表已經消失了。我嘗試使用
testdisk
(https://interworks.com/blog/smatlock/2015/02/13/restore-damaged-or-corrupted-linux-partition-table/)重建它,但這不起作用。 是否可以創建具有完全相同配置(包括磁碟大小)的 VM 並在其上安裝 ubuntu(與我們始終使用預設設置相同的磁碟設置)並將該分區表複製到“損壞的”伺服器?
我可以“修復”分區表,以便伺服器再次啟動。之後,我能夠將所有東西遷移到新的伺服器上,以確保一切正常工作。我用下面的步驟做到了。
- 使用引導修復盤引導伺服器
- 關閉自動啟動工具“開機修復”
- 打開終端視窗並執行命令
sudo testdisk /dev/sda
。這將啟動一個(命令行)工具來掃描您的磁碟(sda)以查找分區。- 確認磁碟
Proceed
- 選擇使用的分區表類型。我有一個“BIOS”磁碟,所以我需要
Intel
。如果您有“EUFI”磁碟,請選擇EFI GPT
.- 去
Analyse
分析你的磁碟。- 繼續
Quick search
執行快速掃描。根據磁碟的不同,這可能需要幾秒鐘到一個小時。- 我認為在某些情況下 a
quick scan
會伸出援手,但我注意到 andeeper search
更準確並增加了修復磁碟的機會。就我而言,這quick scan
還不夠。可能會
deep searc
找到多個分區。您可以使用 瀏覽文件P
。您可以通過選擇..
或按返回,Q
但要小心,按Q
1 次過多,您需要重新開始!找到
etc
目錄所在的分區,並使用箭頭鍵(<- 或 ->)將其標記為P
(主)分區。在我的情況下,有第二個分區具有類似 Linux 的文件結構,所以我將其設置為“主要可引導”*
,但我注意到並不總是找到這個分區。如果找不到,(在我的測試中)它會伸出手來將etc
目錄的分區標記為 primaryP
。(見下面我的測試機截圖)。Enter
用(繼續)確認設置,然後Write
將新分區表寫入磁碟。分區表寫入後,打開引導修復工具(我們一開始關閉)修復Linux引導載入程序(Grub)。您可以使用 執行修復
Recommended repair
。如果此選項不可用,請重新啟動引導修復工具,因為它可能在分區表掃描期間仍處於活動狀態。我可以像這樣修復我們的郵件伺服器。我用一些測試機器上的工作備份恢復了(損壞的)機器備份。我能夠修復我測試過的所有 (5) 台機器。
我希望這個答案可以幫助別人。