关于 Azure Linux VM 的磁盘和 VHD

就像其他任何计算机一样,Azure 中的虚拟机将磁盘用作存储操作系统、应用程序和数据的位置。 所有 Azure 虚拟机都至少有两个磁盘,即 Linux 操作系统磁盘和临时磁盘。 操作系统磁盘基于映像创建,操作系统磁盘和该映像实际上都存储在 Azure 存储帐户中的虚拟硬盘 (VHD) 内。 虚拟机还可以有一个或多个数据磁盘,而这些磁盘也存储为 VHD。

在本文中,我们将讨论磁盘的不同用法,并讨论可以创建和使用的不同磁盘类型。 本文也适用于 Windows 虚拟机

Note

Azure 具有用于创建和处理资源的两个不同的部署模型:Resource Manager 和经典。 这篇文章介绍了如何使用这两种模型,但 Azure 建议大多数最新部署使用 Resource Manager 模型。

VM 使用的磁盘

让我们来看看 VM 如何使用磁盘。

操作系统磁盘

每个虚拟机都附加了一个操作系统磁盘。 默认情况下,它注册为 SATA 驱动器并标为 /dev/sda。 此磁盘的最大容量为 2048 GB。

临时磁盘

每个 VM 包含一个临时磁盘。 临时磁盘为应用程序和进程提供短期存储存储空间,仅用于存储页面或交换文件等数据。 在维护事件期间或重新部署 VM 时,临时磁盘上的数据可能会丢失。 在 VM 标准重启期间,临时驱动器上的数据应会保留。

在 Linux 虚拟机上,此磁盘通常为 /dev/sdb,并且由 Azure Linux 代理格式化和装入到 /mnt。 临时磁盘的大小因虚拟机的大小而异。 有关详细信息,请参阅 Linux 虚拟机的大小

有关 Azure 如何使用临时磁盘的详细信息,请参阅 Understanding the temporary drive on Azure Virtual Machines

数据磁盘

数据磁盘是附加到虚拟机的 VHD,用于存储应用程序数据或其他需要保留的数据。 数据磁盘注册为 SCSI 驱动器并且带有所选择的字母标记。 每个数据磁盘的最大容量为 4095 GB。 虚拟机的大小决定了可附加的磁盘数目,以及可用来托管磁盘的存储类型。

Note

有关虚拟机容量的详细信息,请参阅 Linux 虚拟机的大小

当你基于映像创建虚拟机时,Azure 会创建操作系统磁盘。 如果使用包含数据磁盘的映像,则 Azure 还会在创建虚拟机时创建数据磁盘。 )否则,需要在创建虚拟机后添加数据磁盘。

随时可以将数据磁盘添加到虚拟机,只需将该磁盘附加 到虚拟机即可。 可以使用已上传或复制到存储帐户的 VHD,也可以让 Azure 创建 VHD。 附加数据磁盘会将 VHD 文件与 VM 关联,方法是在 VHD 上放置“租用”,因此在仍附加 VHD 时无法从存储中删除它。

关于 VHD

Azure 中使用的 VHD 是在 Azure 的标准或高级存储帐户中作为页 Blob 存储的 .vhd 文件。 有关页 blob 的详细信息,请参阅 了解块 blob 和页 blob。 有关高级存储的详细信息,请参阅高性能高级存储和 Azure VM

Azure 支持固定的磁盘 VHD 格式。 固定格式在文件内对逻辑磁盘以线性方式布局,使磁盘偏移量 X 存储在 Blob 偏移量 X 的位置。在 Blob 末尾有一小段脚注,描述了 VHD 的属性。 通常,由于大多数磁盘中都有较大的未使用区域,因此固定格式会浪费空间。 不过,Azure 以稀疏格式存储 .vhd 文件,因此可兼获固定和动态格式磁盘的优点。 有关更多详细信息,请参阅虚拟硬盘入门

Azure 中所有要用作磁盘或映像创建来源的 .vhd 文件都是只读文件。 当你创建磁盘或映像时,Azure 会生成 .vhd 文件的副本。 这些副本可以是只读文件,也可以是读写文件,具体取决于使用 VHD 的方式。

在通过映像创建虚拟机时,Azure 为虚拟机创建磁盘,该磁盘是源 .vhd 文件的副本。 为避免被意外删除,Azure 对任何用于创建映像、操作系统磁盘或数据磁盘的源 .vhd 文件设置了租约。

在删除源 .vhd 文件之前,需要先通过删除磁盘或映像来解除租约。 若要删除当前由虚拟机用作操作系统磁盘的 .vhd 文件,可以通过删除虚拟机并删除所有关联的磁盘,一次性删除虚拟机、操作系统磁盘和源 .vhd 文件。 但是,删除用作数据磁盘来源的 .vhd 文件需要按一定顺序执行几个步骤。 首先从虚拟机分离该磁盘,再删除该磁盘,才能删除 .vhd 文件。

Warning

