救援無法存取的 VM


如果您因任何原因無法存取 Linux 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 OS 的公開映像檔建立暫時性 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. 在「Source type」(來源類型) 部分,選取「Snapshot」(快照) 分頁。
      3. 在「Source snapshot」(來源快照) 下拉式選單中,選取先前在這些步驟中建立的來源虛擬機的快照。
      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. 在「Boot disk」(開機磁碟) 下方,按一下 「Detach book disk」(卸離書籍磁碟),將現有的開機磁碟卸離無法存取的 VM。

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

      1. 在「Boot Disk」專區,按一下「Existing disks」分頁。
      2. 在下拉式選單中,選取您在前一個部分建立的磁碟,例如 my-recovery-disk
      3. 依序點選「選取」和「儲存」
    5. 啟動 VM

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