針對 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
- 離線修復 VM
修復 VM Online
使用序列主控台
- 從 Azure 入口網站 連線到 VM 的序列主控台。
- 需要手動存取單一使用者模式,才能重新設定 fstab。 這些步驟可能會根據使用的 Linux OS 類型,以及根帳戶的存取權而有所不同。 請遵循 單一使用者模式 檔,針對每個支援的Linux合作夥伴映像存取單一使用者模式。
Fstab 疑難解答步驟
VM 開機進入單一使用者模式之後。 使用您慣用的文字編輯器開啟 fstab 檔案。
vi /etc/fstab
檢閱 中
/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 不存在於啟動時也一樣啟動。
儲存 fstab 檔案的變更。
在變更 fstab 項目之後,請使用
mount -a
作為最佳做法。 這會重新執行 fstab 組態,並通知使用者任何現有的語法或項目錯誤。一旦驗證語法和專案,請使用下列命令重新啟動 VM。
reboot -f
如果專案批註或修正成功,系統應該會在入口網站中觸達 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 意見反應社群提交產品意見反應。