如果从存储中删除了源 .vhd 文件或删除了存储帐户,Microsoft 则无法为用户恢复数据。

磁盘类型

创建磁盘时,有两种适用于存储的性能层可供选择 -- 标准存储和高级存储。 另外还有两类磁盘 -- 非托管磁盘和托管磁盘 -- 这两类磁盘可以驻留在任一性能层中。

标准存储

标准存储以 HDD 为基础,可以在确保性能的同时提供经济高效的存储。 标准存储可在一个数据中心进行本地复制,也可以通过主要和辅助数据中心实现异地冗余。 有关存储复制的详细信息,请参阅 Azure 存储复制

要详细了解如何将标准存储与 VM 磁盘结合使用,请参阅标准存储和磁盘

高级存储

高级存储以 SSD 为基础,为运行 I/O 密集型工作负荷的 VM 提供高性能、低延迟的磁盘支持。 可将高级存储与 DS、DSv2 或 FS 系列的 Azure VM 配合使用。 有关详细信息,请参阅高级存储

非托管磁盘

非托管磁盘是 VM 一直使用的传统类型的磁盘。 有了这些以后,即可创建自己的存储帐户并在创建磁盘时指定该存储帐户。 必须确保不将太多磁盘置于同一存储帐户中,因为可能会超过存储帐户的可伸缩性目标(例如 20,000 IOPS),导致 VM 数受限。 使用非托管磁盘时,必须确定如何最大程度地使用一个或多个存储帐户,以便充分利用 VM 的性能。

托管磁盘

托管磁盘为用户在后台处理存储帐户的创建/管理,确保用户无需担心存储帐户的可伸缩性限制。 用户只需指定磁盘大小和性能层(标准/高级),Azure 就会自动创建和管理磁盘。 即使是添加磁盘或者扩展和缩减 VM,也无需考虑要使用哪种存储。

还可以按 Azure 区域在一个存储帐户中管理自定义映像,并使用这些映像在同一订阅中创建数百个 VM。 有关管理磁盘的详细信息,请参阅托管磁盘概述

建议为新 VM 使用 Azure 托管磁盘,并将以前的非托管磁盘转换为托管磁盘,以便充分利用托管磁盘中提供的多项功能。

磁盘比较

下表对托管磁盘与非托管磁盘的高级和标准性能层做了比较,方便用户确定要使用哪个层。

Azure 高级磁盘 Azure 标准磁盘
磁盘类型 固态硬盘 (SSD) 机械硬盘 (HDD)
概述 基于 SSD 的高性能、低延迟磁盘支持,适用于运行 IO 密集型工作负荷或托管任务关键型生产环境的 VM 基于 HDD 的经济高效型磁盘支持,适用于开发/测试 VM 方案
方案 生产和性能敏感型工作负荷 开发/测试、非关键、
不经常访问的工作负荷
磁盘大小 P4:32 GB
P6:64 GB
P10:128 GB
P20:512 GB
P30:1024 GB
P40:2048 GB
P50:4095 GB
非托管磁盘:1 GB - 4 TB (4095 GB)

托管磁盘:
S4:32 GB
S6:64 GB
S10:128 GB
S20:512 GB
S30:1024 GB
S40:2048 GB
S50:4095 GB
每个磁盘的最大吞吐量 250 MB/秒 60 MB/秒
每个磁盘的最大 IOPS 7500 IOPS 500 IOPS

故障排除

将数据磁盘添加到 Linux VM 时,如果 LUN 0 位置没有磁盘,则你可能会遇到错误。 如果你使用 azure vm disk attach-new 命令并指定 LUN (--lun) 来手动添加磁盘,而不是让 Azure 平台确定适当的 LUN,则请注意,LUN 0 已经有磁盘或者将有磁盘。

请考虑以下示例,其中显示了 lsscsi 输出的代码片段:

[5:0:0:0]    disk    Msft     Virtual Disk     1.0   /dev/sdc 
[5:0:0:1]    disk    Msft     Virtual Disk     1.0   /dev/sdd 

两个数据磁盘位于 LUN 0 和 LUN 1(lsscsi 中的第一列输出了详细信息 [host:channel:target:lun])。 两个磁盘应该都是可从 VM 内部访问的磁盘。 如果你手动指定了要在 LUN 1 位置添加第一个磁盘并在 LUN 2 位置添加第二个磁盘,则可能无法从 VM 内部正常查看这些磁盘。

Note

在这些示例中,Azure host 值为 5,但此值可能根据所选存储类型的不同而异。

此磁盘行为不是 Azure 的问题,而是因为 Linux 内核遵循了 SCSI 规范。 当 Linux 内核在 SCSI 总线中扫描附加的设备时,必须能够在 LUN 0 位置找到设备,系统才能继续扫描是否有其他设备。 因此:

  • 在添加数据磁盘之后,请查看 lsscsi 的输出,验证 LUN 0 位置是否有磁盘。
  • 如果磁盘未在 VM 内正确显示,请验证 LUN 0 位置是否有磁盘。

后续步骤