添加本地 SSD

Compute Engine 为虚拟机 (VM) 实例提供始终加密的本地固态硬盘 (SSD) 块存储服务。每个本地 SSD 的大小为 375 GB,但每个实例最多可以挂接 8 个本地 SSD 分区,因此总共可获得 3 TB 的本地 SSD 存储空间。在 Beta 版中,您最多可以挂接 24 个本地 SSD 分区,因此每个实例可获得总共 9 TB 的存储空间。或者,您也可以将多个本地 SSD 分区格式化并装载到一个逻辑卷中。

不同于永久性磁盘,本地 SSD 是以物理方式挂接到托管着虚拟机实例的服务器。与永久性磁盘相比,这种紧密耦合可提供卓越的性能、极高的每秒输入/输出操作数 (IOPS),以及极低的延迟。 如需了解详情,请参阅块存储性能

本地 SSD 只适合用于缓存、处理空间或低价值数据等临时存储用途。要存储非暂时或非临时性质的数据,请使用我们的持久存储方案之一。

您无法停止并重启具有本地 SSD 的实例。如果您通过客机操作系统关闭了具有本地 SSD 的实例,则无法重启该实例,并且本地 SSD 上的数据也会丢失。

如果本地 SSD 不符合您的冗余或灵活性要求,您可以将本地 SSD 与其他存储方案结合使用。

准备工作

9 TB 本地 SSD 容量上限(Beta 版)

作为 Beta 版功能,您可以创建满足以下条件的实例:

  • 含有 16 个本地 SSD 分区,总共 6 TB 本地 SSD 空间,性能达到 160 万次读取 IOPS
  • 含有 24 个本地 SSD 分区,总共 9TB 本地 SSD 空间,性能达到 240 万次读取 IOPS

此方案适用于所有 N1 预定义和自定义机器类型的实例。 为实现最高性能,请选择具有 32 个或更多 vCPU 的机器类型。 请注意,读取和写入本地 SSD 磁盘需要虚拟机提供的 CPU 周期。为实现非常高且始终如一的 IOPS 水平,您必须让 CPU 能够有空闲时间来处理输入和输出操作。如需了解详情,请参阅块存储性能

本地 SSD 数据持久性

在创建具有本地 SSD 的实例之前,您必须了解哪些事件会保留本地 SSD 数据以及哪些事件可能会导致本地 SSD 数据无法恢复。

本地 SSD 上的数据只有在遇到以下事件时才会存留:

  • 重新启动客机操作系统。
  • 实例被配置为实时迁移并且经历主机维护事件。
  • 如果主机系统遇到主机错误,Compute Engine 会尽全力重新连接到虚拟机并保留本地 SSD 数据,但可能不会成功。如果尝试成功,虚拟机会自动重启。但如果尝试重新连接失败,虚拟机将重启,而不会保留任何数据。

本地 SSD 上的数据在遇到以下事件时不会存留:

  • 手动终止实例。
  • 关闭客机操作系统并强制停止实例。
  • 实例被配置为抢占式并且经历抢占过程。
  • 实例被配置为在发生主机维护事件时终止,并且经历主机维护事件。
  • 如果主机系统遇到主机错误,并且底层硬盘在 60 分钟内未恢复,Compute Engine 不会尝试保留本地 SSD 上的数据。
  • 错误配置本地 SSD 使其无法访问。
  • 停用项目结算功能。实例将停止,并且您的数据将丢失。

创建具有本地 SSD 的实例

由于本地 SSD 位于虚拟机实例运行所在的物理机器上,因此您只能在创建实例期间创建这些 SSD。本地 SSD 不能用作启动设备。

创建本地 SSD 后,您必须先格式化并装载该设备,然后才能使用。

您可以使用 Google Cloud Consolegcloud 工具Compute Engine API 创建具有本地 SSD 的实例。

