添加本地 SSD


Compute Engine 为虚拟机 (VM) 实例提供始终加密的本地固态硬盘 (SSD) 块存储。每个本地 SSD 的大小为 375 GB,但您最多可以挂接 24 个本地 SSD 分区,每个实例 9 TB。您也可以将多个本地 SSD 分区格式化并装载到一个逻辑卷中。

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

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

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

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

准备工作

最大 9 TB 容量

您可以创建满足以下条件的实例:

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

此方案适用于所有 N2 预定义和自定义机器类型的实例。为实现最高性能,请选择具有 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. 点击创建以创建实例。
  10. After creating a local SSD, you must format and mount the device before you can use it.

gcloud

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

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

gcloud compute instances create example-instance \
    --machine-type n2-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/n2-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、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 update && sudo apt 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 的阵列中。本示例合并 NVMe 模式下的 8 个本地 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 80 万 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