Ubuntu

從 Promox 6.x 升級到 7.x 後 vm “不是可引導磁碟”

  • March 21, 2022

今天我決定將PVE從V6.2.4升級到V7.1我是按照以下步驟進行的:

  1. 首先升級到最新的 6.x 版本,apt-get update然後是apt-get upgrade-dist.
  2. 我按照這些步驟https://pve.proxmox.com/wiki/Upgrade_from_6.x_to_7.0

在升級過程中,我遇到了一些關於“找不到磁碟”的錯誤,我很擔心,但升級仍在繼續。(也許他們與我現在遇到的問題有關)升級完成後,我重新啟動主機以完成升級。啟動的 LXC 容器(啟動時啟動)沒有任何問題。一些虛擬機(啟動時啟動)也可以直接工作。

1640288957825.jpeg

一些虛擬機Boot failed: not a bootable disk在控制台中給出了錯誤並不斷重新啟動。經過一些Google嘗試後,我在某處發現了一個文章,有時它有助於重新啟動主機,所以我再次這樣做,之後所有的虛擬機都給出了相關的錯誤。我用Google搜尋了幾個小時,發現了很多類似的問題。唯一對大多數虛擬機有用的是恢復備份。不幸的是,這不適用於最重要的機器,郵件伺服器。它包含 170Gb 的郵件和唯一的備份我有一個“proxmox 備份”(圖像。7x)。它們都不起作用,因為它們都給出了相同的問題。

問題:

  1. 如何讓 VM 再次啟動?如果它無法修復,有沒有辦法進入磁碟以便我可以獲取數據?
  2. 這是怎麼發生的?是我的錯嗎?這是一個錯誤嗎?這是一個已知問題嗎?
  3. 我不敢再重新啟動 proxmox,因為我害怕其他 VM 也會永久損壞。我怎麼能確定這不會再次發生?或者至少確保備份有效!

一些重要的事實:

  • 我 100% 確定在 Proxmox 升級之前找到所有虛擬機的工作
  • 在執行任何更新相關命令之前,我將每台機器的備份創建到網路共享(備份伺服器)
  • 備份是通過 proxmox Web 界面進行的
  • 所有虛擬機都在 Ubuntu 20.04 LTS 上執行,包括。郵件伺服器
  • 我試圖將BIOS設置為UEFI(沒有成功)
  • 我不是 Proxmox Pro 使用者,所以如果需要額外數據,請提及我如何獲得它以避免不必要的文章

錯誤:

1640291226399.png

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 啟動後,我可以說分區表已經消失了。我嘗試使用testdiskhttps://interworks.com/blog/smatlock/2015/02/13/restore-damaged-or-corrupted-linux-partition-table/)重建它,但這不起作用。 在此處輸入圖像描述 是否可以創建具有完全相同配置(包括磁碟大小)的 VM 並在其上安裝 ubuntu(與我們始終使用預設設置相同的磁碟設置)並將該分區表複製到“損壞的”伺服器?

我可以“修復”分區表,以便伺服器再次啟動。之後,我能夠將所有東西遷移到新的伺服器上,以確保一切正常工作。我用下面的步驟做到了。

  1. 使用引導修復盤引導伺服器
  2. 關閉自動啟動工具“開機修復”
  3. 打開終端視窗並執行命令sudo testdisk /dev/sda。這將啟動一個(命令行)工具來掃描您的磁碟(sda)以查找分區。
  4. 確認磁碟Proceed
  5. 選擇使用的分區表類型。我有一個“BIOS”磁碟,所以我需要Intel。如果您有“EUFI”磁碟,請選擇EFI GPT.
  6. Analyse分析你的磁碟。
  7. 繼續Quick search執行快速掃描。根據磁碟的不同,這可能需要幾秒鐘到一個小時。
  8. 我認為在某些情況下 aquick scan會伸出援手,但我注意到 andeeper search更準確並增加了修復磁碟的機會。就我而言,這quick scan還不夠。

可能會deep searc找到多個分區。您可以使用 瀏覽文件P。您可以通過選擇..或按返回,Q但要小心,按Q1 次過多,您需要重新開始!

找到etc目錄所在的分區,並使用箭頭鍵(<- 或 ->)將其標記為P(主)分區。在我的情況下,有第二個分區具有類似 Linux 的文件結構,所以我將其設置為“主要可引導” *,但我注意到並不總是找到這個分區。如果找不到,(在我的測試中)它會伸出手來將etc目錄的分區標記為 primary P。(見下面我的測試機截圖)。Enter用(繼續)確認設置,然後Write將新分區表寫入磁碟。

在此處輸入圖像描述

分區表寫入後,打開引導修復工具(我們一開始關閉)修復Linux引導載入程序(Grub)。您可以使用 執行修復Recommended repair。如果此選項不可用,請重新啟動引導修復工具,因為它可能在分區表掃描期間仍處於活動狀態。

在此處輸入圖像描述

我可以像這樣修復我們的郵件伺服器。我用一些測試機器上的工作備份恢復了(損壞的)機器備份。我能夠修復我測試過的所有 (5) 台機器。

我希望這個答案可以幫助別人。

引用自:https://unix.stackexchange.com/questions/683756