增加永久性磁盘的大小


当您的虚拟机实例需要额外的存储空间或增加的性能限制时,您可以增加 Persistent Disk 的大小。无论磁盘是否挂接到正在运行的虚拟机,您都可以增加磁盘大小。

本页介绍了如何增加 Persistent Disk 的大小。如需增大 Google Cloud Hyperdisk 卷的大小,请参阅修改 Hyperdisk 的设置

您只能增加磁盘大小,而不能减小磁盘大小。如需减小磁盘大小,您必须创建较小的新磁盘。在删除较大的原始磁盘之前,您需要为这两个磁盘付费。

创建自定义 Linux 映像自定义 Windows 映像时,您需要手动增加启动磁盘的大小和非启动磁盘。如果您使用的是公共映像,Compute Engine 会自动调整启动磁盘的大小。

增加磁盘大小不会删除或修改磁盘数据,但最佳做法是,在对文件系统或分区进行任何更改之前,请始终通过创建快照备份磁盘

Compute Engine 会管理永久性磁盘背后的硬件,因此您可以添加磁盘以及调整其大小,而无需处理分割或冗余。

准备工作

  • 如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 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. Terraform

      如需在本地开发环境中使用本页面上的 Terraform 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭据设置应用默认凭据。

      1. Install the Google Cloud CLI.
      2. To initialize the gcloud CLI, run the following command:

        gcloud init
      3. If you're using a local shell, then create local authentication credentials for your user account:

        gcloud auth application-default login

        You don't need to do this if you're using Cloud Shell.

      如需了解详情,请参阅 Set up authentication for a local development environment

      REST

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

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

        gcloud init

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

所需的角色和权限

如需获得调整 Persistent Disk 大小所需的权限,请让您的管理员向您授予项目的以下 IAM 角色:

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

此预定义角色包含调整 Persistent Disk 大小所需的 compute.disks.update 权限。

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

增加磁盘大小

如需增加启动磁盘或非启动磁盘的大小,请遵循以下过程:

控制台

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

    转到“磁盘”

  2. 在项目的永久性磁盘列表中,点击要调整大小的磁盘的名称。

  3. 在“磁盘详情”页面上,点击修改。您可能需要点击 更多操作菜单,然后再点击修改

  4. 大小字段中,为磁盘输入新的大小。使用 MBR 分区表的磁盘最大只能调整到 2 TB。

  5. 点击保存以将更改应用于磁盘。

磁盘列表中会显示新的磁盘大小。

gcloud

使用 gcloud compute disks resize 命令并在 --size 标志中指定新磁盘大小(以吉比字节 [GiB] 为单位)。

gcloud compute disks resize DISK_NAME \
    --size DISK_SIZE \
    --zone=ZONE

替换以下内容:

  • DISK_NAME:您要调整大小的磁盘的名称。
  • DISK_SIZE:磁盘的新大小(以吉比字节 [GiB] 为单位)。使用 MBR 分区表的磁盘最大只能调整到 2 TB。
  • ZONE:对于区域 Persistent Disk,请指定磁盘所在的可用区。

    对于地区永久性磁盘,请改用 --region=REGION 标志并指定地区磁盘所在的区域。

Terraform

选择以下任一选项可调整可用区级磁盘或区域级永久性磁盘的大小:

可用区级磁盘

如需更改 Persistent Disk 的大小,您可以使用 google_compute_disk 资源并使用 size 参数。

# Using pd-standard because it's the default for Compute Engine

resource "google_compute_disk" "default" {
  name = "disk-data"
  type = "pd-standard"
  zone = "us-west1-a"
  size = "5"
}

如果添加 size 参数以及 imagesnapshot 参数,则 size 值必须大于或等于映像或快照的大小。

如果省略 imagesnapshot 参数,则可以将 size 参数设置为小于现有磁盘大小。如果您执行此操作,Terraform 会销毁该磁盘并新建一个空的 Persistent Disk。

区域级永久性磁盘

如需更改区域永久性磁盘的大小,您可以使用 google_compute_region_disk 资源并使用 size 参数。

resource "google_compute_region_disk" "regiondisk" {
  name                      = "region-disk-name"
  snapshot                  = google_compute_snapshot.snapdisk.id
  type                      = "pd-ssd"
  region                    = "us-central1"
  physical_block_size_bytes = 4096
  size                      = 11

  replica_zones = ["us-central1-a", "us-central1-f"]
}

