使用永久性磁盘

您可以将永久性磁盘用作虚拟机实例的启动磁盘,也可以用作挂接到虚拟机的数据磁盘。本文档介绍如何修改现有永久性磁盘以实现以下目标:

  • 增加存储空间。
  • 恢复无法访问的实例。
  • 删除挂接虚拟机后自动删除磁盘。
  • 切换到其他磁盘类型

如需大致了解永久性磁盘以及可用磁盘类型,请参阅永久性磁盘概览

调整永久性磁盘的大小

当您的虚拟机实例实例需要额外的存储空间或更高的性能限制时,您可以增加永久性磁盘的大小。永久性磁盘只能增加容量,不能减少容量。

无论磁盘是否挂接到正在运行的虚拟机,您都可以随时调整磁盘的大小。

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

调整磁盘大小

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

控制台

  1. 在 Google Cloud Console 中,转到磁盘页面。

    转到“磁盘”

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

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

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

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

gcloud

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

gcloud compute disks resize DISK_NAME --size DISK_SIZE

请替换以下内容:

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

API

在 API 中,构建对 compute.disks.resize 方法的 POST 请求。在请求正文中,指定 sizeGb 参数并将其设置为所需磁盘大小(以 GB 为单位)。

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 实例

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

    转到虚拟机实例

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

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

    $ 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. 调整启动磁盘上的根分区和文件系统的大小。此示例假定虚拟机映像不支持自动根分区和文件系统大小调整。

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

      sudo parted -sm /dev/sda -- resizepart 1 -1
      
    2. 将 GPT 数据结构移动到磁盘的末尾,以对齐 GPT 表格。

      sudo sgdisk --move-second-header /dev/sda
      
    3. 使用 partprobe 读取新的分区表。

      sudo partprobe /dev/sda
      
    4. 如果您使用的是 ext4,请使用 resize2fs 命令扩展文件系统:

      sudo resize2fs /dev/sda1
      
    5. 如果您使用的是 xfs,请使用 xfs_growfs 命令扩展文件系统:

      sudo xfs_growfs -d /
      
  5. 调整非启动数据磁盘上的文件系统大小。

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

      sudo resize2fs /dev/DEVICE_NAME
      

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

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

      sudo xfs_growfs MOUNT_DIR
      

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

  6. 使用 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 Console 中,转到虚拟机实例页面。

    转到虚拟机实例

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

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

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

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

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

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

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

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

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

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

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

恢复无法访问的实例或完整启动磁盘

如果您无法连接到实例,或者启动磁盘已满且无法调整其大小,则必须创建实例并通过快照重新创建启动磁盘,这样才能调整其大小。您必须知道要重新创建的启动磁盘的大小,

  1. 在 Google Cloud Console 中,转到创建实例页面。

    转到“创建实例”

    1. 点击实例名称打开虚拟机实例详情页面。
    2. 点击停止
    3. 启动磁盘部分中,记下启动磁盘的大小和名称。
  2. 在 Google Cloud Console 中,转到创建快照页面。

    转到“创建快照”

    1. 输入快照名称
    2. 来源磁盘下拉列表中选择启动磁盘。
    3. 点击创建
  3. 在 Google Cloud Console 中,转到创建实例页面。

    转到“创建实例”

  4. 输入实例详情。

  5. 利用旧启动磁盘的快照创建新的启动磁盘。

    1. 启动磁盘下,选择更改
    2. 选择快照
    3. 快照下拉列表中选择旧启动磁盘的快照。
    4. 选择启动磁盘类型
    5. 为磁盘输入新的大小。
    6. 点击选择以确认您的磁盘选项。
  6. 点击创建

设置地区永久性磁盘的自动删除状态

删除关联的虚拟机实例时,您可以设置由系统自动删除读写可用区永久性磁盘。此行为由挂接的给定可用区永久性磁盘的虚拟机实例上的 autoDelete 属性控制,并且可以随时更新。同样,您也可以通过将 autoDelete 值标记为 false 来防止可用区永久性磁盘被删除。

控制台

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

    转到虚拟机实例

  2. 选择关联了磁盘的实例。

  3. 点击实例名称。 虚拟机实例详情页面随即显示。

  4. 点击修改

  5. 滚动到额外磁盘

  6. 点击 铅笔图标以修改该磁盘的删除规则

  7. 点击完成以保存更改。

  8. 点击保存以更新实例。

gcloud

如需设置可用区永久性磁盘的自动删除状态,请使用 gcloud compute instances set-disk-auto-delete 命令

gcloud compute instances set-disk-auto-delete example-instance \
  [--auto-delete|--no-auto-delete] \
  --disk DISK_NAME

DISK_NAME 替换为磁盘的名称。

API

如果您使用的是 API,请对以下 URI 发出 POST 请求:

https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME/setDiskAutoDelete?deviceName=DISK_NAME,autoDelete=true

请替换以下内容:

  • PROJECT_ID:您的项目 ID
  • ZONE:您的实例和磁盘所在的可用区
  • INSTANCE_NAME:实例的名称
  • DISK_NAME:磁盘的名称

更改永久性磁盘的类型

您可以随时更改永久性磁盘的类型。永久性磁盘类型在价格性能特性方面各有不同,因此您可能需要更改现有永久性磁盘的类型,以更好地满足您的工作负载。

您可以使用快照更改永久性磁盘的类型。例如,如需将标准永久性磁盘更改为 SSD 永久性磁盘,请按照以下过程操作:

控制台

  1. 创建标准永久性磁盘的快照
  2. 根据快照创建新的永久性磁盘。从类型下拉列表中选择“SSD 永久性磁盘”。

gcloud

  1. 创建标准永久性磁盘的快照
  2. 根据快照创建新的永久性磁盘。添加 --type 标志并指定 pd-ssd

API

  1. 创建标准永久性磁盘的快照
  2. 根据快照创建新的永久性磁盘。在 type 字段中,指定 "zones/ZONE/diskTypes/pd-ssd" 并将 ZONE 替换为您的实例和新磁盘所在的区域。

问题排查

如需查找用于诊断和解决与完整磁盘和磁盘大小调整相关的问题的方法,请参阅排查完整磁盘和磁盘大小调整问题

后续步骤