修改 Google Cloud Hyperdisk 卷的设置


您可以修改 Google Cloud Hyperdisk 卷的属性,以满足工作负载的需求。例如,您可以分别减少或增加预配 IOPS 或吞吐量以降低费用或提高性能。您可以通过设置 Hyperdisk ML 卷的访问模式来指定虚拟机访问卷中数据的方式。

本页面介绍如何修改 Hyperdisk 卷的容量、性能和其他设置。

准备工作

  • 设置身份验证(如果尚未设置)。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以按如下方式向 Compute Engine 进行身份验证。

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. REST

      如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证

所需的角色和权限

如需获得修改 Hyperdisk 所需的权限,请让管理员向您授予项目的以下 IAM 角色:

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

此预定义角色可提供修改 Hyperdisk 所需的 compute.disks.update 权限。

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

修改 Hyperdisk 概览

您可以更改 Hyperdisk 卷的访问模式、大小和性能特征。

Hyperdisk 卷支持的大小和性能更改

下表汇总了每种 Hyperdisk 类型支持的容量和性能更改。

Hyperdisk 类型 可自定义吞吐量 可自定义 IOPS 可在虚拟机之间共享
平衡 Hyperdisk
Hyperdisk Balanced 高可用性
(预览版)
Hyperdisk Extreme
Hyperdisk ML 是,处于
只读模式
Hyperdisk Throughput

创建或修改 Hyperdisk 卷时使用的值必须在每个磁盘的 Hyperdisk 限制中所述的最大值和最小值范围内。

如果您要修改挂接到虚拟机的 Hyperdisk 卷的大小,则新值不能超过每个虚拟机的 Hyperdisk 限制

Hyperdisk 卷的预配 IOPS 和吞吐量必须遵循关于 Hyperdisk 的 IOPS 和吞吐量预配中所述的规则。

容量变化

您调整 Hyperdisk 卷的大小的方式,只能是增大它的大小。您无法减少 Hyperdisk 卷的容量。如果您要减小 Hyperdisk 卷的大小,则必须创建较小的卷,将数据从原始卷迁移到较小的卷,然后删除原始卷。

即使 Hyperdisk 卷挂接到正在运行的虚拟机,您也可以调整其大小。 但是,如果 Hyperdisk 卷处于多写入者模式,您必须先将该卷从所有虚拟机中分离,然后才能调整其大小。

您可以每 6 小时调整一次 Hyperdisk Throughput 卷的大小。对于所有其他 Hyperdisk 类型,您可以每 4 小时更改一次预配容量。

为获得最佳结果,请在更改 Hyperdisk 卷的容量时完成以下步骤:

  1. 增大卷的大小
  2. 备份磁盘
  3. 调整磁盘分区的大小

效果变化

即使卷已挂接到正在运行的虚拟机,您也可以更改其预配性能。

更改预配的 IOPS 或吞吐量后,更改最多可能需要 15 分钟才能生效。但存在以下例外情况:

  • 对于 Hyperdisk ML 卷,更改可能需要长达 20 分钟才能生效。
  • 对于多写入者模式下的磁盘,如果您在进行更改时磁盘已挂接到多个虚拟机,则性能更改可能需要长达 6 小时才能生效。

对于除 Hyperdisk ML 之外的所有 Hyperdisk 类型,您可以每 4 小时更改一次预配 IOPS 或吞吐量。您可以每 6 小时更改一次 Hyperdisk ML 卷的预配吞吐量。

更改 Hyperdisk 卷的预配 IOPS 或吞吐量不会删除或修改磁盘数据。

如果您尝试在指定限制内多次修改 Hyperdisk 卷,则会收到类似于这样的错误消息:Cannot update provisioned throughput due to being rate limited.

访问模式更改

如需将单个 Hyperdisk 卷挂接到多个虚拟机,您必须将该卷的访问模式设置为只读模式或多写入者模式,具体取决于您的应用场景。

为磁盘停用多读取或多写入权限

如需对 Hyperdisk 卷执行某些操作,该卷必须处于单写入者模式。例如,您无法通过多写入者模式下的 Hyperdisk 卷创建映像或快照。您必须将该卷的访问模式设置为单写入者。

如需停用多读取或多写入权限,您必须将该卷从所有虚拟机中分离,然后按照设置访问模式中的说明操作。