控制台

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

      转到“虚拟机实例”页面

    2. 点击创建实例
    3. 创建新实例页面上,填写实例的属性。
    4. 展开管理、安全、磁盘、网络、单独租用
    5. 点击磁盘,然后在额外磁盘下点击添加新磁盘
    6. 名称字段下,为新磁盘输入一个名称。
    7. 类型下,选择本地 SSD 暂存磁盘(最多 8 个)
    8. 点击完成
    9. 点击创建以创建实例。

    gcloud

    如需创建挂接了本地 SSD 的虚拟机实例,请按照说明创建实例,并使用 --local-ssd 标志创建和挂接本地 SSD 分区。如需创建多个本地 SSD 分区,请添加多个 --local-ssd 标志。或者,您也可以为每个 --local-ssd 标志设置接口和设备名称值。

    同样,您可以创建具有两个本地 SSD 的实例,其中每个 SSD 使用一个 SCSI 接口,如下所示:

    gcloud compute instances create example-instance \
            --machine-type n1-standard-8 \
            --local-ssd interface=[INTERFACE_TYPE] \
            --local-ssd interface=[INTERFACE_TYPE] \
            --image-project [IMAGE_PROJECT] \
            --image-family [IMAGE_FAMILY]
        

    其中:

    • [INTERFACE_TYPE] 是您要用于此设备的本地 SSD 接口。如果您的启动磁盘映像具有优化的 NVMe 驱动程序,请指定 nvme;对于其他映像,请指定 scsi
    • [INSTANCE_NAME] 是新实例的名称。
    • [IMAGE_FAMILY]可用映像系列中的一种。
    • [IMAGE_PROJECT] 是该映像系列所属的映像项目

    如有必要,您可以使用 nvmescsi 的组合将多个本地 SSD 分区挂接到单个实例,以用于不同分区。nvme 设备的性能取决于实例的启动磁盘映像。

    创建本地 SSD 后,您必须先格式化并装载该设备,然后才能使用。

    API

    在 API 中,您可以在创建虚拟机实例时使用 initializeParams 属性创建本地 SSD 设备。您还必须提供以下属性:

    • diskType:设置为本地 SSD
    • autoDelete:设置为 true
    • type:设置为 SCRATCH

    本地 SSD 实例无法设置以下属性:

    • diskName
    • sourceImage 属性
    • diskSizeGb

    以下示例请求载荷用于创建一个具有启动磁盘和本地 SSD 设备的实例:

    {
           "machineType":"zones/us-central1-f/machineTypes/n1-standard-8",
           "name":"local-ssd-instance",
           "disks":[
              {
                 "type":"PERSISTENT",
                 "initializeParams":{
                    "sourceImage":"projects/ubuntu-os-cloud/global/images/family/ubuntu-1604-lts"
                 },
                 "boot":true
              },
              {
                 "type":"SCRATCH",
                 "initializeParams":{
                    "diskType":"zones/us-central1-f/diskTypes/local-ssd"
                 },
                 "autoDelete":true,
                 "interface": "NVME"
              }
           ],
           "networkInterfaces":[
              {
                 "network":"global/networks/default"
              }
           ]
         }
        

    创建本地 SSD 后,您必须先格式化并装载该设备,然后才能使用。

    如需详细了解如何使用 API 创建实例,请参阅 Compute Engine API

    选择 NVMe 或 SCSI 接口

    您可以使用 NVMe 接口或 SCSI 接口将本地 SSD 连接到实例。大多数公共映像都包含 NVMe 和 SCSI 驱动程序。但是,某些映像包含优化的驱动程序,使实例能够通过 NVMe 实现最佳性能,或者能够使用多队列 SCSI 通过 SCSI 接口实现最佳性能。

    • NVMe 优化的公共映像
      • Ubuntu 14.04 LTS 映像 ubuntu-1404-trusty-v20170110 及更高版本,或映像系列 ubuntu-1404-lts
      • Ubuntu 16.04 LTS 映像 ubuntu-1604-xenial-v20170113 及更高版本,或映像系列 ubuntu-1604-lts
      • Ubuntu 17.10 映像系列 ubuntu-1710
      • Ubuntu 18.04 LTS 映像系列 ubuntu-1804-lts
    • 支持多队列 SCSI 的公共映像:
      • Debian 9 Stretch 映像,或映像系列 debian-9
      • Ubuntu 14.04 LTS 映像 ubuntu-1404-trusty-v20170807 及更高版本,或映像系列 ubuntu-1404-lts
      • Ubuntu 16.04 LTS 映像 ubuntu-1604-xenial-v20170803 及更高版本,或映像系列 ubuntu-1604-lts
      • Ubuntu 17.10 映像系列 ubuntu-1710
      • Ubuntu 18.04 LTS 映像系列 ubuntu-1804-lts
      • 所有 Windows Server 映像
      • 所有 SQL Server 映像

    或者,您也可以为导入项目的自定义映像启用多队列 SCSI。如需了解详情,请参阅启用多队列 SCSI

    选择有效的本地 SSD 数量

    如果您要将多个本地 SSD 挂接到单个虚拟机实例,您可以挂接的有效本地 SSD 数量会受到一定的限制,具体取决于虚拟机实例的机器类型。根据虚拟机的机器类型,您可以将 1 到 8 个本地 SSD 挂接到单个虚拟机。由于 Beta 版的容量上限已增加到 9 TB,因此您也可以将 16 或 24 个本地 SSD 挂接到单个虚拟机。如需了解详情,请参阅本地 SSD 和机器类型限制

    格式化并装载本地 SSD 设备

    格式化并装载各个本地 SSD 分区

    如需将多个本地 SSD 连接到实例,最简单的方式是使用单个分区格式化每个设备并进行装载。或者,您可以将多个分区合并到单个逻辑卷中

    Linux 实例

    在 Linux 实例上格式化并装载新的本地 SSD。您可以使用任何所需的分区格式和配置。在本示例中,请创建单个 ext4 分区。

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

      转到“虚拟机实例”页面

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

    3. 在终端中,使用 lsblk 命令标识要装载的本地 SSD。

          $ lsblk
          

      SCSI 模式的本地 SSD 具有类似 sdb 的标准名称。NVMe 模式的本地 SSD 具有类似 nvme0n1 的名称,如以下输出中的 NAME 列所示:

          NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
          sda       8:0    0   10G  0 disk
          └─sda1    8:1    0   10G  0 part /
          nvme0n1 259:0    0  375G  0 disk
          
    4. 使用 ext4 文件系统格式化本地 SSD。此命令将删除本地 SSD 中的所有现有数据。

          $ sudo mkfs.ext4 -F /dev/[SSD_NAME]
          

      [SSD_NAME] 替换为您要格式化的本地 SSD 的 ID。例如,指定 nvme0n1 可格式化实例上的第一个 NVMe 本地 SSD。

    5. 使用 mkdir 命令创建用于装载设备的目录。

          $ sudo mkdir -p /mnt/disks/[MNT_DIR]
          

      其中:[MNT_DIR] 是用于装载本地 SSD 的目录。

    6. 将本地 SSD 装载到实例。或者,您可以停用写入缓存刷新以提高写入性能,但可能会将缓存数据写入的持续性降低长达两秒。

          $ sudo mount /dev/[SSD_NAME] /mnt/disks/[MNT_DIR]
          

      其中:

      • [SSD_NAME] 是要装载的本地 SSD 的 ID。
      • [MNT_DIR] 是要装载本地 SSD 的目录。
    7. 配置对该设备的读写权限。在本示例中,请为所有用户授予对设备的写权限。

          $ sudo chmod a+w /mnt/disks/[MNT_DIR]
          

      其中:[MNT_DIR] 是装载了本地 SSD 的目录。

    或者,您可以将本地 SSD 添加到 /etc/fstab 文件,以使该设备在实例重启时自动重新装载。如果实例停止或终止,此条目不会起到保留本地 SSD 上的数据的作用。如需全面了解本地 SSD 数据持久性,请参阅本地 SSD 数据持久性

    指定 /etc/fstab 条目文件时,请务必添加 nofail 选项,这样一来,即使本地 SSD 不存在,实例也能继续启动。例如,如果您截取启动磁盘的快照并创建没有挂接任何本地 SSD 的新实例,则该实例可以继续启动流程,而不是无限期地暂停。

    1. 创建 /etc/fstab 条目。使用 blkid 命令查找该设备上文件系统的 UUID,并修改 /etc/fstab 文件以将该 UUID 添加到装载选项中。您只需一条命令即可完成此步骤。例如:

          $ echo UUID=`sudo blkid -s UUID -o value /dev/disk/by-id/google-local-ssd-0` /mnt/disks/[MNT_DIR] ext4 discard,defaults,nofail 0 2 | sudo tee -a /etc/fstab
          

      其中 [MNT_DIR] 是装载了本地 SSD 的目录。

    2. 使用 cat 命令验证您的 /etc/fstab 条目是否正确:

          $ cat /etc/fstab
          

    如果您从此实例的启动磁盘创建快照并使用它创建没有本地 SSD 的不同实例,请修改 /etc/fstab 文件并移除此本地 SSD 对应的条目。即使配置了 nofail 选项,您也应该使 /etc/fstab 文件与挂接到该实例的分区保持同步,并在创建启动磁盘快照之前移除这些条目。

    Windows 实例

    使用 Windows 磁盘管理工具在 Windows 实例上格式化和装载本地 SSD。

    1. 通过 RDP 连接到实例。在本示例中,请转到“虚拟机实例”页面,然后点击挂接了本地 SSD 的实例旁边的 RDP 按钮。在您输入用户名和密码后,系统将打开一个窗口,其中包含服务器的桌面设备界面。

    2. 右键点击 Windows“开始”按钮并选择磁盘管理

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

    3. 如果您之前尚未初始化本地 SSD,则该工具会提示您为新分区选择分区方案。选择 GPT,然后点击确定

      在磁盘初始化窗口中选择分区方案。

    4. 本地 SSD 初始化后,右键点击未分配的磁盘空间,然后选择新建简单卷

      从所挂接的磁盘创建新的简单卷。

    5. 按照新建简单卷向导中的说明配置新卷。您可以使用任何所需的分区格式,但在本示例中,请选择 NTFS。另外,请勾选执行快速格式化以加快格式化过程。

      在“新建简单卷向导”中选择分区格式类型。

    6. 完成向导步骤并且完成卷格式化后,请检查新的本地 SSD,以确保其处于 Healthy 状态。

      查看 Windows 识别的磁盘列表,验证本地 SSD 是否处于正常运行状态。

    大功告成!现在可以将文件写入本地 SSD 了。

    将多个本地 SSD 分区格式化并装载到单个逻辑卷中

    不同于永久性 SSD,挂接到实例的每个本地 SSD 设备具有固定的 375 GB 容量。如果要将多个本地 SSD 分区合并到单个逻辑卷中,则必须自行定义跨这些分区的卷管理。

    Linux 实例

    使用 mdadm 创建 RAID 0 阵列。本示例使用单个 ext4 文件系统格式化此阵列,但您可以应用自己偏好的任何文件系统。

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

      转到“虚拟机实例”页面

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

    3. 在终端中安装 mdadm 工具。mdadm 的安装过程会显示一个与暂停脚本相关的用户提示,因此请手动执行此过程。

      Debian 和 Ubuntu:

          $ sudo apt-get update && sudo apt-get install mdadm --no-install-recommends
          

      CentOS 和 RHEL:

          $ sudo yum install mdadm -y
          

      SLES 和 openSUSE:

          $ sudo zypper install -y mdadm
          

    4. 使用 lsblk 命令标识所有要一起装载的本地 SSD。在本示例中,实例装载了 8 个 NVMe 模式的本地 SSD 分区:

          $ lsblk
          
          NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
          sda       8:0    0   10G  0 disk
          └─sda1    8:1    0   10G  0 part /
          nvme0n1 259:0    0  375G  0 disk
          nvme0n2 259:1    0  375G  0 disk
          nvme0n3 259:2    0  375G  0 disk
          nvme0n4 259:3    0  375G  0 disk
          nvme0n5 259:4    0  375G  0 disk
          nvme0n6 259:5    0  375G  0 disk
          nvme0n7 259:6    0  375G  0 disk
          nvme0n8 259:7    0  375G  0 disk
          
          

      SCSI 模式的本地 SSD 具有类似 sdb 的标准名称。NVMe 模式的本地 SSD 具有类似 nvme0n1 的名称。

    5. 使用 mdadm 将多个本地 SSD 设备合并到一个名为 /dev/md0 的阵列中。本示例合并了 8 个 NVMe 模式的本地 SSD 设备。对于 SCSI 模式的本地 SSD 设备,请指定从 lsblk 命令获取的名称:

          $ sudo mdadm --create /dev/md0 --level=0 --raid-devices=8 \
          /dev/nvme0n1 /dev/nvme0n2 /dev/nvme0n3 /dev/nvme0n4 \
          /dev/nvme0n5 /dev/nvme0n6 /dev/nvme0n7 /dev/nvme0n8
          
          mdadm: Defaulting to version 1.2 metadata
          mdadm: array /dev/md0 started.
          
          
    6. 使用 ext4 文件系统格式化整个 /dev/md0 阵列。此命令将删除本地 SSD 中的所有现有数据。

          $ sudo mkfs.ext4 -F /dev/md0
          
    7. 创建一个用于装载 /dev/md0 的目录。在本示例中,请创建 /mnt/disks/ssd-array 目录:

          $ sudo mkdir -p /mnt/disks/[MNT_DIR]
          

      其中:[MNT_DIR] 是用于装载本地 SSD 阵列的目录。

    8. /dev/md0 阵列装载到 /mnt/disks/ssd-array 目录。 或者,您可以停用写入缓存刷新以提高写入性能,但可能会将缓存数据写入的持续性降低长达两秒。

          $ sudo mount /dev/md0 /mnt/disks/[MNT_DIR]
          

      其中:[MNT_DIR] 是用于装载本地 SSD 阵列的目录。

    9. 配置对该设备的读写权限。在本示例中,请为所有用户授予对设备的写权限。

          $ sudo chmod a+w /mnt/disks/[MNT_DIR]
          

      其中:[MNT_DIR] 是装载了本地 SSD 阵列的目录。

    或者,您可以将本地 SSD 添加到 /etc/fstab 文件,以使该设备在实例重启时自动重新装载。如果实例终止,此条目不会起到保留本地 SSD 上的数据的作用。 如需全面了解本地 SSD 数据持久性,请参阅本地 SSD 数据持久性

    指定 /etc/fstab 条目文件时,请务必添加 nofail 选项,这样一来,即使本地 SSD 不存在,实例也能继续启动。例如,如果您截取启动磁盘的快照并创建没有挂接任何本地 SSD 的新实例,则该实例可以继续启动流程,而不是无限期地暂停。

    1. 创建 /etc/fstab 条目。使用 blkid 命令查找该设备上文件系统的 UUID,并修改 /etc/fstab 文件以将该 UUID 添加到装载选项中。指定 nofail 选项,以使系统在本地 SSD 不可用的情况下也能启动。您只需一个命令即可完成此步骤。例如:

          $ echo UUID=`sudo blkid -s UUID -o value /dev/md0` /mnt/disks/[MNT_DIR] ext4 discard,defaults,nofail 0 2 | sudo tee -a /etc/fstab
          

      其中:[MNT_DIR] 是装载了本地 SSD 阵列的目录。

    2. 使用 cat 命令验证您的 /etc/fstab 条目是否正确:

          $ cat /etc/fstab
          

    如果您从此实例的启动磁盘创建快照并使用它创建没有本地 SSD 的不同实例,请修改 /etc/fstab 文件并移除此本地 SSD 阵列对应的条目。即使配置了 nofail 选项,您也应该使 /etc/fstab 文件与挂接到该实例的分区保持同步,并在创建启动磁盘快照之前移除这些条目。

    Windows 实例

    使用 Windows 磁盘管理工具在 Windows 实例上格式化和装载本地 SSD 阵列。

    1. 通过 RDP 连接到实例。在本示例中,请转到“虚拟机实例”页面,然后点击挂接了本地 SSD 的实例旁边的 RDP 按钮。在您输入用户名和密码后,系统将打开一个窗口,其中包含服务器的桌面设备界面。

    2. 右键点击 Windows“开始”按钮并选择磁盘管理

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

    3. 如果您之前尚未初始化本地 SSD,则该工具会提示您为新分区选择分区方案。选择 GPT,然后点击确定

      在磁盘初始化窗口中选择分区方案。

    4. 本地 SSD 初始化后,右键点击未分配的磁盘空间,然后选择新建带区卷

      从附加磁盘新建带区卷。

    5. 选择要加入带区阵列中的本地 SSD 分区。在本示例中,请选择所有分区,然后将它们合并到单个本地 SSD 设备中。

      选择要加入阵列中的本地 SSD 分区。

    6. 按照新建带区卷向导中的说明配置新卷。您可以使用任何所需的分区格式,但在本示例中,请选择 NTFS。另外,请勾选执行快速格式化以加快格式化过程。

      在“新建带区卷向导”中选择分区格式类型。

    7. 完成向导步骤并且完成卷格式化后,请检查新的本地 SSD,以确保其处于 Healthy 状态。

      查看 Windows 识别的磁盘列表,验证本地 SSD 是否处于正常运行状态。

    现在可以将文件写入本地 SSD 了。

    性能

    本地 SSD 性能在很大程度上取决于您所选择的接口。可通过 SCSINVMe 接口使用本地 SSD。 如果选择使用 NVMe,则必须使用特殊的支持 NVMe 的映像才能获得最佳性能。如需了解详情,请参阅选择 NVMe 或 SCSI 接口

    要达到性能上限(即使用 16 个或 24 个本地 SSD 分区),请使用具有 32 个或更多 vCPU 的虚拟机。

    NVMe

    存储空间 (GB) 分区 IOPS 吞吐量
    (MB/秒)
    读取 写入 读取 写入
    375 1 170000 90000 660 350
    750 2 340000 180000 1320 700
    1125 3 510000 270000 1980 1050
    1500 4 680000 360000 2650 1400
    1875 5 680000 360000 2650 1400
    2250 6 680000 360000 2650 1400
    2625 7 680000 360000 2650 1400
    3000 8 680000 360000 2650 1400
    6000 16 1600000 800000 6240 3120
    9000 24 2400000 1200000 9360 4680

    SCSI

    存储空间 (GB) 分区 IOPS 吞吐量
    (MB/秒)
    读取 写入 读取 写入
    375 1 100000 70000 390 270
    750 2 200000 140000 780 550
    1125 3 300000 210000 1170 820
    1500 4 400000 280000 1560 1090
    1875 5 400000 280000 1560 1090
    2250 6 400000 280000 1560 1090
    2625 7 400000 280000 1560 1090
    3000 8 400000 280000 1560 1090
    6000 16 900000 800000 6240 3120
    9000 24 900000 800000 9360 4680