将非启动磁盘挂接到虚拟机


本页面介绍如何将现有非启动磁盘挂接到一台或多台虚拟机 (VM) 实例。

如需创建或更改虚拟机的启动磁盘,请分别参阅创建启动磁盘分离和重新挂接启动磁盘

如需创建新磁盘,请参阅创建新的 Persistent Disk 卷创建新的 Hyperdisk 卷

所需的角色和权限

如需获得将磁盘附加到虚拟机所需的权限,请让管理员向您授予项目的以下 IAM 角色:

  • Compute Instance Admin (v1) (roles/compute.instanceAdmin.v1)
  • 若要连接到能够以服务账号的身份运行的虚拟机实例:Service Account User (v1)(roles/iam.serviceAccountUser 角色)

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

这些预定义角色包含将磁盘附加到虚拟机所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

如需将磁盘挂接到虚拟机,您需要以下权限:

  • 如需将磁盘挂接到虚拟机:
    • 针对虚拟机的 compute.instances.attachDisk 权限
    • 针对虚拟机的 compute.instances.attachDisk 权限
    • 针对您要挂接到虚拟机的磁盘的 compute.disks.use
  • 为了格式化和装载挂接的卷:针对虚拟机的 compute.instances.setMetadata

您也可以使用自定义角色或其他预定义角色来获取这些权限。

磁盘挂接模式

将磁盘挂接到虚拟机时,您可以通过指定磁盘挂接模式来指明虚拟机如何访问磁盘上的数据。您可以选择只读模式或读写模式。

默认模式为读写模式。

在虚拟机之间共享磁盘

您可以通过将磁盘挂接到每个虚拟机,在虚拟机之间共享同一磁盘,以便每个虚拟机都可以同时访问该磁盘。如果磁盘类型和虚拟机的机器类型支持,您可以将磁盘挂接到多个虚拟机。

如需将磁盘挂接到多个虚拟机,请针对每个虚拟机按照将非启动磁盘挂接到虚拟机中的步骤操作。

您必须对将磁盘挂接到的所有虚拟机使用相同的磁盘附加模式。例如,您无法以读写模式将磁盘挂接到一个虚拟机,同时以只读模式将其挂接到另一个虚拟机。

如需了解如何将磁盘挂接到多个虚拟机(包括支持的磁盘类型),请参阅在虚拟机之间共享磁盘

将 Hyperdisk 卷挂接到多个虚拟机

如需将 Hyperdisk 卷挂接到多个虚拟机,请确保将磁盘的访问模式设置为适合您的用例的值。如需了解如何设置访问模式,请参阅设置磁盘的访问模式

将 Hyperdisk 卷挂接到虚拟机时,您必须选择不会与磁盘访问模式冲突的磁盘附加模式。例如,您无法将只读附加模式与处于单写入器模式或多写入器模式的磁盘搭配使用。

限制

将磁盘挂接到虚拟机时,请注意以下限制:

  • 您最多可以向虚拟机附加 127 个辅助非启动可用区级磁盘。

  • 如果挂接磁盘会导致超出虚拟机的最大磁盘容量,则无法执行此操作。

  • 以下磁盘类型不支持只读模式:

    • 平衡 Hyperdisk
    • Hyperdisk Throughput
    • Hyperdisk Balanced 高可用性
    • Hyperdisk Extreme
  • 将磁盘挂接到多个虚拟机时,您必须对所有虚拟机使用相同的磁盘挂接模式。

  • 将磁盘挂接到多个虚拟机时,会受到额外的限制。请参阅在只读模式多写入者模式下在虚拟机之间共享磁盘的限制。

  • 挂接到多个虚拟机的磁盘不支持自动删除,也就是说,在删除虚拟机时,这些磁盘不会自动删除。

将非启动磁盘挂接到虚拟机

您可以使用 Google Cloud 控制台、Google Cloud CLI 或 REST 将非启动可用区级磁盘挂接到虚拟机。

将磁盘挂接到虚拟机时,请注意以下几点:

  • 使用自定义设备名称:Google 建议您在将磁盘挂接到虚拟机时指定自定义设备名称。您指定的名称将用于在客户机操作系统中为磁盘生成symlink,以便更轻松地识别和管理虚拟机上的磁盘。

  • 将磁盘挂接到多个虚拟机:如需将磁盘挂接到多个虚拟机,请针对每个虚拟机重复本部分中的步骤。您必须对将磁盘挂接到的所有虚拟机使用相同的磁盘附加模式。

