按照本页面的说明,创建非启动磁盘并将其挂接到虚拟机 (VM)。
准备工作
如需使用 gdcloud 命令行界面 (CLI) 命令,请确保您已下载、安装、
并配置 gdcloud CLI。
GDC 经过网闸隔离的设备的所有命令都使用 gdcloud 或 kubectl CLI,并且需要操作系统 (OS) 环境。
获取 kubeconfig 文件路径
如需针对 Management API 服务器运行命令,请确保您拥有以下资源:
找到 Management API 服务器名称,或向平台管理员 (PA) 询问服务器名称。
使用该路径替换这些说明中的
MANAGEMENT_API_SERVER{"</var>"}}。
请求权限和访问权限
如需执行本页面列出的任务,您必须具有 Project VirtualMachine Admin 角色。请按照以下步骤操作,以
验证
您是否具有 Project VirtualMachine Admin (project-vm-admin) 角色,或者让您的 Project IAM 管理员在虚拟机所在的项目的命名空间
中为您
分配
该角色。
对于使用 GDC 控制台或 gdcloud CLI 执行的虚拟机操作,请让您的 Project IAM 管理员为您分配 Project VirtualMachine Admin 角色和 Project Viewer (project-viewer) 角色。
将磁盘挂接到虚拟机
创建非启动磁盘并将其挂接到虚拟机。每个附加磁盘都可以指定自定义映像或空白磁盘。您可以一次向虚拟机添加多个磁盘。
控制台
在导航菜单中,点击虚拟机 > 实例 。
在虚拟机列表中,点击虚拟机名称以查看其详细信息。
点击添加新磁盘 。
在确认对话框中,点击停止 以停止虚拟机。
等待几分钟,让虚拟机停止。
点击刷新 。
当虚拟机处于停止状态时,再次点击添加新磁盘 。
在“添加磁盘”对话框中,选择新磁盘或现有磁盘。
如需预配新磁盘,请点击新磁盘 标签页。
- 在磁盘名称 字段中,输入在项目中唯一的新磁盘名称。
- 在大小 字段中,输入介于 10 到 65536 GiB 之间的磁盘大小。例如,10 GiB 。
- 在删除规则 部分中,点击保留磁盘 或删除磁盘 。
如需选择现有磁盘,请点击现有磁盘 标签页。
- 在磁盘 列表中,选择一个磁盘。
- 在“删除规则”部分中,点击保留磁盘 或删除磁盘 。
点击保存 。该磁盘会显示在虚拟机的磁盘列表中。
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添加到现有VirtualMachinespec.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_SERVERManagement API 服务器 kubeconfig文件。PROJECT用于创建虚拟机的 Google Distributed Cloud 网闸隔离配置 (GDC) 项目。 VM_NAME新虚拟机的名称。 VM_BOOT_DISK_NAME新虚拟机 启动磁盘的名称。 NON_BOOT_BLANK_DISK附加磁盘的名称。 NON_BOOT_BLANK_DISK_SIZE附加磁盘的大小,例如 20G。
格式化并装载非启动磁盘
将磁盘挂接到虚拟机后,请执行以下必要步骤,使其可在虚拟机内访问。
连接到虚拟机
格式化磁盘
按序列号列出挂接到实例的磁盘,然后找到要格式化和装载的磁盘。
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替换为要装载磁盘的目录。将磁盘装载到实例,并启用 discard 选项:
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可选:配置虚拟机重启时的自动装载 - 使用 通用唯一标识符 (UUID) 或 启动脚本。
配置虚拟机重启时的自动装载 - 磁盘 UUID
将磁盘添加到 /etc/fstab 文件,以便在虚拟机重启时自动重新装载磁盘。在操作系统 (OS) 上,设备名称会在每次重启时发生变化,但设备 UUID 始终指向同一卷,即使您在系统之间移动磁盘也是如此。因此,请始终使用设备 UUID 来配置虚拟机重启时的自动装载。
创建当前
/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替换以下内容:
- 将
UUID_VALUE替换为磁盘UUID,该 UUID 列为 列出 UUID 命令的输出。 - 将
MOUNT_DIR替换为装载磁盘的目录。 - 将
MOUNT_OPTION替换为操作系统的MOUNT_OPTION值,该值 指定了操作系统在启动时无法装载磁盘 的情况下要执行的操作。
- 将
验证
/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
如果您分离了此磁盘或从此虚拟机的启动磁盘创建快照,请修改 /etc/fstab 文件并移除此磁盘所对应的条目。即使您将 MOUNT_OPTION 设置为 nofail 或 nobootwait,也要使 /etc/fstab 文件与挂接到虚拟机的设备保持同步。请先移除这些条目,然后再创建启动磁盘快照或分离磁盘。
配置虚拟机重启时的自动装载 - 虚拟机启动脚本
您还可以使用启动脚本在每次重启时装载磁盘,方法是将 “装载磁盘”中的命令添加到启动脚本。在添加用于装载磁盘的脚本之前,请使用“格式化磁盘”中的命令格式化磁盘。
创建启动脚本 Secret。
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 create secret -n PROJECT generic VM_NAME-mount-script --from-file=script=mount-disk-scriptrm mount-disk-script将启动脚本添加到虚拟机。
kubectl --kubeconfig MANAGEMENT_API_SERVER edit virtualmachines.virtualmachine.gdc.goog -n PROJECT VM_NAME修改
spec.startupScripts以包含 Secret 名称。apiVersion: virtualmachine.gdc.goog/v1 kind: VirtualMachine metadata: name: VM_NAME namespace: PROJECT spec: … startupScripts: - name: mount-script scriptSecretRef: name: VM_NAME-mount-script
如需详细了解如何配置启动脚本,请参阅此处 see。