限制

  • 如需设置磁盘的访问模式,必须将相应磁盘与所有虚拟机分离。
  • 对于 Hyperdisk ML 卷,如果您将访问模式设置为只读,则无法将其重新设置为读写。
  • 您无法为 Hyperdisk Throughput 卷和 Hyperdisk Extreme 卷设置访问模式。

最佳做法

由于您必须在磁盘属性更改之间等待至少 4 小时,因此请遵循以下最佳实践:

  • 通过同时更改多个属性,避免在修改磁盘时出现延迟。例如,如果您计划在短时间内同时更改磁盘大小和预配 IOPS,请在单个请求中进行这两项更改。

  • 如果为磁盘的预配性能或大小选择新值,请注意,您在 4 到 6 小时内无法进行任何进一步更改。例如,假设您想将 500 GiB 的 Hyperdisk Balanced 卷的大小增加到 1 TiB。确保工作负载在接下来的 4 小时内不会需要超过 1 TiB 的磁盘空间,因为在 4 小时过去之前,您无法再次增加大小。

设置 Hyperdisk 卷的访问模式

如需设置磁盘的访问模式,必须将相应磁盘与所有虚拟机分离。

您可以对 Hyperdisk 卷的访问模式进行以下更改:

  • 对于 Hyperdisk Balanced 卷或 Hyperdisk Balanced 高可用性(预览版)卷,您可以启用或停用多写入者模式。
  • 对于 Hyperdisk ML 卷,您可以启用只读模式。

将 Hyperdisk ML 卷的访问模式设置为只读后,您无法进行修改。

您可以使用 Google Cloud 控制台、Google Cloud CLI 或 REST 设置访问模式。

控制台

  1. 在 Google Cloud 控制台中,转到磁盘页面。

    转到“磁盘”

  2. 在项目的磁盘列表中,点击您要修改的 Hyperdisk 卷的名称。

  3. 在磁盘详情页面上,点击 修改

  4. 访问模式字段中,选择您所需的访问模式:

    • 如需启用只读模式,请选择从多个虚拟机进行只读
    • 如需启用多写入者模式,请选择从多个虚拟机进行读写
    • (默认值)如需启用单写入者模式,请选择从单个虚拟机进行读写
  5. 如需应用更改,请点击保存

gcloud

运行 disks update 命令并使用 --access-mode 标志指定访问模式。

gcloud compute disks update DISK_NAME  \
   --access-mode=DISK_ACCESS_MODE

替换以下内容:

  • DISK_NAME:您要修改的 Hyperdisk 卷的名称。
  • DISK_ACCESS_MODE:虚拟机如何访问磁盘上的数据。支持的值为:
    • READ_ONLY_MANY,用于从多个虚拟机进行只读访问。
    • READ_WRITE_MANY,表示从多个虚拟机进行读写访问。
    • (默认值)READ_WRITE_SINGLE,表示从一个虚拟机进行读写访问。

REST

构建对 compute.disks.update 方法的 PATCH 请求。在请求正文中,使用 "accessMode" 参数设置访问模式。

PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks/DISK_NAME/update
{
   "accessMode": "DISK_ACCESS_MODE"
}

替换以下内容:

  • PROJECT_ID:您的项目 ID。
  • ZONE:您的 Hyperdisk 卷所在的可用区。
  • DISK_NAME:要修改的 Hyperdisk 卷的名称。
  • DISK_ACCESS_MODE:虚拟机如何访问磁盘上的数据。支持的值为:
    • READ_ONLY_MANY,用于从多个虚拟机进行只读访问。
    • READ_WRITE_MANY,表示从多个虚拟机进行读写访问。
    • READ_WRITE_SINGLE,表示从一个虚拟机进行读写访问。

更改 Hyperdisk 卷的大小或预配性能

您可以使用以下时间限制增加卷大小并更改 Hyperdisk 卷的预配 IOPS 或吞吐量:

  • 增加磁盘大小:

    • 对于 Hyperdisk Throughput:每 6 小时一次
    • 对于所有其他 Hyperdisk 类型:每 4 小时一次
  • 修改预配 IOPS 或吞吐量:

    • 对于 Hyperdisk ML:每 6 小时一次
    • 对于所有其他 Hyperdisk 类型:每 4 小时一次

