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

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

本文概述多種可能導致啟動問題的錯誤 fstab 設定,並提供疑難排解建議,協助您修正問題。

如要瞭解其他開機失敗原因,以及如何自動偵測原因,請參閱「排解 Linux Compute Engine 執行個體開機問題」。

以下列舉幾種常見的 fstab 設定錯誤問題:

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

事前準備

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

    選取這個頁面上範例的預計用途分頁:

    控制台

    使用 Google Cloud 控制台存取 Google Cloud 服務和 API 時,您不需要設定驗證機制。

    gcloud

    1. 安裝 Google Cloud CLI,然後 使用聯合身分登入 gcloud CLI。登入後,執行下列指令來初始化 Google Cloud CLI:

      gcloud init
  • 設定預設區域和可用區。
  • REST

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

      安裝 Google Cloud CLI,然後 使用聯合身分登入 gcloud CLI。

    詳情請參閱 Google Cloud 驗證說明文件中的「使用 REST 進行驗證」。

找出 fstab 問題

如果發生啟動問題,Google 強烈建議您在 Linux VM 的序列控制台中查看啟動記錄。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檔案系統有依附元件故障問題。檔案系統掛接點的依附元件失敗情形,會因使用的檔案系統名稱而異。

解析度

請使用下列選項,解決託管於 Google Cloud的 Linux VM 中的 fstab 錯誤。使用序列控制台解決問題的速度,比手動方法更快。

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

選項 1:使用序列控制台,以緊急模式登入 VM

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

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

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

    vi /etc/fstab

    Fstab 檔案

    在上述範例中,裝置的 /distribution 會從 VM 卸載。註解參照檔案系統的行,或移除 /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 instances」(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」。