增加永久性磁盘的大小


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

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

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

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

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

准备工作

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

    选择标签页以了解您打算如何使用本页面上的示例:

    控制台

    当您使用 Google Cloud 控制台访问 Google Cloud 服务和 API 时,无需设置身份验证。

    gcloud

    1. 安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:

      gcloud init
    2. 设置默认区域和可用区

    Terraform

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

    1. 安装 Google Cloud CLI。
    2. 如需初始化 gcloud CLI,请运行以下命令:

      gcloud init
    3. 为您的 Google 账号创建本地身份验证凭据:

      gcloud auth application-default login

    如需了解详情,请参阅 为本地开发环境设置身份验证

    REST

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

      安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:

      gcloud init

增加磁盘大小

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

控制台

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

    转到“磁盘”

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

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

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

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

gcloud

  1. 在 Google Cloud 控制台中,激活 Cloud Shell。

    激活 Cloud Shell

    Cloud Shell 会话随即会在 Google Cloud 控制台的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。

  2. 在 gcloud CLI 中,使用 gcloud compute disks resize 命令并使用所需的磁盘大小(以 GB 为单位)指定 --size 标志。

    gcloud compute disks resize DISK_NAME --size DISK_SIZE
    

    替换以下内容:

    • DISK_NAME:您要调整大小的磁盘的名称。
    • DISK_SIZE:磁盘的新大小(以 GB 为单位)。使用 MBR 分区表的磁盘最大只能调整到 2 TB。

Terraform

如需更改永久性磁盘的大小,您可以使用 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 会销毁该磁盘并新建一个空的永久性磁盘。在重新创建期间,Terraform 不会复制也未包含在 Terraform 配置中的其他数据,例如标签或快照时间表。为防止 Terraform 销毁并重新创建磁盘,您可以将 lifecycle.prevent_destroy = true 设置添加到 Terraform 配置中。

REST

构建对 compute.disks.resize 方法的 POST 请求。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks/DISK_NAME/resize

{
 "sizeGb": "DISK_SIZE"
}

替换以下内容:

  • PROJECT_ID:您的项目 ID。
  • ZONE:您的磁盘所在的区域。
  • DISK_NAME:要调整大小的磁盘的名称。
  • DISK_SIZE:磁盘的新大小(以 GB 为单位)。使用 MBR 分区表的磁盘最大只能调整到 2 TB。

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

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

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

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

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

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

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

后续步骤