Share via


針對因 fstab 錯誤而導致的 Linux VM 開機問題進行疑難解答

注意事項

本文中參考的 CentOS 是 Linux 發行版,並會到達生命周期結束 (EOL) 。 請考慮您的使用並據以規劃。 如需詳細資訊,請 參閱 CentOS 生命週期結束指引

Linux 檔系統數據表 fstab 是一個組態表,其設計目的是要設定在系統開機程式期間,以循序方式偵測和掛接特定文件系統的規則。 本文討論錯誤 fstab 設定可能導致開機問題的多個條件,並提供疑難解答指引。

以下列出幾個可能導致因 fstab 設定錯誤而導致虛擬機開機問題的常見原因:

  • 使用傳統檔案系統名稱,而不是使用文件系統的通用唯一標識子 (UUID) 。
  • 使用不正確的 UUID。
  • fstab 組態內沒有 nofail 選項的未連結裝置有專案存在。
  • fstab 組態中的項目不正確。

識別 fstab 問題

在 [開機診斷] 內的 [開機診斷] (/azure/virtual-machines/boot-diagnostics#boot-diagnostics-view) 刀鋒視窗內,檢查 VM 的目前開機狀態 Azure 入口網站。 VM 將會處於緊急模式。 您會看到類似下列導致緊急模式狀態的記錄專案:

[K[[1;31m TIME [0m] Timed out waiting for device dev-incorrect.device.
[[1;33mDEPEND[0m] Dependency failed for /data.
[[1;33mDEPEND[0m] Dependency failed for Local File Systems.
…
Welcome to emergency mode! After logging in, type "journalctl -xb" to viewsystem logs, "systemctl reboot" to reboot, "systemctl default" to try again to boot into default mode.
Give root password for maintenance
(or type Control-D to continue)

注意事項

“/data” 是使用的裝入點範例。 檔系統裝入點的相依性失敗會根據使用的名稱而有所不同。

解決方案

有 2 種方式可以解決問題:

修復 VM Online

使用序列主控台

  1. 從 Azure 入口網站 連線到 VM 的序列主控台
  2. 需要手動存取單一使用者模式,才能重新設定 fstab。 這些步驟可能會根據使用中的LinuxOS類型和根帳戶的存取權而有所不同。 請遵循 單一使用者模式 檔,針對每個支援的Linux合作夥伴映像存取單一使用者模式。
Fstab 疑難解答步驟
  1. VM 開機進入單一使用者模式之後。 使用您最愛的文字編輯器開啟 fstab 檔案。

    vi /etc/fstab
    
  2. 檢閱 中列出的文件系統 /etc/fstab。 fstab 檔案中的每一行都會指出 VM 啟動時所掛接的文件系統。 如需 fstab 檔案語法的詳細資訊,請執行 man fstab 命令。 若要針對開機失敗進行疑難解答,請檢閱無法掛接的文件系統專案。 最好檢閱每一行,以確保結構和內容都正確無誤。 正確管理 fstab 檔案的幾個考慮點如下:

    • 每一行上的欄位會以索引標籤或空格分隔。 會忽略空白行。 具有數位符號 (#) 作為第一個字元的行是批注。 批注行可以保留在 fstab 檔案中,但不會處理。 建議您將不確定的 fstab 行批注,而不是移除行。

    • 使用文件系統磁碟分區的 UUID,在 Azure VM 上掛接數據磁碟。若要判斷文件系統的 UUID,請執行 blkid 命令。 如需語法的詳細資訊,請執行 man blkid 命令。 fstab 檔案中的 UUID 專案範例:

      UUID=<UUID number here>  /data      xfs    defaults,nofail 0  0
      
    • nofail使用數據磁碟 (檔系統專案中的 選項,) 啟用啟動,即使在對應專案的分割區中發生錯誤之後仍可繼續。 選項 nofail 可協助確保即使文件系統已損毀或在啟動時不存在,VM 仍會啟動。

  3. 將變更儲存至 fstab 檔案。

  4. 在對 mount -a fstab 專案進行變更之後,請使用 作為最佳做法。 這會重新執行 fstab 設定,並通知使用者任何現有的語法或輸入錯誤。

  5. 一旦驗證語法和項目之後,請使用下列命令重新啟動 VM。

    reboot -f
    
  6. 如果專案批註或修正成功,系統應該會在入口網站中到達Bash提示字元。 檢查您是否可以連線到 VM。

注意事項

您也可以使用 「ctrl+x」 命令,這也會重新啟動 vm。

離線修復 VM

如果無法使用 VM 序列控制台存取,替代的解決方案是離線修復 VM。 有兩種方式可以採用脫機方法:

使用 Azure Linux 自動修復 (ALAR)

Azure Linux 自動修復 (ALAR) 腳本是 使用 Azure 虛擬機修復命令修復 Linux VM 中所述之 VM 修復延伸模組的一部分。 ALAR 涵蓋多個修復案例的自動化,包括 /etc/fstab 問題。

ALAR 腳本會使用 repair 擴充 run 功能命令及其 --run-id 選項。 自動化復原的 script-id 為: linux-alar2。 實作下列步驟,透過離線 ALAR 方法將 fstab 錯誤自動化:

az vm repair create --verbose -g centos7 -n cent7 --repair-username rescue --repair-password 'password!234' --copy-disk-name  repairdiskcopy
az vm repair run --verbose -g centos7 -n cent7 --run-id linux-alar2 --parameters fstab --run-on-repair
az vm repair restore --verbose -g centos7 -n cent7

注意事項

資源組名 「centos7、vm name 」cent7」 和 --copy-disk-name “repairdiskcopy” 是範例,且值需要據以變更。

fstab 修復腳本會備份原始檔案,並去除 /etc/fstab 檔案中任何不需要開機系統的行。 成功啟動 OS 之後,請再次編輯 fstab,並更正之前不允許重新啟動系統的任何錯誤。

或者,建立修復 VM 之後,也可以手動登入修復 VM、掛接作業系統磁碟的附加複本,並變更其 fstab 檔案來實作變更。 請遵循下列步驟:

  • 使用 az vm repair create 命令建立修復 VM。
  • 若要在救援 VM 中將連結 OS 磁碟的文件系統掛接並進行 Chroot,請遵循詳細的 Chroot 指示
  • 接下來,遵循與上述相同的 fstab 疑難解答步驟
  • 套用變更之後, az vm repair restore 命令可用來執行與原始 VM 的自動 OS 磁碟交換。

使用手動方法

如果序列主控台和 ALAR 方法都不可行或失敗,則必須手動執行修復。 請遵循此處的步驟,手動將 OS 磁碟連結至復原 VM,並將 OS 磁碟交換回原始 VM:

一旦操作系統磁碟成功連結至復原 VM,請遵循詳細的 節流指示 ,以掛接並區塊至連結 OS 磁碟的文件系統。 然後,實作 fstab 疑難解答步驟 ,對有問題的 OS 磁碟的 fstab 檔案進行適當的變更。

與我們連絡,以取得說明

如果您有問題或需要相關協助,請建立支援要求,或詢問 Azure community 支援。 您也可以將產品意見反應提交給 Azure 意應見反社群