救援無法存取的 VM


如果 Linux VM 因任何原因無法存取,請嘗試按照下列步驟救援 VM。

必要的角色

如要取得救援 VM 所需的權限,請要求管理員授予您專案的下列 IAM 角色:

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

這些預先定義的角色具備救援 VM 所需的權限。如要查看確切的必要權限,請展開「必要權限」部分:

所需權限

如要搶救 VM,必須具備下列權限:

  • compute.instances.create 專案
  • compute.disks.create 專案
  • compute.instances.get 專案
  • compute.disks.createSnapshot 磁碟
  • compute.instances.attachDisk 在新 VM 上
  • compute.disks.use 磁碟
  • compute.instances.start 在新的 VM 上,但無法存取
  • compute.instances.stop 在新的 VM 上,但無法存取

您或許還可透過自訂角色或其他預先定義的角色取得這些權限。

救援 VM

如果無法連線至 VM,或者開機磁碟已滿,您必須建立臨時 VM,才能搶救無法存取的 VM。

  1. (選用) 停止無法存取的 VM。
  2. 從無法存取的 VM 開機磁碟建立快照。如果根檔案系統分散在多個磁碟上,您必須為每個磁碟建立快照。
  3. 使用最接近無法存取 VM 作業系統的公開映像檔,建立臨時 VM。 在某些情況下,信任的映像檔政策可能會限制您無法從公開映像檔建立開機磁碟。在這種情況下,您必須請管理員暫時解除這項限制,才能建立救援 VM。詳情請參閱「設定映像檔存取限制」一文。
  4. 針對您先前建立的每個無法存取 VM 開機磁碟快照,從快照建立新磁碟,然後執行下列操作,將新磁碟連結至救援 VM:

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

      前往 VM 執行個體

    2. 按一下您建立的臨時 VM 名稱。

    3. 按一下「Edit」(編輯)

    4. 在「Additional disks」(其他磁碟) 下方,按一下 「Add new disk」(增加新磁碟),然後執行下列操作:

      1. 新增磁碟名稱,例如 my-recovery-disk
      2. 在「來源類型」部分,選取「快照」分頁標籤。
      3. 在「Source snapshot」(來源快照) 下拉式選單中,選取您在先前步驟中建立的來源 VM 快照。
      4. 按一下 [完成]
    5. 按一下 [儲存]

  5. 使用 SSH 連線至臨時 VM

  6. 執行下列指令,找出先前連結至 VM 的每個磁碟名稱:

    lsblk -d -o NAME,SERIAL

    輸出結果會與下列內容相似:

     NAME SERIAL
     sda  rescue-vm
     sdb  my-recovery-disk
     

    在本範例中,rescue-vm 是救援 VM 的開機磁碟,my-recovery-disk 則是無法存取 VM 的快照開機磁碟。記下無法存取 VM 的 NAME,以便在下一個步驟中使用。

  7. 針對先前連結至 VM 的每個磁碟,執行下列操作:

    1. 執行下列指令,找出每個分區的檔案系統:

      fdisk -l /dev/NAME -o Device,Size,Type
      

      NAME 替換為上一步中無法存取的 VM 開機磁碟名稱。在本範例中,名稱為 sdb

      輸出結果會與下列內容相似:

      Disk /dev/sdb: 10 GiB, 10737418240 bytes, 20971520 sectors
      Disk model: PersistentDisk
      Units: sectors of 1 * 512 = 512 bytes
      Sector size (logical/physical): 512 bytes / 4096 bytes
      I/O size (minimum/optimal): 4096 bytes / 4096 bytes
      Disklabel type: gpt
      Disk identifier: B31430F1-F041-4555-96B9-B2F43DC057AD
      
      Device     Size Type
      /dev/sdb1    2M BIOS boot
      /dev/sdb2   20M EFI System
      /dev/sdb3   10G Linux filesystem
      

      「檔案系統」Type欄會列出每個分割區的檔案系統。如果任何磁碟分割區缺少檔案系統類型,請執行下列指令:

      file -sL /dev/PARTITION_NAME
      

      NAME 替換為分割區名稱。

      輸出內容會因檔案系統類型而異:

      • 沒有檔案系統:如果輸出內容只顯示 data,表示磁碟分割區不含檔案系統。輸出內容範例:

        /dev/sdb1: data
        
      • EFI 檔案系統:如果輸出內容說明 DOS/MBR 開機磁區,表示該磁碟分割區具有 EFI 檔案系統。輸出內容範例:

        dev/sdb2: DOS/MBR boot sector, code offset 0x3c+2, OEM-ID "mkfs.fat", sectors/cluster 4, reserved sectors
        4, root entries 512, sectors 40960 (volumes <=32 MB), Media descriptor 0xf8, sectors/FAT 40, sectors/
        track 32, heads 64, serial number 0xf2af2664, label: "EFI        ", FAT (16 bit)
        
      • Linux 檔案系統:如果輸出內容說明檔案系統資料,則磁碟分割區為 Linux 檔案系統。輸出內容範例:

        /dev/sdb3: SGI XFS filesystem data (blksz 4096, inosz 512, v2 dirs)
        

      記下 Linux 檔案系統的分區名稱。

    2. /rescue 建立掛接點:

      sudo mkdir /rescue
    3. 將 Linux 檔案系統分割區掛接到 /rescue

      sudo mount PARTITION_NAME /rescue
      

      PARTITION_NAME 換成您先前記下的 Linux 檔案系統名稱。

    4. 如要使用 chroot 指令修改檔案系統的根目錄,您必須執行下列指令,額外掛接虛擬檔案系統和裝置:

      sudo mount -t proc /proc /rescue/proc
      sudo mount -t sysfs /sys /rescue/sys
      sudo mount -o bind /dev /rescue/dev
      sudo mount -o bind /dev/pts /rescue/dev/pts
      sudo mount -o bind /run /rescue/run
      

    無法存取的開機磁碟檔案系統現在已掛接至 /rescue。 您可以瀏覽檔案系統、變更設定檔、修正問題或擷取資料。

還原變更並重新啟動無法存取的 VM

修正問題或擷取資料後,您需要還原實際的 VM。請按照下列步驟還原原始 VM:

  1. 在臨時 VM 中,卸載掛接在 /rescue 的額外磁碟:

     cd ~
     sudo umount /rescue

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

    前往 VM 執行個體

    1. 選取您建立的暫時性 VM。

    2. 按一下「編輯」

    3. 在「Additional disks」(其他磁碟) 底下,按一下先前步驟中建立的磁碟的 ,從臨時 VM 卸離其他磁碟。

    4. 按一下 [儲存]

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

    前往 VM 執行個體

    1. 如果無法存取的 VM 仍在執行,請停止 VM

    2. 按一下剛停止的 VM 名稱,然後點選「編輯」

    3. 在「開機磁碟」下方,按一下「卸離開機磁碟」,從無法存取的 VM 卸離現有的開機磁碟。

    4. 接著,按一下「設定開機磁碟」,連結您先前在本頁「救援 VM」中建立及修正的磁碟。

      1. 在「開機磁碟」部分,按一下「現有磁碟」分頁標籤。
      2. 在下拉式清單中,選取您在上一個章節中建立的磁碟,例如 my-recovery-disk
      3. 按一下「選取」,然後點選「儲存」
    5. 啟動 VM

  4. 現在您應該可以使用 SSH 連線至 VM