添加区域永久性磁盘或调整其大小

本页面介绍如何添加和管理区域永久性磁盘存储资源。调整区域永久性磁盘的大小时,您只能将其调大,不能调小。

区域永久性磁盘与地区永久性磁盘的特性类似,但在以下几个方面有所不同:

  • 区域永久性磁盘必须以读/写 (RW) 模式进行装载。它们不支持只读 (RO) 模式。
  • 区域永久性磁盘不能用作启动磁盘。
  • 如果在一个地区发生故障,区域永久性磁盘支持强制挂接到另一个虚拟机实例。
  • 您可以通过快照创建区域永久性磁盘,但不能通过映像创建。
  • 这两类磁盘存在性能差异,详情请参阅存储选项文档。

区域永久性磁盘可在一个区域中的两个地区之间实现数据同步复制。如果在一个地区发生故障(这种情况不太可能发生),您的流量会被引导至其他虚拟机实例,并且您的副本磁盘会被强制附加到同一地区或辅助地区中的其他虚拟机实例。我们将强制附加发生的时间设计为一分钟以内。

设计可靠的系统和使用需要高可用性的有状态数据库服务(如 MySQL 和 Postgres)时,可以考虑使用区域永久性磁盘。

请参阅 Compute Engine 存储选项以比较这些资源及其性能。

您创建的每个永久性磁盘的默认物理块大小为 4 KB。如果您的数据库应用要求增加物理块大小,您可以在创建磁盘时选择 16 KB。启动磁盘不支持此功能。如果您想要更改现有磁盘的物理块大小,则必须先截取磁盘的快照,然后创建新磁盘。您不能直接修改磁盘的物理块大小。

准备工作

限制

区域永久性磁盘具有以下限制:

  • 区域永久性磁盘必须以读/写 (RW) 模式进行装载。它们不支持只读 (RO) 模式。
  • 区域永久性磁盘不能用作启动磁盘。
  • 您可以通过快照创建区域永久性磁盘,但不能通过映像创建。

将区域永久性磁盘添加到您的实例

创建区域标准永久性磁盘或区域 SSD 永久性磁盘并将其挂接到实例。如果您没有任何实例,则必须先创建并启动新实例。请务必在磁盘所属的区域中创建实例。

Console

您首先必须创建区域永久性磁盘,然后将其挂接到现有实例。您不能将区域永久性磁盘创建为启动磁盘,因为故障转移期间无法强制挂接此类磁盘。

创建区域永久性磁盘。

  1. 转到“磁盘”页面。

    转到“磁盘”页面

  2. 选择您的项目。
  3. 点击创建磁盘
  4. 指定磁盘的名称
  5. 选择磁盘类型
  6. 勾选在区域内复制此磁盘 (Replicate this disk within region) 复选框。
  7. 选择区域。

    记下该区域,因为在创建实例时必须选择同一区域。

  8. 选择该区域中的两个地区,然后点击确定

    请务必选择两个地区。记下所选的地区,因为您必须将磁盘挂接到其中一个地区中的实例。

  9. 选择来源类型

  10. (可选)选择物理块大小 (KB)。磁盘的默认大小为 4 KB。但是,您可以从下拉菜单中选择 16 KB 以增加磁盘的物理块大小。

  11. 选择加密

  12. 点击创建以完成磁盘的创建。

创建区域永久性磁盘后,将其挂接到您的实例

在将磁盘挂接到现有实例时,如果磁盘已挂接到其他实例,您可能会收到错误消息。您可能需要勾选额外磁盘下拉菜单中的强制挂接复选框,将磁盘强制挂接到实例。

在将新磁盘挂接到实例后,您必须格式化并装载磁盘,以便操作系统可以使用可用的存储空间。

gcloud

