排解因 fstab 錯誤而導致的 Linux VM 啟動問題


Fstab (檔案系統表) 是一種設定檔,用於定義 Linux VM 中的磁碟分割區、檔案系統和檔案共用掛接點,在系統重新啟動後如何保持不變。

本文列出多種情況,說明錯誤的 fstab 設定可能導致啟動問題,並提供疑難排解建議來修正問題。

以下列出幾個常見的 fstab 設定錯誤問題:

  • fstab 設定檔中的語法錯誤
  • UUID 不正確
  • 有未附加/無法使用的裝置項目
  • 已淘汰的掛接選項 (例如 xfs 檔案系統類型適用的 nobarrier),適用於 SUSERHEL 映像檔。

事前準備

  • 如要在 Cloud Logging 中記錄序列埠輸出內容,請先熟悉 Cloud Logging
  • 如果尚未設定驗證,請先完成設定。 「驗證」是指驗證身分的程序,確認您有權存取 Google Cloud 服務和 API。如要從本機開發環境執行程式碼或範例,請選取下列任一選項,向 Compute Engine 進行驗證:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. 安裝 Google Cloud CLI。 安裝完成後,執行下列指令初始化 Google Cloud CLI:

      gcloud init

      如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI

    2. Set a default region and zone.

    REST

    如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 gcloud CLI 的憑證。

      安裝 Google Cloud CLI。 安裝完成後,執行下列指令初始化 Google Cloud CLI:

      gcloud init

      如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI

    詳情請參閱 Google Cloud 驗證說明文件中的「Authenticate for using REST」。

找出 fstab 問題

如果發生開機問題,Google 強烈建議您在 Linux VM 的序列主控台中查看開機記錄。虛擬機會進入緊急模式,並顯示錯誤訊息,指出問題與 fstab 有關。

  [K[[1;31m TIME [0m] Timed out waiting for device dev-incorrect.device.
  [[1;33mDEPEND[0m] Dependency failed for /distribution.
  [[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)
  

根據錯誤訊息,/distribution檔案系統有依附元件故障問題。檔案系統掛接點的依附元件故障情形會因使用的檔案系統名稱而異。

解決方法

如要解決 Linux VM 中發生的 fstab 錯誤,請使用下列選項。 Google Cloud與手動方法相比,使用序列控制台可更快解決問題。

如要使用下列方法解決 fstab 問題,請務必為 VM 啟用序列埠存取權

方法 1:使用序列主控台以緊急模式登入 VM

  1. 從 Google Cloud 控制台登入 VM 的序列埠主控台。 序列控制台

  2. 在目前的緊急模式中,輸入根密碼即可存取 VM。

  3. 使用慣用的文字編輯器開啟 fstab 檔案。進行必要變更,然後將變更儲存至 fstab 檔案。在以下範例中,我們使用 vi 編輯器。

    vi /etc/fstab

    Fstab 檔案

    在上述範例中,裝置會從 VM 分離。/distribution註解參考檔案系統的行,或移除 /distribution 掛接點的 fstab 項目。

    如要進一步瞭解 fstab 設定和語法,請使用 man fstab

  4. 儲存檔案並結束編輯器。如果您使用 vi 編輯器,請按 ESC + :wq! 儲存並退出編輯器。

  5. 在提示中輸入 reboot,繼續執行開機程序。

  6. 成功修正問題後,VM 啟動程序應會完成,且序列主控台會顯示登入提示。

  7. 確認您可以使用 SSH 再次登入 VM。

選項 2 - 在序列主控台中使用單一使用者模式

如果未設定根密碼,可以使用這個選項。

必要條件:grub 設定檔中的 GRUB_TIMEOUT 參數必須設為非零值。這個檔案通常位於 /etc/default/grub,但在部分版本較舊的發行版上,該檔案可能位於非標準的目錄中。

  1. 前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面。 前往 VM 執行個體

  2. 從Google Cloud 控制台序列主控台 2登入虛擬機器的序列埠控制台。

  3. 在 Google Cloud 控制台中,按一下虛擬機器的「重設」

    重設檔案

  4. 在序列埠控制台視窗中,按一下箭頭鍵,在 GRUB 畫面或選單中暫停,中斷啟動程序。

  5. 在 grub 開機載入程式畫面中,從核心清單選擇核心,然後按下鍵盤上的 e

    系統啟動載入程式檔案

  6. 在核心行結尾新增 rd.break 參數,然後按下 ctrl+x。這有助於將 VM 開機進入單一使用者模式。

    系統啟動載入程式選單

  7. 以讀寫模式掛接根檔案系統。

  8. 分析、進行必要變更,然後儲存 fstab 檔案。如要進一步瞭解設定和語法,請使用 man fstab。使用您慣用的文字編輯器開啟 fstab 檔案。在下方範例中,我們使用 vi 編輯器。

    vi /etc/fstab

    Fstab 檔案 2

    在本例中,/distribution 裝置已從 VM 分離,因此請註解該行,或移除 /distribution 掛接點的 fstab 項目。

  9. 儲存檔案並結束編輯器。如果您使用 vi 編輯器,請按 ESC + :wq! 儲存並退出 fstab。

  10. 在提示中輸入 reboot,繼續啟動程序。

  11. 成功修正問題後,VM 開機程序應會完成,且序列埠控制台會顯示登入提示。

  12. 確認您可以使用 SSH 登入 VM。

選項 3 - 搶救 VM

如果未設定根密碼,或無法使用單一使用者模式,可以採用這個選項。

詳情請參閱「救援無法存取的 VM」。