按照本頁的說明,建立非開機磁碟並連結至虛擬機器 (VM)。
事前準備
如要使用 gdcloud
指令列介面 (CLI) 指令,請務必下載、安裝及設定 gdcloud
CLI。GDC 氣隙裝置的所有指令都使用 gdcloud
或 kubectl
CLI,且需要作業系統 (OS) 環境。
取得 kubeconfig 檔案路徑
如要對 Management API 伺服器執行指令,請確認您具備下列資源:
找出 Management API 伺服器名稱,或詢問平台管理員 (PA) 伺服器名稱。
登入並產生 Management API 伺服器的 kubeconfig 檔案 (如果沒有)。
請使用路徑取代這些操作說明中的
MANAGEMENT_API_SERVER{"</var>"}}
。
要求權限和存取權
如要執行本頁列出的工作,您必須具備專案虛擬機器管理員角色。請按照步驟驗證,或請專案 IAM 管理員在 VM 所在的專案命名空間中指派專案 VirtualMachine 管理員 (project-vm-admin
) 角色給您。
如要使用 GDC 控制台或 gdcloud CLI 執行 VM 作業,請要求專案 IAM 管理員同時指派專案 VirtualMachine 管理員角色和專案檢視者 (project-viewer
) 角色。
將磁碟連接至 VM
建立非開機磁碟並附加至 VM。每個額外磁碟都可以指定自訂映像檔或空白磁碟。您可以一次將多個磁碟新增至 VM。
主控台
在導覽選單中,依序點選「Virtual Machines」>「Instances」。
在 VM 清單中,按一下 VM 名稱即可查看詳細資料。
點選「新增磁碟」。
在確認對話方塊中,按一下「停止」停止 VM。
請稍待幾分鐘,讓 VM 停止運作。
按一下 [更新]。
VM 處於停止狀態時,再次點選「新增磁碟」。
在「新增磁碟」對話方塊中,選擇新磁碟或現有磁碟。
如要佈建新磁碟,請按一下「New disk」(新磁碟) 分頁。
- 在「磁碟名稱」欄位中,輸入專案專屬的新磁碟名稱。
- 在「Size」(大小) 欄位中,輸入介於 10 至 65536 GiB 之間的磁碟大小。例如 10 GiB。
- 在「刪除規則」部分,按一下「保留磁碟」或「刪除磁碟」。
如要選擇現有磁碟,請按一下「現有磁碟」分頁標籤。
- 在「Disk」清單中選取磁碟。
- 在「刪除規則」部分,按一下「保留磁碟」或「刪除磁碟」。
按一下 [儲存]。磁碟會顯示在 VM 的磁碟清單中。
API
建立
VirtualMachineDisk
:kubectl --kubeconfig MANAGEMENT_API_SERVER apply -n PROJECT -f - <<EOF apiVersion: virtualmachine.gdc.goog/v1 kind: VirtualMachineDisk metadata: name: NON_BOOT_BLANK_DISK spec: size: NON_BOOT_BLANK_DISK_SIZE EOF
將
VirtualMachineDisk
新增至現有VirtualMachine
spec.disks
:kubectl --kubeconfig MANAGEMENT_API_SERVER edit virtualmachines.virtualmachine.gdc.goog -n PROJECT VM_NAME
在文字編輯器中編輯下列項目:
… disks: - virtualMachineDiskRef: name: VM_BOOT_DISK_NAME boot: true - virtualMachineDiskRef: name: NON_BOOT_BLANK_DISK autoDelete: false …
使用下列定義替換變數。
變數 定義 MANAGEMENT_API_SERVER
管理 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
項目是否正確:cat /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
如果您卸離此磁碟,或從這個 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 EOF
kubectl create secret -n PROJECT generic VM_NAME-mount-script --from-file=script=mount-disk-script
rm mount-disk-script
將開機指令碼新增至 VM。
kubectl --kubeconfig MANAGEMENT_API_SERVER edit virtualmachines.virtualmachine.gdc.goog -n PROJECT 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
如要進一步瞭解如何設定啟動指令碼,請參閱這篇文章。