使用 gcloud 工具创建并挂接区域永久性磁盘:

  1. 使用 create 命令创建新的区域永久性磁盘。如果您需要区域 SSD 永久性磁盘以实现更高的吞吐量或 IOPS,请添加 --type 标志并指定 pd-ssd。(可选)添加 --physical-block-size 标志以设置物理块大小。

    gcloud beta compute disks create [DISK_NAME] --size [DISK_SIZE] \
        --type [DISK_TYPE] \
        --region [REGION] \
        --replica-zones [ZONE1,ZONE2] \
        --physical-block-size [BLOCK_SIZE]
    

    其中:

    • [DISK_NAME] 是新磁盘的名称。
    • [DISK_SIZE] 是以 GB 为单位的新磁盘大小。
    • [DISK_TYPE] 是永久性磁盘的类型,可以是 pd-standardpd-ssd
    • [REGION] 是区域磁盘将驻留的区域。例如:europe-west1
    • [ZONE1,ZONE2] 是两个磁盘所在区域内的地区。
      请务必选择两个地区。例如:europe-west1-a,europe-west1-b
    • [BLOCK_SIZE] 可以是 4096 (4 KB) 或 16384 (16 KB)。4 KB 是默认物理块大小。16 KB 是增加的物理块大小。

  2. 创建磁盘后,将其挂接到任何正在运行或已停止的实例。使用 gcloud beta compute instances attach-disk 命令并包含 --disk-scope regional 标志以指示该磁盘是区域磁盘:

    gcloud beta compute instances attach-disk [INSTANCE_NAME] \
        --disk [DISK_NAME] \
        --disk-scope regional
    

    其中:

    • [INSTANCE_NAME] 是要向其中添加新区域永久性磁盘的实例的名称。
    • [DISK_NAME] 是您要挂接到实例的新磁盘的名称。
    • --disk-scope 设置为 regional

    创建新磁盘并将其挂接到实例后,您必须格式化并装载磁盘,以便操作系统可以使用可用的存储空间。

  3. 使用 gcloud beta compute disks describe 命令查看磁盘的说明。响应将包含磁盘的物理块大小。

API

  1. 在 API 中,构建一个 POST 请求以创建区域永久性磁盘。在 compute.regionDisks.insert 请求正文中,使用磁盘 namereplicaZones 属性初始化新磁盘。要创建空白磁盘,请勿指定任何映像或快照来源。(可选)添加 physicalBlockSizeBytes 属性以设置物理块存储大小。

    POST https://www.googleapis.com/compute/beta/projects/[PROJECT_ID]/regions/[REGION]
    
    {
     "name": "[DISK_NAME]",
     "physicalBlockSizeBytes": "[BLOCK_SIZE]",
     "replicaZones": [
       "projects/[PROJECT_ID]/zones/[ZONE1]",
       "projects/[PROJECT_ID]/zones/[ZONE2]"
       ],
     }
    

    其中:

    • [PROJECT_ID] 是您的项目 ID。
    • [DISK_NAME] 是新磁盘的名称。
    • [BLOCK_SIZE] 可以是 4096 (4 KB) 或 16384 (16 KB)。4 KB 是默认物理块大小。16 KB 是增加的物理块大小。
    • [ZONE1] 是新磁盘所在的地区。您将在此地区将磁盘挂接到实例。
    • [ZONE2] 是副本磁盘的位置。

  2. 在 API 中,构建一个向 compute.instances.attachDisk 方法发出的 POST 请求,并添加您刚创建的永久性磁盘的网址:

    POST https://www.googleapis.com/compute/beta/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]/attachDisk
    
    {
     "source": "/projects/[PROJECT_ID]/regions/[REGION]/disks/[DISK_NAME]"
    }
    

    其中:

    • [PROJECT_ID] 是您的项目 ID。
    • [ZONE] 是您的实例和新磁盘所在的地区。
    • [INSTANCE_NAME] 是您要在其中添加新永久性磁盘的实例的名称。
    • [DISK_NAME] 是新磁盘的名称。

创建新磁盘并将其附加到实例后,您必须格式化并装载磁盘,以便操作系统可以使用可用的存储空间。

在一个地区发生故障期间访问区域永久性磁盘

如果在一个地区发生服务中断(这种情况不太可能发生),则区域永久性磁盘可以通过强制挂接命令进行故障转移,以转到另一个地区的虚拟机实例。

如果正在运行虚拟机实例的地区不可用,则可能无法从实例分离磁盘,因为系统无法访问实例以执行分离操作。借助强制挂接功能,您可以将区域永久性磁盘挂接到虚拟机实例,即使该磁盘当前已挂接到另一个实例也没有问题。

完成强制挂接操作后,Compute Engine 会阻止原始虚拟机写入磁盘。使用强制挂接功能,您可以安全地重新获得对数据的访问权限并恢复服务。