您可以使用 Google Cloud 控制台、gcloud CLI 或 REST 更改 Hyperdisk 卷的预配大小和性能。

控制台

  1. 在 Google Cloud 控制台中,转到磁盘页面。

    转到“磁盘”

  2. 在项目的磁盘列表中,点击要更改其容量或预配性能的 Hyperdisk 卷的名称。

  3. 在“磁盘详情”页面上,点击修改

    1. 大小字段中,为磁盘输入新的大小。磁盘大小必须在支持的值范围内。
    2. 对于 Hyperdisk Extreme、平衡 Hyperdisk 和 Hyperdisk Balanced 高可用性:在预配的 IOPS 字段中,输入卷的新 IOPS 值。
    3. 对于 Hyperdisk Throughput、Hyperdisk ML、平衡 Hyperdisk 和 Hyperdisk Balanced 高可用性:在预配的吞吐量字段中,输入卷的新吞吐量值。
  4. 点击保存以将更改应用于磁盘。

gcloud

使用 disks update 命令并指定 --size--provisioned-iops--provisioned-throughput 标志。

如需更改 Hyperdisk Balanced 高可用性卷的大小,请添加 --region 标志。

gcloud compute disks update DISK_NAME  \
    --size=DISK_SIZE  \
    [--region=REGION]  \
    --provisioned-iops=IOPS_LIMIT  \
    --provisioned-throughput=THROUGHPUT_LIMIT

替换以下内容:

  • DISK_NAME:您要修改的 Hyperdisk 卷的名称。
  • DISK_SIZE(可选):磁盘的新大小。该值必须是一个整数,后跟 GB 表示吉比字节,或 TB 表示太比字节。磁盘大小必须在支持的值范围内。
  • REGION:可选。Hyperdisk Balanced 高可用性磁盘所在的区域
  • IOPS_LIMIT(可选):Hyperdisk Extreme、平衡 Hyperdisk 和 Hyperdisk Balanced 高可用性卷的 IOPS 配置。该值必须在支持的值范围内。
  • THROUGHPUT_LIMIT(可选):Hyperdisk Throughput、Hyperdisk ML、平衡 Hyperdisk 或 Hyperdisk Balanced 高可用性卷的吞吐量配置,以整数形式指定,表示吞吐量(以 MiB/秒为单位)。该值必须在支持的值范围内。

REST

构建对 compute.disks.update 方法的 PATCH 请求。在请求正文中,指定 sizeGbprovisionedIopsprovisionedThroughput 参数。

PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks/DISK_NAME
{
   "sizeGb": "DISK_SIZE,
   "provisionedIops": "IOPS_LIMIT",
   "provisionedThroughput": "THROUGHPUT_LIMIT"
}

如需修改 Hyperdisk Balanced 高可用性卷,请构建一个向 compute.regionDisks.update 方法发出的 PATCH 请求。

PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/disks/DISK_NAME
{
   "sizeGb": "DISK_SIZE,
   "provisionedIops": "IOPS_LIMIT",
   "provisionedThroughput": "THROUGHPUT_LIMIT"
}

替换以下内容:

  • PROJECT_ID:您的项目 ID。
  • ZONE:您的 Hyperdisk 卷所在的可用区。
  • REGION:对于 Hyperdisk Balanced 高可用性磁盘,这是磁盘所在的区域。
  • DISK_NAME:要修改的 Hyperdisk 卷的名称。
  • DISK_SIZE(可选):磁盘的新大小。该值必须是一个整数,后跟 GB 表示吉比字节,或 TB 表示太比字节。磁盘大小必须在支持的值范围内。
  • IOPS_LIMIT(可选):Hyperdisk Extreme、平衡 Hyperdisk 或 Hyperdisk Balanced 高可用性卷的 IOPS 配置。该值必须在支持的值范围内。
  • THROUGHPUT_LIMIT(可选):平衡 Hyperdisk、Hyperdisk ML、平衡 Hyperdisk 或 Hyperdisk Balanced 高可用性卷的吞吐量配置,以整数表示,表示吞吐量(以 MiB/秒为单位)。该值必须在支持的值范围内。

