針對Linux VM開機問題進行疑難解答,因為 fstab 錯誤

適用於:✔️ Linux VM

注意

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

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

由於 fstab 設定錯誤,導致虛擬機開機問題的常見原因如下:

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

識別 fstab 問題

在 [開機診斷] (/azure/virtual-machines/boot-diagnostics#boot-diagnostics#boot-diagnostics-view) 刀 Azure 入口網站 鋒視窗中,檢查 VM 的目前開機狀態。 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。 這些步驟可能會根據使用的 Linux OS 類型,以及根帳戶的存取權而有所不同。 請遵循 單一使用者模式 檔,針對每個支援的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. 在變更 fstab 項目之後,請使用 mount -a 作為最佳做法。 這會重新執行 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 腳本會使用修復擴充 run 功能命令及其 --run-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、掛接 OS 磁碟的附加複本,以及變更其 fstab 檔案來實作變更。 請遵循這裡的步驟:

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

使用Manual方法

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

成功將OS磁碟連結至復原 VM 之後,請遵循詳細的 chroot 指示 ,將和 chroot 掛接至所連結 OS 磁碟的文件系統。 然後,實 作 fstab 疑難解答步驟 ,以對有問題的 OS 磁碟的 fstab 檔案進行適當的變更。

與我們連絡,以取得說明

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