只有当某次写入的数据持久保留在两个副本中时,系统才会确认此次写入操作,并将结果返回虚拟机。如果其中一个副本不可用,则 Compute Engine 只会将数据写入到运行状况良好的副本中。当 Compute Engine 确定运行状况不佳的副本是备用副本时,该副本会以透明方式与运行状况良好的副本保持同步,而且操作的完全同步模式会恢复。此操作对虚拟机是透明的。

如果两个副本同时无法使用(这种情况很罕见),或者运行状况良好的副本无法使用,而另一个副本正进入同步状态,则对应的磁盘也无法使用。

此外,您也可以选择在执行强制挂接步骤后手动关停实例

地区内故障

您还可以将区域永久性磁盘强制挂接到同一地区中的虚拟机实例。当您处理由虚拟机配置错误、操作系统升级错误或其他故障模式导致的服务中断时,可以使用这种地区内故障转移方式。

Console

创建备用虚拟机实例并将磁盘强制挂接到实例。

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

    转到“虚拟机实例”页面

  2. 选择您的项目。
  3. 为您的实例指定名称
  4. 选择区域永久性磁盘所在的区域。
  5. 选择挂接磁盘的原始虚拟机实例的备用地区。

    磁盘页面中会列出您的磁盘。

  6. 点击管理、磁盘、网络、SSH 密钥
  7. 点击磁盘
  8. 额外磁盘下,点击 + 附加现有磁盘
  9. 从下拉菜单中选择区域永久性磁盘。
  10. 勾选复选框以强制附加磁盘。
  11. 点击完成
  12. 点击创建以完成此实例的创建。

    新虚拟机实例将显示在“虚拟机实例”页面上。
    当地区从中断恢复后,执行相同的步骤可以将磁盘强制挂接到原始实例。

gcloud

gcloud 工具中,使用 attach-disk 命令将副本磁盘挂接到虚拟机实例。在命令中添加 --force-attach 标志并将其设置为 True

gcloud beta compute instances attach-disk [INSTANCE_NAME] \
    --disk [DISK_NAME] \
    --disk-scope [REGIONAL] \
    --force-attach [TRUE]

其中:

  • [INSTANCE_NAME] 是该区域中新虚拟机实例的名称。
  • [DISK_NAME] 是磁盘的名称。
  • --disk-scope 设置为 regional

如有必要,在强制附加磁盘后,请将文件系统装载在磁盘上。实例可以使用强制附加的磁盘继续进行读取和写入操作。

API

构建一个向 compute.instances.attachDisk 方法发出的 POST 请求,其中应包含您刚创建的永久性磁盘的网址。另外,即使主实例仍具有该磁盘,也需要使用 forceAttach=true 查询参数将磁盘挂接到新的虚拟机实例。

POST https://www.googleapis.com/compute/beta/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]/attachDisk?forceAttach=true

{
 "source": "projects/[PROJECT_ID]/regions/[REGION]/disks/[DISK_NAME]"
}

其中:

  • [PROJECT_ID] 是您的项目 ID。
  • [REGION] 是您的实例和新磁盘所在的区域。
  • [INSTANCE_NAME] 是您要在其中添加新永久性磁盘的实例的名称。
  • [DISK_NAME] 是新磁盘的名称。

如有必要,在附加副本磁盘后,请将文件系统装载在磁盘上。实例可以使用副本磁盘继续进行读取和写入操作。

调整区域永久性磁盘的大小

如果具有区域永久性磁盘的实例需要额外的存储空间、IOPS 或吞吐量,您可以调整磁盘的大小。如果您需要将数据分为独一无二的卷,请为该实例创建多个辅助磁盘。无论磁盘是否附加到正在运行的实例,您都可以随时调整磁盘的大小。

调整区域永久性磁盘大小的命令与调整标准永久性磁盘大小的命令完全相同,但是前者包含一个对应于区域的附加标志。

Console

调整区域永久性磁盘的大小。

  1. 转到“磁盘”页面。

    转到“磁盘”页面

  2. 选择要调整大小的磁盘。
  3. 点击页面顶部的修改
  4. 输入磁盘的大小(以 GB 为单位)。

    您只能增加磁盘的大小。不能减少磁盘的大小。

  5. 点击保存
  6. 调整磁盘大小后,必须调整文件系统的大小,以便操作系统可以访问额外的空间。

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

