針對 Linux VM 因為 fstab 錯誤導致的啟動問題進行疑難排解

適用於:✔️ Linux VM

備註

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

總結

Linux 檔系統數據表 fstab 是一個組態表,其設計目的是在系統開機程式期間,以有序的方式設定偵測並掛接特定文件系統的規則。

本文討論錯誤 fstab 設定會導致開機問題並提供疑難解答指引的多個條件。

以下是一些常見的原因,可能會導致虛擬機 (VM) 開機問題,因為 fstab 設定錯誤:

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

識別 fstab 問題

請在Azure入口網站的 Boot Diagnostics刀片的序列日誌中查看虛擬機目前的開機狀態。 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 view system 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 是使用的裝入點範例。 檔系統裝入點的相依性失敗會根據所使用的名稱而有所不同。

解決方案

有兩種方法可以解決此問題:

在線修復 VM

使用序列主控台

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

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

    • 每一行上的欄位會以製表元或空格分隔。 空白行會遭到忽略。 具有數字元號 (#) 做為第一個字元的行是批注。 批注行可以保留在 fstab 檔案中,但不會進行處理。 建議您對不確定的 fstab 行加上註解,而不是移除這些行。

    • 利用檔案系統分割區的 UUID 將資料磁碟掛載到 Azure 虛擬機上。 若要判斷文件系統的 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。 有兩種方法可以採取離線模式:

使用 Azure Linux 自動修復 (ALAR)

Azure Linux 自動修復(ALAR)腳本是 VM 修復擴充功能的一部分,該擴充功能 使用 Azure Linux 自動修復(ALAR)來修復 Linux VM。 ALAR 涵蓋多個修復案例的自動化,包括 /etc/fstab 問題。

ALAR 腳本會使用修復延伸模組 repair-button ,藉由指定 --button-command fstab來修正 fstab 問題。 此參數會觸發自動復原。 實作下列步驟,透過離線 ALAR 方法將 fstab 錯誤自動化:

az extension add -n vm-repair
az extension update -n vm-repair
az vm repair repair-button --button-command 'fstab' --verbose --resource-group $RGNAME --name $VMNAME

備註

請據以取代資源組名 $RGTEST 和 VM 名稱 $VMNAME 。

  • 修復 VM 腳本會與 ALAR 腳本一起使用,暫時建立資源群組、修復 VM,以及受影響 VM OS 磁碟的複本。 它會備份源檔/etc/fstab,然後藉由移除或註解掉不需要來啟動系統的資料檔系統項目來修改它。
  • 成功啟動 OS 之後,請檢閱和編輯 /etc/fstab 檔案,以修正任何可能導致重新啟動錯誤的錯誤。
  • 最後, repair-button 腳本會自動刪除包含修復 VM 的資源群組。

使用手動方法

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

  • 使用 Azure portal
  • 使用 Azure CLI

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