使用符号链接访问挂接到 Linux 虚拟机的磁盘


将磁盘挂接到使用 Linux 操作系统的虚拟机 (VM) 时,Google Cloud 会自动为该磁盘创建符号链接(符号链接)。如需访问 Linux 虚拟机中的永久性磁盘卷或本地 SSD 磁盘,请使用符号链接。这些符号链接是可预测的,并且在重新启动后保持不变。Google Cloud 会为挂接到 /dev/disk/by-id 中虚拟机的所有磁盘创建符号链接。

本文档介绍如何识别挂接到虚拟机的磁盘的正确符号链接。

限制

如果您将本地 SSD 磁盘挂接到 C3C3D 虚拟机,则可能需要执行额外步骤来为本地 SSD 磁盘创建符号链接。仅当您使用 Google Cloud 提供的以下任何公共映像时,才需要执行这些步骤:

  • SLES 15 SP4 和 SP5
  • SLES 12 SP4

这些额外步骤仅适用于本地 SSD 磁盘:您无需对永久性磁盘卷执行任何操作。

上一个列表中的公共映像没有 /dev/disk/by-id/google-local-nvme-ssd-N 形式的本地 SSD 符号链接。这些映像上仅存在使用设备信息的符号链接,例如 nvme-nvme.1ae0-6e766d655f636172642d7064-6e766d655f636172642d7064-00000001

如需获取这些 Linux 映像的易用符号链接,您必须更新 udev 规则并向实例添加脚本。

如需了解如何更新 udev 规则以支持 C3 和 C3D 上本地 SSD 磁盘的符号链接,请参阅排查 NVMe 磁盘问题

除了使用符号链接外,您还可以使用虚拟机设备名称(例如 /dev/nvme0n1)访问虚拟机上的本地 SSD 磁盘。

在虚拟机创建期间或创建之后,当磁盘挂接到虚拟机时,系统会在 /dev/disk/by-id 中创建符号链接。符号链接名称的创建方式如下:

Persistent Disk 和 Google Cloud Hyperdisk

符号链接是使用以下规则创建的:

  • 如果您在创建磁盘时指定了自定义设备名称:google-DEVICE_NAME
  • 如果您在创建磁盘时未指定自定义设备名称:
    • 启动磁盘:google-VM_NAME
    • 非启动磁盘:google-DISK_NAME

格式化磁盘后,符号链接会附加 -partN,其中 N 是分区编号,例如 google-data-disk-part1

本地 SSD 磁盘数量

本地 SSD 符号链接的格式有所不同,具体取决于磁盘接口。

  • SCSI:符号链接名为 google-local-ssd-N,其中 N 是本地 SSD 磁盘编号(从 0 开始)。
  • NVMe:符号链接名为 google-local-nvme-ssd-N,其中 N 是 SSD 编号(从 0 开始)。

设置本地 SSD 磁盘的格式后,符号链接会附加 -partN,其中 N 是分区编号,例如 google-local-nvme-ssd-0-part1

设备符号链接

Compute Engine 会根据磁盘类型和接口在目录中创建其他符号链接,例如 scsi-0Google_PersistentDisk_DEVICE_NAME。这些链接的作用与上文提到的符号链接的作用相同。

示例 1:挂接了本地 SSD 的 C3 虚拟机

假设您创建了一个具有以下属性的虚拟机:

  • 虚拟机名称:instance-1
  • 机器系列:C3
  • 磁盘接口类型:永久性磁盘和本地 SSD 的 NVMe
  • 额外磁盘:无
  • 已挂接的本地 SSD 磁盘数:2
  • 使用的自定义设备名称:无

Compute Engine 为该虚拟机创建以下符号链接:

ls -l /dev/disk/by-id/google-*
google-instance-1 -> ../../nvme2n1
google-instance-1-part1 -> ../../nvme2n1p1
google-instance-1-part14 -> ../../nvme2n1p14
google-instance-1-part15 -> ../../nvme2n1p15
google-local-nvme-ssd-0 -> ../../nvme0n1
google-local-nvme-ssd-1 -> ../../nvme1n1

在此示例中,永久性磁盘启动磁盘符号链接为 google-instance-1,它基于虚拟机名称。该启动磁盘已格式化,并且装有操作系统。启动磁盘包含 3 个分区:part1、part14 和 part 15。挂接的本地 SSD 磁盘未格式化,因此仅为每个本地 SSD 磁盘创建一个符号链接。

示例 2:挂接了 NVMe 本地 SSD 和额外的永久性磁盘的 N2 虚拟机

假设您创建了一个具有以下属性的虚拟机:

  • 虚拟机名称:instance-2
  • 机器系列:N2
  • 磁盘接口类型:SCSI 用于永久性磁盘,NVMe 用于本地 SSD
  • 额外磁盘:1 个名为 extra-scsi-disk 的永久性磁盘
  • 已挂接的本地 SSD 磁盘数:2
  • 使用的自定义设备名称:无

系统将为该虚拟机创建以下符号链接:

ls -l /dev/disk/by-id/google-*
google-extra-scsi-disk -> ../../sdb
google-instance-2 -> ../../sda
google-instance-2-part1 -> ../../sda1
google-instance-2-part14 -> ../../sda14
google-instance-2-part15 -> ../../sda15
google-local-nvme-ssd-0 -> ../../nvme0n1
google-local-nvme-ssd-0-part1 -> ../../nvme0n1p1
google-local-nvme-ssd-1 -> ../../nvme0n2

在此示例中,永久性磁盘启动磁盘符号链接为 google-instance-2,它基于虚拟机名称。该启动磁盘已格式化,并且装有操作系统映像。启动磁盘包含 3 个分区:part1、part14 和 part 15。第一个本地 SSD 磁盘经过分区,具有一个分区,因此会为该磁盘分区创建一个额外的符号链接。对于添加到虚拟机的额外的永久性磁盘,其符号链接为 google-extra-scsi-disk,它基于磁盘名称。额外的永久性磁盘和第二个本地 SSD 磁盘未格式化,因此仅为这些磁盘列出一个符号链接。

后续步骤