gcloud

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

gcloud beta compute disks resize [DISK_NAME] \
    --region [DISK REGION] \
    --size [DISK_SIZE]

其中:

  • [DISK_NAME] 是您要调整其大小的磁盘的名称。
  • [DISK REGION] 是磁盘所在的区域。
  • [DISK_SIZE] 是磁盘的新大小(以 GB 为单位)。

调整磁盘大小后,必须调整文件系统的大小,以便操作系统可以访问额外的空间。

API

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

POST https://www.googleapis.com/compute/beta/projects/[PROJECT_ID]/regions/[REGION]/disks/[DISK_NAME]/resize

{
 "sizeGb": "[DISK_SIZE]"
}

其中:

  • [PROJECT_ID] 是您的项目 ID。
  • [REGION] 是磁盘所在的区域。
  • [DISK_NAME] 是您要调整其大小的磁盘的名称。
  • [DISK_SIZE] 是磁盘的新大小(以 GB 为单位)。

调整磁盘大小后,必须调整文件系统的大小,以便操作系统可以访问额外的空间。

将地区永久性磁盘迁移到区域永久性磁盘

要将现有的地区永久性磁盘转换为区域永久性磁盘,只需截取当前永久性磁盘的快照,然后利用该快照创建区域永久性磁盘即可。

gcloud

gcloud 工具中,使用 disks snapshot 命令并指定 --zone 标志和 --snapshot-name 标志。

gcloud compute disks snapshot [DISK_NAME] /
    --zone [DISK_ZONE] /
    --snapshot-name [SNAPSHOT_DISK_NAME]

其中:

  • [DISK_NAME] 是您要对其截取快照的磁盘的名称。
  • [DISK_ZONE] 是磁盘所在的地区。
  • [SNAPSHOT_DISK_NAME] 是最近被截取过快照的磁盘的名称。

使用 gcloud beta compute disks create 以通过区域磁盘的快照创建区域磁盘。指定磁盘名称、--region --replica-zones 标志和 --source-snapshot 标志。

gcloud beta compute disks create [DISK_NAME] \
    --region [DISK_REGION] \
    --replica-zones [ZONE1,ZONE2] \
    --source-snapshot [SNAPSHOT_DISK_NAME]

其中:

  • [DISK_NAME] 是新磁盘的名称。
  • [DISK_REGION] 是磁盘将驻留的区域。
  • [ZONE1,ZONE2] 是副本磁盘将驻留的地区。
  • [SNAPSHOT_DISK_NAME] 是来源快照磁盘的名称。

您可以使用相同的方法将区域磁盘迁移到地区磁盘。

API

在 API 中,构建一个向 compute.disk.createSnapshot 方法发出的 POST 请求来创建磁盘快照。在请求正文中,指定磁盘所在的zone以及要对其截取快照的disk的名称,并添加 createSnapshot

POST https://www.googleapis.com/compute/beta/projects/[PROJECT_ID]/regions/[REGION]/disks/[DISK]/createSnapshot

其中:

  • [PROJECT_ID] 是您的项目 ID。
  • [ZONE] 是磁盘所在的地区。
  • [DISK] 是您要对其截取快照的磁盘的名称。

在 API 中,构建一个 POST 请求以创建区域永久性磁盘。在 compute.regionDisks.insert 请求正文中,初始化新磁盘并指定磁盘名称和副本地区属性。由于这是数据磁盘,所以不要添加 sourceImage 属性,否则会创建一个空白磁盘:

POST https://www.googleapis.com/compute/beta/projects/[PROJECT_ID]/regions/[REGION]

{
 "name": "[DISK_NAME]",
 "replicaZones": [
 "projects/[PROJECT_ID]/zones/[ZONE1]",
 "projects/[PROJECT_ID]/zones/[ZONE2]"
 ],
}

其中:

  • [PROJECT_ID] 是您的项目 ID。
  • [DISK_NAME] 是新磁盘的名称。
  • [ZONE1] 是您的实例和新磁盘所在的地区。
  • [ZONE2] 是副本磁盘的位置。

后续步骤

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
Compute Engine 文档