控制台

  1. 转到虚拟机实例页面。

    转到“虚拟机实例”页面

  2. 点击要在其中添加磁盘的虚拟机的名称。

  3. 在详细信息页面上,点击修改

  4. 存储空间部分的额外磁盘下,点击+ 挂接现有磁盘

  5. 磁盘列表中,选择要挂接的磁盘。如果磁盘未列出,请确保它与虚拟机位于同一位置。这意味着,对于可用区磁盘,应使用相同的可用区;对于区域磁盘,应使用相同的区域。

  6. 对于磁盘附加模式,请选择只读,以仅允许虚拟机从磁盘读取数据。如需允许虚拟机读写访问,请选择读写

  7. 删除规则下,指定是否在删除虚拟机时删除磁盘。如需在删除虚拟机时保留磁盘,请选择保留磁盘。如需在删除虚拟机时删除磁盘,请选择删除磁盘。如果您要将磁盘挂接到多个虚拟机,则必须选择保留磁盘

  8. 可选:在设备名称标题下,选择使用自定义设备名称选项。您输入的名称用于为磁盘生成符号链接,以方便识别磁盘。

  9. 如需将更改应用于磁盘,请点击完成

  10. 点击保存以应用更改并将磁盘挂接到虚拟机。

gcloud

如需将磁盘挂接到虚拟机,请使用 gcloud compute instances attach-disk 命令。使用 mode 标志指定磁盘附加模式。

gcloud compute instances attach-disk VM_NAME \
    --disk DISK_NAME --device-name=DEVICE_NAME
    --mode DISK_ATTACHMENT_MODE

替换以下内容:

  • VM_NAME:要添加新可用区级永久性磁盘的虚拟机的名称
  • DISK_NAME:要挂接到虚拟机的新磁盘的名称
  • DEVICE_NAME(可选):客户机操作系统用于识别磁盘的名称。
  • DISK_ATTACHMENT_MODE(可选):如何将磁盘挂接到虚拟机。对于只读模式,请将其设置为 ro。对于读写模式,请设置为 rw,或省略此标志,因为 rw 是默认值。

Terraform

如需将磁盘挂接到虚拟机,请使用 google_compute_instance 资源

resource "google_compute_instance" "test_node" {
  name         = "test-node"
  machine_type = "f1-micro"
  zone         = "us-west1-a"

  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-11"
    }
  }
  attached_disk {
    source      = google_compute_disk.default.id
    device_name = google_compute_disk.default.name
  }

  network_interface {
    network = "default"
    access_config {
      # Ephemeral IP
    }
  }

  # Ignore changes for persistent disk attachments
  lifecycle {
    ignore_changes = [attached_disk]
  }


}

如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令

REST

如需将磁盘挂接到虚拟机,请构建一个向 compute.instances.attachDisk 方法发出的 POST 请求,并将要挂接的磁盘的网址添加到该请求中。

如需指定磁盘附加模式,请使用 mode 参数。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/attachDisk

{
   "source": "/compute/v1/projects/PROJECT_ID/zones/ZONE/disks/DISK_NAME",
   "deviceName": DEVICE_NAME,
   "mode" : "DISK_ATTACHMENT_MODE"
}

替换以下内容:

  • PROJECT_ID:您的项目 ID
  • ZONE:虚拟机和磁盘所在的可用区。
  • VM_NAME:要将磁盘挂接到的虚拟机的名称
  • DISK_NAME:要挂接的磁盘的名称
  • DEVICE_NAME(可选):客户机操作系统用于创建符号链接的名称,有助于识别磁盘。
  • DISK_ATTACHMENT_MODE(可选):磁盘应如何附加到虚拟机。对于只读模式,请使用 READ_ONLY。对于读写模式,请设置为 READ_WRITE,或省略,因为 READ_WRITE 是默认值。

将磁盘挂接到虚拟机后,连接到虚拟机并启用虚拟机的操作系统 (OS) 以使用该磁盘:

  • 如果您挂接了空白磁盘,请格式化并装载该磁盘
  • 如果您连接的磁盘不为空,请装载该磁盘

了解如何在 LinuxWindows 虚拟机上格式化并装载新磁盘。

后续步骤