搶救無法存取的 VM

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

必要的角色

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

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

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

所需權限

如要搶救 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. 點選「Edit」(編輯)

    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