本文提供相關操作說明,協助您將永久虛擬機器 (VM) 磁碟掛接到 Google Distributed Cloud (GDC) 氣隙環境中的執行個體。
將非開機磁碟附加至 VM,以符合特定工作負載需求。將儲存空間與 VM 執行個體分離,可確保重要資料不受 VM 生命週期影響,同時自動調整效能和容量,以符合工作負載需求。
本文適用於平台管理員或應用程式作業人員群組的開發人員,這類人員會在 Distributed Cloud 環境中新增及設定 VM 磁碟。詳情請參閱 GDC 氣隙環境適用的目標對象說明文件。
事前準備
如要使用 gdcloud 指令列介面 (CLI) 指令,請務必下載、安裝及設定 gdcloud CLI。Distributed Cloud 的所有指令都使用 gdcloud 或 kubectl CLI,且需要作業系統 (OS) 環境。
取得 kubeconfig 檔案路徑
如要對 Management API 伺服器執行指令,請確認您具備下列資源:
登入並產生 Management API 伺服器的 kubeconfig 檔案 (如果沒有)。
使用 Management API 伺服器的 kubeconfig 檔案路徑,取代這些操作說明中的
MANAGEMENT_API_SERVER。
要求 IAM 角色
請與專案 IAM 管理員聯絡,要求對方授予您專案的下列角色:
專案 VirtualMachine 管理員 (
project-vm-admin):在專案命名空間中建立、修改、列出及刪除 VM。專案檢視者(
project-viewer):查看專案命名空間中的所有資源。
所有 VM 角色都必須繫結至 VM 所在的專案命名空間。 按照步驟驗證存取權。
將磁碟連接至 VM
建立非開機磁碟並附加至 VM。每個額外磁碟都可以指定自訂映像檔或空白磁碟。您可以一次將多個磁碟新增至 VM。
控制台
在導覽選單中,依序點選「Virtual Machines」>「Instances」(虛擬機器 > 執行個體)。
在 VM 清單中,按一下 VM 名稱即可查看詳細資料。
點選「新增磁碟」。
在確認對話方塊中,按一下「停止」停止 VM。
請稍候幾分鐘,等待 VM 停止。
點按「更新」。
VM 處於停止狀態時,再次點選「新增磁碟」。
在「新增磁碟」對話方塊中,選擇新磁碟或現有磁碟。
如要佈建新磁碟,請按一下「New disk」(新磁碟) 分頁。
- 在「Disk name」(磁碟名稱) 欄位中,輸入專案專屬的新磁碟名稱。
- 在「大小」欄位中,輸入介於 10 至 65536 GiB 之間的磁碟大小。例如 10 GiB。
- 在「刪除規則」部分,按一下「保留磁碟」或「刪除磁碟」。
如要選擇現有磁碟,請按一下「現有磁碟」分頁標籤。
- 在「Disk」清單中,選取磁碟。
- 在「刪除規則」部分,按一下「保留磁碟」或「刪除磁碟」。
按一下 [儲存]。磁碟會顯示在 VM 的磁碟清單中。
API
建立
VirtualMachineDisk:kubectl --kubeconfig MANAGEMENT_API_SERVER \ -n PROJECT \ apply -f - <<EOF apiVersion: virtualmachine.gdc.goog/v1 kind: VirtualMachineDisk metadata: name: NON_BOOT_BLANK_DISK spec: size: NON_BOOT_BLANK_DISK_SIZE EOF將
VirtualMachineDisk新增至現有的VirtualMachinespec.disks:kubectl --kubeconfig MANAGEMENT_API_SERVER \ -n PROJECT \ edit virtualmachines.virtualmachine.gdc.goog VM_NAME在文字編輯器中編輯下列項目:
# … disks: - virtualMachineDiskRef: name: VM_BOOT_DISK_NAME boot: true - virtualMachineDiskRef: name: NON_BOOT_BLANK_DISK autoDelete: false # …請使用下列定義替換變數。
變數 定義 MANAGEMENT_API_SERVERManagement API 伺服器 kubeconfig 檔案。 PROJECT要在其中建立 VM 的 Google Distributed Cloud 實體隔離方案 (GDC) 專案。 VM_NAME新 VM 的名稱。 VM_BOOT_DISK_NAME新 VM 開機磁碟的名稱。 NON_BOOT_BLANK_DISK額外磁碟的名稱。 NON_BOOT_BLANK_DISK_SIZE額外磁碟的大小,例如 20G。
格式化及掛接非開機磁碟
將磁碟連接至 VM 後,請執行下列必要步驟,確保 VM 可以存取磁碟。
連線至 VM
格式化磁碟
依序號列出連接至執行個體的磁碟,並找出要格式化和掛接的磁碟。
ls -l /dev/disk/by-id/這個輸出範例會以序號顯示磁碟名稱:
total 0 lrwxrwxrwx 1 root root 9 Sep 13 23:51 ata-QEMU_HARDDISK_agentSADisk -> ../../sdc lrwxrwxrwx 1 root root 9 Sep 13 23:51 scsi-0ATA_QEMU_HARDDISK_agentSADisk -> ../../sdc lrwxrwxrwx 1 root root 9 Sep 13 23:51 scsi-0QEMU_QEMU_HARDDISK_vm-disk-boot -> ../../sda lrwxrwxrwx 1 root root 10 Sep 13 23:51 scsi-0QEMU_QEMU_HARDDISK_vm-disk-boot-part1 -> ../../sda1 lrwxrwxrwx 1 root root 11 Sep 13 23:51 scsi-0QEMU_QEMU_HARDDISK_vm-disk-boot-part14 -> ../../sda14 lrwxrwxrwx 1 root root 11 Sep 13 23:51 scsi-0QEMU_QEMU_HARDDISK_vm-disk-boot-part15 -> ../../sda15 lrwxrwxrwx 1 root root 9 Sep 13 23:51 scsi-0QEMU_QEMU_HARDDISK_vm-disk-data -> ../../sdb lrwxrwxrwx 1 root root 9 Sep 13 23:51 scsi-1ATA_QEMU_HARDDISK_agentSADisk -> ../../sdc lrwxrwxrwx 1 root root 9 Sep 13 23:51 scsi-SATA_QEMU_HARDDISK_agentSADisk -> ../../sdc lrwxrwxrwx 1 root root 9 Sep 13 23:51 scsi-SQEMU_QEMU_HARDDISK_vm-disk-boot -> ../../sda lrwxrwxrwx 1 root root 10 Sep 13 23:51 scsi-SQEMU_QEMU_HARDDISK_vm-disk-boot-part1 -> ../../sda1 lrwxrwxrwx 1 root root 11 Sep 13 23:51 scsi-SQEMU_QEMU_HARDDISK_vm-disk-boot-part14 -> ../../sda14 lrwxrwxrwx 1 root root 11 Sep 13 23:51 scsi-SQEMU_QEMU_HARDDISK_vm-disk-boot-part15 -> ../../sda15 lrwxrwxrwx 1 root root 9 Sep 13 23:51 scsi-SQEMU_QEMU_HARDDISK_vm-disk-data -> ../../sdb箭頭後方的資訊 (
->) 表示磁碟裝置名稱。舉例來說,在scsi-SQEMU_QEMU_HARDDISK_vm-disk-data -> ../../sdb中,序號為scsi-SQEMU_QEMU_HARDDISK_vm-disk-data,裝置名稱為sdb。從這份清單找出磁碟序號。
可能影響序號清單的重要情境功能行為:
- 如果
virtualMachineDiskRef.name值超過 20 個字元,系統只會使用前 20 個字元做為序號。 - 如果兩張光碟的前 20 個字元相同,只有第一張光碟有序號。
- 如果
格式化磁碟:
sudo mkfs.ext4 -m 0 -E lazy_itable_init=0,lazy_journal_init=0,discard /dev/disk/by-id/DISK_ID
- 將
DISK_ID替換為要格式化的磁碟序號。 - 本範例指定
scsi-SQEMU_QEMU_HARDDISK_vm-disk-data,以格式化沒有磁區分割表的整個磁碟。
為獲得最高的磁碟效能,請在 -E 旗標中,使用建議的格式化選項。由於不需要在次要磁碟上保留根磁碟區空間,請指定 -m 0 以使用全部的可用磁碟空間。
掛接磁碟
建立做為新磁碟掛接點的目錄。您可以使用任何目錄。以下範例會在
/mnt/disks/中建立目錄:sudo mkdir -p /mnt/disks/MOUNT_DIR將
MOUNT_DIR替換為要掛接磁碟的目錄。將磁碟掛接至執行個體,並啟用捨棄選項:
sudo mount -o discard,defaults /dev/disk/by-id/DISK_ID /mnt/disks/MOUNT_DIR更改下列內容:
DISK_ID,並提供要掛接的磁碟序號。MOUNT_DIR替換為要掛接磁碟的目錄。
選用:設定磁碟的讀取與寫入權限。下列指令會授予所有使用者磁碟的寫入 (
a+w) 存取權。sudo chmod a+w /mnt/disks/MOUNT_DIR選用:設定在 VM 重新啟動時自動掛接 - 使用通用唯一識別碼 (UUID) 或開機指令碼。
設定在 VM 重新啟動時自動掛接 - 磁碟 UUID
將磁碟新增至 /etc/fstab 檔案,這樣 VM 重新啟動時,磁碟就會自動再次掛接。在作業系統 (OS) 上,裝置名稱會在每次重新啟動時變更,但裝置 UUID 一律會指向相同磁碟區,即使您在系統之間移動磁碟也是如此。因此,請務必使用裝置 UUID,在 VM 重新啟動時設定自動掛接。
建立目前
/etc/fstab檔案的備份:sudo cp /etc/fstab /etc/fstab.backup-
sudo blkid /dev/DEVICE_NAME範例輸出內容會顯示磁碟的 UUID
accc19c5-d0d6-4157-9672-37d4e1d48eb5/dev/sdb: UUID="accc19c5-d0d6-4157-9672-37d4e1d48eb5" TYPE="ext4"DEVICE_NAME是您要自動掛接的磁碟裝置名稱。如果您在磁碟上建立了磁區分割表,請在裝置名稱後方加上後置字元,指定要掛接的分區。舉例來說,如果sdb是磁碟裝置名稱,且您要掛接分區 1,則DEVICE_NAME會變成sdb1。 以文字編輯器開啟
/etc/fstab檔案,並建立包含 UUID 的項目:UUID=UUID_VALUE /mnt/disks/MOUNT_DIR ext4 discard,defaults,MOUNT_OPTION 0 2更改下列內容:
確認
/etc/fstab項目正確無誤:下列指令會根據連結至 VM 的現有磁碟和分割區,驗證
/etc/fstab項目:findmnt --verify以下範例顯示驗證成功。您可以放心忽略預期會出現的警告:
[W] your fstab has been modified, but systemd still uses the old version; use 'systemctl daemon-reload' to reload 0 parse errors, 0 errors, 1 warning如有錯誤,請檢查
fstab項目是否有效。常見問題是項目中新增了無效的非列印字元。您可以執行下列指令,顯示/etc/fstab檔案中的所有特殊字元:cat --show-nonprinting /etc/fstab以下是有效輸出內容的範例:
LABEL=cloudimg-rootfs / ext4 defaults 0 1 LABEL=UEFI /boot/efi vfat umask=0077 0 1 UUID=UUID_VALUE /mnt/disks/MOUNT_DIR ext4 discard,defaults,MOUNT_OPTION 0 2確認沒有不該出現的字元,例如以
M-或^開頭的非列印字元。
如果您卸離此磁碟,或從這個 VM 的開機磁碟建立快照,請編輯 /etc/fstab 檔案,並移除此磁碟的項目。即使您已將 MOUNT_OPTION 設為 nofail 或 nobootwait,也請將 /etc/fstab 檔案與連結至 VM 的裝置保持同步處理。請在建立開機磁碟快照或卸載磁碟前,移除這些項目。
設定在 VM 重新啟動時自動掛接 - VM 開機指令碼
您也可以將「掛接磁碟」中的指令新增至開機指令碼,在每次重新啟動時掛接磁碟。在新增掛接磁碟的指令碼之前,請先使用「格式化磁碟」中的指令格式化磁碟。
建立開機指令碼密鑰。
cat <<EOF >>mount-disk-script #!/bin/bash mkdir -p /mnt/disks/MOUNT_DIR mount -o discard,defaults /dev/disk/by-id/DISK_ID /mnt/disks/MOUNT_DIR EOFkubectl --kubeconfig MANAGEMENT_API_SERVER \ -n PROJECT \ create secret generic VM_NAME-mount-script \ --from-file=script=mount-disk-scriptrm mount-disk-script將開機指令碼新增至 VM。
kubectl --kubeconfig MANAGEMENT_API_SERVER \ -n PROJECT \ edit virtualmachines.virtualmachine.gdc.goog VM_NAME編輯
spec.startupScripts以加入密鑰名稱。apiVersion: virtualmachine.gdc.goog/v1 kind: VirtualMachine metadata: name: VM_NAME namespace: PROJECT spec: # … startupScripts: - name: mount-script scriptSecretRef: name: VM_NAME-mount-script
如要進一步瞭解如何設定啟動指令碼,請參閱這篇文章。