如果您尝试在指定限制内多次修改 Hyperdisk 卷的大小或性能,则会收到类似于 Cannot update provisioned throughput due to being rate limitedDisk cannot be resized due to being rate limited 的错误消息。

备份 Hyperdisk 卷

调整磁盘大小不会删除或修改磁盘数据,但最佳做法是,始终通过创建快照备份磁盘,然后再对文件系统或分区进行任何更改。

调整文件系统和分区的大小

增大 Hyperdisk 卷的大小后,您可能需要调整其文件系统和分区的大小:

  • 启动磁盘:如果您使用的是自定义 Linux 映像自定义 Windows 映像,则必须手动调整根的大小分区和文件系统。对于具有公共映像的虚拟机,Compute Engine 会在您增加启动磁盘的大小并重启虚拟机后自动调整根分区和文件系统的大小。

  • 非启动磁盘:增加磁盘大小后,您必须扩展磁盘上的文件系统以使用增加的空间。

以下示例展示了如何手动调整启动磁盘的根分区和文件系统的大小,以及如何手动调整无分区表的非启动数据磁盘的文件系统的大小。此示例假定挂接的磁盘之前已格式化并装载。

Linux 虚拟机

  1. 在 Google Cloud 控制台中,转到虚拟机实例页面。

    转到虚拟机实例

  2. 点击挂接了新磁盘的实例旁的 SSH 按钮。浏览器会建立连到该实例的终端连接。

  3. 使用 dflsblk 命令列出文件系统的大小并查找磁盘的设备名称。

    $ sudo df -Th
    
    Filesystem      Type      Size  Used Avail Use% Mounted on
    udev            devtmpfs  3.9G     0  3.9G   0% /dev
    /dev/nvme0n1p1  ext4      9.7G  2.0G  7.2G  22% /
    /dev/nvme0n1p15 vfat      124M   12M  113M  10% /boot/efi
    /dev/nvme0n2    ext4       98G   24K   98G   1% /mnt/disks/data
    
    
    $ sudo lsblk
    
    NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    nvme0n1      259:0    0   20G  0 disk
    ├─nvme0n1p1  259:5    0  9.9G  0 part /
    ├─nvme0n1p14 259:6    0    3M  0 part
    └─nvme0n1p15 259:7    0  124M  0 part /boot/efi
    nvme0n2      259:4    0  100G  0 disk /mnt/disks/data
    
    

    此示例包含以下磁盘:

    • 启动磁盘/dev/nvme0n1p1 分区位于大小调整为 20 GB 的启动磁盘上。分区表和文件系统仅向操作系统提供 9.9 GB 的容量。
    • 非启动数据磁盘/dev/nvme0n2 非启动数据磁盘没有分区表,但该磁盘上的文件系统可为操作系统提供 100 GB 的容量。此磁盘的装载目录为 /mnt/disks/data

    记下 df 命令输出中的 Type 列,该列表明磁盘使用的是 ext4 还是 xfs 文件系统。

  4. 验证分区类型:

    sudo parted -l
    

    在调整磁盘大小后首次运行此命令时,您可能会看到类似以下内容的消息:

    Warning: Not all of the space available to /dev/nvme0n1 appears to be
    used, you can fix the GPT to use all of the space (an extra 20971520
    blocks) or continue with the current setting?
    Fix/Ignore?
    

    如果输入 Fix,操作系统将自动重新对磁盘进行分区,以向操作系统提供额外空间。如果您没有任何其他磁盘要修改,请跳到最后一步。

  5. 如果您选择不使用自动修复选项或该选项不可用,请查看要重新分区的磁盘的信息:

    sudo parted -l /dev/DEVICE_NAME
    

    查找字段:Partition Table,如果值为 msdos,则该磁盘具有 MBR 分区类型。这意味着此类磁盘的大小上限为 2 TB。

  6. 对于启动磁盘,调整磁盘上的根分区和文件系统的大小。此示例假定虚拟机映像不支持自动根分区和文件系统大小调整。

    1. 使用 parted 调整根分区的大小。例如,以下命令会将设备的分区 1 扩展为可能的最大大小:

      1. 在设备上打开 parted

        sudo parted /dev/DEVICE_NAME
        
      2. 在提示符处,输入:

        (parted) resizepart
        
      3. Partition number? 提示符处,输入:

        1
        
      4. Warning: Partition /dev/DEVICE_NAMEp1 is being used. Are you sure you want to continue? 提示符处,输入:

        Yes
        
      5. End? 提示符处,输入

        100%
        
      6. (parted) 提示符处,输入:

        (parted) quit
        
    2. 使用 parted -l 查看新的分区表。

      sudo parted -l /dev/DEVICE_NAME
      
      Model: nvme_card-pd (nvme)
      Disk /dev/DEVICE_NAME: 21.5GB
      Sector size (logical/physical): 512B/512B
      Partition Table: gpt
      Disk Flags:
      
      Number  Start   End     Size    File system  Name  Flags
      14      1049kB  4194kB  3146kB                     bios_grub
      15      4194kB  134MB   130MB   fat16              boot, esp
      1       134MB   21.5GB  21.3GB  ext4
      
    3. 扩展文件系统:

      • 如果您使用的是 ext4,请使用 resize2fs 命令:

        sudo resize2fs /dev/DEVICE_NAME
        
      • 如果您使用的是 xfs,请使用 xfs_growfs 命令:

        sudo xfs_growfs -d /
        
      • 如果您使用的是 btrfs,请使用 btrfs 命令:

        sudo btrfs filesystem resize max /
        
  7. 对于非启动数据磁盘,调整磁盘上文件系统的大小。

    • 如果您使用的是 ext4,请使用 resize2fs 命令扩展文件系统:

      sudo resize2fs /dev/DATA_DEVICE_NAME
      

      DATA_DEVICE_NAME 替换为数据磁盘的设备名称。在此示例中,设备名称为 /dev/nvme0n2

    • 如果您使用的是 xfs,请使用 xfs_growfs 命令扩展文件系统:

      sudo xfs_growfs MOUNT_DIR
      
    • 如果您使用的是 btrfs,请使用 btrfs 命令扩展文件系统:

      sudo btrfs filesystem resize max MOUNT_DIR
      

      MOUNT_DIR 替换为设备的装载点。您可以在 lsblk 命令的输出中找到 MOUNTPOINT 列中列出的装载点。

  8. 使用 df 命令验证文件系统是否已扩展。例如:

    df -h /dev/DATA_DEVICE_NAME
    
    Filesystem       Size  Used  Avail    Use%     Mounted on
    /dev/DATA_DEVICE_NAME   118G  70M   118G     1%     MOUNT_DIR
    

