針對因 Hyper-V 驅動程式相關錯誤而導致的 Linux 虛擬機開機和網路問題進行疑難解答
Azure 會在 Hyper-V Hypervisor 上執行,而 Linux 系統需要某些 Hyper-V 核心模組才能在 Azure 上執行。 這些核心模組會組合成 Linux Integration Services (適用於 Hyper-V 和 Azure 的 LIS) 驅動程式。 Microsoft 會將其直接提供給上游 Linux 核心。
本文討論一或多個停用的 Hyper-V 驅動程式可能導致 Linux 虛擬機器 (VM) 開機和網路問題的情況。
必要條件
請確定 序列主控台 已在Linux VM 中啟用並正常運作。
如何識別遺漏的 Hyper-V 驅動程序問題
若要識別您的 VM 是否因為遺失 Hyper-V 驅動程式而無法開機,請使用 Azure CLI 或 Azure 入口網站,在開機診斷窗格或序列控制檯窗格中檢視 VM 的序列控制台記錄。 失敗範例輸出會顯示在下列對應的章節中。
進行疑難解答之前
若要針對案例 1 進行疑難解答 :網路 Hyper-V 驅動程式已停 用,且 案例 2:NIC mac 位址已變更或不相符,您需要 Linux VM 的 序列控制台 存取。
如果您沒有序列主控台存取權,請遵循 離線方法 ,從救援虛擬機存取有問題的OS磁碟內容。 離線方法需要存取 Azure CLI 或 Azure Cloud Shell。
若要針對案例 3 進行疑難解答 :其他 Hyper-V 驅動程式已停用,離線方法是解決問題的唯一選項。
案例 1:已停用網路 Hyper-V 驅動程式
因為網路服務無法使用,所以您無法將 SSH (SSH) 至虛擬機,但您仍然可以從 Azure 入口網站 透過序列主控台登入。 您會在序列控制台中看到下列類型的錯誤,或在 Azure 入口網站 的 [開機診斷] 窗格中看到最新的序列記錄:
cloud-init[807]: Cloud-init v. 19.4 running 'init-local' at Tue, xx Aug 20XX 20:41:53 +0000. Up 5.83 seconds.
cloud-init[807]: 20XX-08-XX 20:41:54,231 - stages.py[WARNING]: Failed to rename devices: [nic not present] Cannot rename mac=xx:xx:xx:xx:xx:xx to eth0, not available.
[ OK ] Started Initial cloud-init job (pre-networking).
----
[FAILED] Failed to start LSB: Bring up/down networking.
See 'systemctl status network.service' for details.
或
cloud-init[799]: 2022-XX-XX 19:04:06,267 - azure.py[WARNING]: Interface not found for DHCP
cloud-init[799]: 2022-XX-XX 19:04:07,269 - azure.py[WARNING]: Interface not found for DHCP
cloud-init[799]: 2022-XX-XX 19:04:10,274 - azure.py[WARNING]: Interface not found for DHCP
cloud-init[799]: 2022-XX-2XX 19:04:10,277 - azure.py[WARNING]: IMDS network metadata has incomplete configuration: None
解決方案 1:使用序列主控台啟用 Hyper-V 網路驅動程式
存取 VM 的序列主控台。 網路已關閉,但登入提示仍可供使用。
使用正確的認證登入 VM。
切換至具有 sudo 存取權的根帳戶或用戶帳戶。
移至 /etc/modprobe.d 目錄,並尋找任何停用hv_netvsc驅動程式的行。
執行下列命令,識別停用hv_netvsc驅動程式和對應行號的檔案:
grep -nr "hv_netvsc" /etc/modprobe.d/
修改對應的檔案,並將hv_netvsc專案批注化或刪除:
vi /etc/modprobe.d/disable.conf
注意事項
- 停用驅動程式的專案是由Linux作業系統所定義,而不是由 Microsoft 所定義。
- 將取代
disable.conf
為停用hv_netvsc驅動程式的對應檔名。
針對目前載入的核心重建初始 RAMdisk 映射:
針對 RHEL/SLES 型影像
# dracut -f -v
針對Ubuntu/Debian型映像
# mkinitramfs -k -o /boot/initrd.img-$(uname -r)
重新啟動 VM。
請務必備份原始初始 RAMdisk 映像,以便在需要時進行復原。
針對 RHEL 型映射:
# cp /boot/initramfs-<kernelVersion>.img /boot/initramfs-<kernelVersion>.img.bak
針對 SLES 型映射:
# cp /boot/initrd-<kernelVersion> /boot/initrd-<kernelVersion>.bak
針對Ubuntu/Debian型映像:
# cp /boot/initrd.img-<kernelVersion> /boot/initrd.img-<kernelVersion>.bak
解決方案 2:啟用離線 Hyper-V 網路驅動程式
使用 az vm repair 從救援 VM 存取受影響 OS 磁碟的內容。
遵循 Chroot 指示,在救援 VM 中將連結 OS 磁碟的文件系統掛接並進行節流。
存取受影響 OS 磁碟的內容之後,請遵循 解決方案 1:使用序列主控台啟用 Hyper-V 網路驅動程式 中的步驟 4 和 5,重新啟用驅動程式並重建初始 RAMdisk 映射。
在重建初始RAMdisk映像之前,請切換至Chroot環境。 必須提供映像的完整路徑。
套用變更之後,請執行與原始 VM 的自動 OS 磁碟交換,並使用
az vm repair restore
命令重新啟動系統。
案例 2:NIC MAC 位址已變更或不符合
如果網路適配器 MAC 位址已變更或不符合作業系統設定,您將無法透過 SSH 連線到 VM,因為網路服務無法使用。 您仍然可以從 Azure 入口網站 透過序列主控台登入。 系統會顯示類似案例 1:網路 Hyper-V 驅動程式已停 用的錯誤。
即使已啟用 Hyper-V 網路驅動程式,如果問題仍持續發生,請使用下列其中一個解決方案來驗證 OS NIC 設定並解決問題。
解決方案 1:使用序列主控台修正 NIC MAC 位址不符
存取 VM 的序列主控台。 網路已關閉,但登入提示仍可供使用。
使用正確的認證登入 VM。
切換至具有 sudo 存取權的根帳戶或用戶帳戶。
移至 /etc/cloud/cloud.cfg.d 目錄。
考慮使用 Linux 合作夥伴映像 ,開啟並編輯下列檔案:
- 91-azure_datasource.cfg ,適用於 RHEL 型散發。
- 90_dpkg.cfg 代表Debian和Ubuntu型散發。
如果參數
apply_network_config
設定為 false,則將它設定為 true。 如果未指定任何項目,預設值會設定為 true。 此設定可確保新的 MAC 位址會在下次重新啟動時套用至網路組態。一般而言,只有在系統管理員刪除或新增 NIC,或後端中有 NIC 更新時,NIC MAC 位址才會變更。 如果不需要透過 cloud-init 進行網路設定,且
apply_network_config
參數必須設定為 false,請刪除 /var/lib/cloud/instance/obj.pkl 檔案,然後重新啟動系統。# rm /var/lib/cloud/instance/obj.pkl
套用變更之後,請重新啟動系統。
解決方案 2:修正 NIC MAC 位址離線不符的問題
- 使用 az vm repair 命令,從救援虛擬機存取受影響 OS 磁碟的內容。
- 遵循 Chroot 指示,在救援 VM 中正確地將連結 OS 磁碟的文件系統掛接並進行 Chroot。
- 存取受影響 OS 磁碟的復本內容之後,請遵循 解決方案 1:使用序列主控台修正 NIC MAC 位址不符 中的步驟 4 到 7,進行網路變更或清除 obj.pkl 檔案。
- 套用變更之後,請使用
az vm repair restore
命令來執行與原始 VM 的自動 OS 磁碟交換,並重新啟動系統。
案例 3:已停用其他 Hyper-V 驅動程式
如果您遇到其他 Hyper-V 驅動程式的開機問題,您可能無法透過 SSH 連線到 VM,因為網路服務無法使用。 您已卸除至拖曳殼層。 您可以從 Azure 入口網站 透過序列主控台來檢視此問題。 您可以在序列控制台中看到下列錯誤,或在 Azure 入口網站 的 [開機診斷] 窗格中看到最新的序列記錄:
dracut-initqueue[455]: Warning: dracut-initqueue timeout - starting timeout scripts
dracut-initqueue[455]: Warning: Could not boot.
Starting Setup Virtual Console...
[ OK ] Started Setup Virtual Console.
Starting Dracut Emergency Shell...
Warning: /dev/mapper/rootvg-rootlv does not exist
Generating "/run/initramfs/rdsosreport.txt"
Entering emergency mode. Exit the shell to continue.
Type "journalctl" to view system logs.
You might want to save "/run/initramfs/rdsosreport.txt" to a USB stick or /boot
after mounting them and attach it to a bug report.
dracut:/#
或
Gave up waiting for root file system device. Common problems:
- Boot args (cat /proc/cmdline)
- Check rootdelay= (did the system wait long enough?)
- Missing modules (cat /proc/modules; ls /dev)
ALERT! UUID=143c811b-9b9c-48f3-b0c8-040f6e65f50aa does not exist. Dropping to a shell!
BusyBox v1.27.2 (Ubuntu 1:1.27.2-2ubuntu3.4) built-in shell (ash)
Enter 'help' for a list of built-in commands.
(initramfs)
解決方案:啟用 Hyper-V 驅動程式
如果因為其他 Hyper-V 驅動程式已停用而無法存取 VM,請使用離線方法重新啟用驅動程式,因為無法載入 initramfs。
使用 az vm repair 命令,從救援虛擬機存取有問題的 OS 磁碟內容。
遵循 Chroot 指示,在救援 VM 中正確地將連結 OS 磁碟的文件系統掛接並進行 Chroot。
進入 chroot 環境之後,移至 /etc/modprobe.d 目錄,並尋找任何可能停用hv_utils、hv_vmbus、hv_storvsc或hv_netvsc驅動程式的行。
執行下列命令來識別停用hv_utils、hv_vmbus、hv_storvsc或hv_netvsc驅動程式的檔案,以及對應的行號。
egrep -nr "hv_utils|hv_vmbus|hv_storvsc|hv_netvsc" /etc/modprobe.d/
修改對應的檔案,並將hv_utils、hv_vmbus、hv_storvsc或hv_netvsc專案批注化或刪除。 這些專案最常是下列任一 (或兩者) :
vi /etc/modprobe.d/disable.conf
重要事項
- 停用驅動程式的專案是由Linux作業系統所定義,而不是由 Microsoft 所定義。
- 將取代
disable.conf
為停用 Hyper-V 驅動程式的對應檔名。
針對目前載入的核心重建初始 RAMdisk 映射:
針對 RHEL/SLES 型影像
# dracut -f -v
針對Ubuntu/Debian型映像
# mkinitramfs -k -o /boot/initrd.img-$(uname -r)
套用變更之後,請使用
az vm repair restore
命令來執行與原始 VM 的自動 OS 磁碟交換,並重新啟動系統。
請務必備份原始初始 RAMdisk 映射,以便視需要進行復原。
如果問題仍未解決,請參閱 Azure Linux 虛擬機無法開機,並輸入 dracut 緊急殼層 來調查繪製問題。
後續步驟
如果特定開機錯誤不是 Hyper-V 問題,請參閱針對 Azure Linux 虛擬機器 開機錯誤進行疑難解答,以取得進一步的疑難解答選項。
與我們連絡,以取得說明
如果您有問題或需要相關協助,請建立支援要求,或詢問 Azure community 支援。 您也可以將產品意見反應提交給 Azure 意應見反社群。
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應