如果添加 size 参数以及 imagesnapshot 参数,则 size 值必须大于或等于映像或快照的大小。

如果省略 imagesnapshot 参数,则可以将 size 参数设置为小于现有磁盘大小。如果您执行此操作,Terraform 会销毁该磁盘并新建一个空的 RegionalPersistent Disk。

REST

如需调整 Persistent Disk 大小,请构建一个对 compute.disks.resize 方法发出的 POST 请求。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks/DISK_NAME/resize
{
  "sizeGb": "DISK_SIZE"
}

如需调整区域级永久性磁盘的大小,请构建一个对 compute.regionDisks.resize 方法发出的 POST 请求。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/disks/DISK_NAME/resize
{
   "sizeGb": "DISK_SIZE"
}

替换以下内容:

  • PROJECT_ID:您的项目 ID。
  • ZONE:对于可用区级 Persistent Disk:磁盘所在的可用区。
  • REGION:对于区域级永久性磁盘:磁盘所在的区域。
  • DISK_NAME:要调整大小的磁盘的名称。
  • DISK_SIZE:磁盘的新大小(以吉比字节 [GiB] 为单位)。使用 MBR 分区表的磁盘最大只能调整到 2 TB。

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

增加磁盘大小后,您可能需要调整其文件系统和分区的大小。以下列表显示了启动磁盘和非启动磁盘的其他信息:

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

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

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

如果您的 Persistent Disk 是使用 NVMe 连接的,请参阅调整文件系统和分区的大小,查看通过 NVMe 连接的磁盘的示例输出。

Linux 虚拟机

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

    转到“虚拟机实例”

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

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

    $ sudo df -Th
    
    Filesystem      Type     Size   Used  Avail  Use%  Mounted on
    /dev/sda1       ext4     9.7G   1.2G   8.5G   12%  /
    /dev/sdb        ext4     250G    60M   250G    1%  /mnt/disks/disk-1
    
    
    $ sudo lsblk
    
    NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sda       8:0    0   20G  0 disk
    └─sda1    8:1    0   10G  0 part /
    sdb       8:16   0  500G  0 disk /mnt/disks/disk-1
    
    

    此示例包含以下磁盘:

    • 启动磁盘/dev/sda1 分区位于大小调整为 20 GB 的启动磁盘上。分区表和文件系统仅向操作系统提供 9.7 GB 的容量。
    • 非启动数据磁盘/dev/sdb 非启动数据磁盘没有分区表,但该磁盘上的文件系统仅为操作系统提供 250 GB 的容量。此磁盘的装载目录为 /mnt/disks/disk-1

    df 命令显示 /dev/sda1 分区已作为根文件系统装载,/dev/sdb 磁盘已作为非启动数据磁盘装载到 /mnt/disks/disk-1。记下类型列,该列表明磁盘使用的是 ext4 还是 xfs 文件系统。

  4. 验证分区类型:

    sudo parted -l
    
    或者仅查看特定磁盘的信息:
    sudo parted -l /dev/DEVICE_NAME
    
    找到分区表字段。如果值为 msdos,则该磁盘具有 MBR 分区类型。这意味着此类磁盘的大小上限为 2 TB。

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

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

      1. 打开 /dev/sda 分区上的 parted

        sudo parted /dev/sda
      2. (parted) 提示符处,输入:

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

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

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

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

        quit
    2. 使用 partprobe 读取新的分区表。

      sudo partprobe /dev/sda
      
    3. 扩展文件系统:

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

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

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

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

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

      sudo resize2fs /dev/DEVICE_NAME
      

      DEVICE_NAME 替换为磁盘的设备名称。在此示例中,设备名称为 /dev/sdb

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

      sudo xfs_growfs MOUNT_DIR
      

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

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

      sudo btrfs filesystem resize max MOUNT_DIR
      

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

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

    df -h /dev/sdb
    
    Filesystem  Size  Used  Avail  Use%  Mounted on
    /dev/sdb    493G   70M  492G     1%  /mnt/disks/disk-1
    

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 识别的磁盘列表,验证该实例是否处于联机状态且运行状况良好。

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

后续步骤