Windows 虚拟机

使用 Windows 磁盘管理实用程序调整 Windows 实例上的分区大小。

  1. 在 Google Cloud 控制台中,转到虚拟机实例页面。

    转到“虚拟机实例”

  2. 点击已调整大小的磁盘所属实例旁边的 RDP 按钮。浏览器会建立连到该实例的 RDP 连接。

  3. 右键点击 Windows“开始”按钮,然后选择磁盘管理以打开“磁盘管理”工具。

    从 Windows“开始”按钮的右键菜单中选择 Windows“磁盘管理器”工具。

  4. 通过在 Powershell 中运行来显示磁盘分区类型:

    Get-Disk
    
    在“分区样式”列下,如果值为 MBR,则磁盘具有 MBR 分区类型。这意味着此类磁盘的大小上限为 2 TB

  5. 刷新“磁盘管理”工具,使其识别地区永久性磁盘上的额外空间。在“磁盘管理”窗口顶部,点击操作并选择刷新

    在“磁盘管理”工具中点击“操作”菜单并选择“刷新”以更新地区永久性磁盘信息。

  6. 在已调整大小的磁盘上,右键点击已格式化的分区并选择扩展卷

    右键点击磁盘的已格式化部分并选择“扩展卷”选项。

  7. 按照扩展卷向导中的说明扩展现有分区以包含额外的磁盘空间。如果现有分区已格式化为 NTFS,则分区大小上限受其集群大小设置的限制

  8. 完成向导步骤并且完成卷格式化后,请检查所挂接磁盘列表中的 Status 列,以确保新磁盘的状态为 Healthy

    查看 Windows 识别的磁盘列表,验证该实例是否处于联机状态且运行状况良好。

完成此过程后,您无需重启虚拟机。现在,您可以使用添加的磁盘空间来存储数据。

后续步骤