格式化临时磁盘并将其装载到 Azure Linux VM

适用对象:✔️ Linux VM ✔️ 灵活规模集

本文介绍如何在 Azure Linux 虚拟机(VM)上格式化和装载 临时磁盘 (也称为资源磁盘)。 根据 VM 系列,临时磁盘使用 SCSI 或 NVMe 接口。 临时磁盘不是托管磁盘,也不持久。

将重要数据存储在托管磁盘而不是本地临时磁盘上。 临时磁盘通常用于存储页文件、交换文件或 SQL Server tempdb 文件等项。

先决条件

设置临时磁盘格式之前:

  • 确定正确的磁盘 以避免数据丢失
  • 了解数据在 VM 停止或解除分配后不会保留
  • 使用 root 或 sudo 权限对 VM 具有 SSH 访问权限

格式化磁盘

警告

格式将永久擦除磁盘上的所有数据。 确保使用正确的磁盘,并且其上不存在重要数据。

使用适用于您的发行版的最新版本的 parted。 如果磁盘大小为 2 TB(TiB)或更大,则必须使用 GPT 分区。 如果磁盘大小低于 2 TiB,则可以使用 MBR 或 GPT 分区。

下面的示例使用 parted on /dev/sdb,这通常是 SCSI 临时磁盘出现的位置。 将 sdb 替换为磁盘的正确设备。 我们使用 XFS 文件系统来提高性能。

sudo parted /dev/disk/azure/resource --script mklabel gpt mkpart xfspart xfs 0% 100%  
sudo partprobe /dev/sdb
sudo mkfs.xfs /dev/sdb1

使用 partprobe 实用工具确保内核知道新的分区和文件系统。 如果不使用 partprobe,则 blkid 命令 lsblk 可能不会立即返回新文件系统的 UUID。

装载临时磁盘

现在,创建一个目录来挂载文件系统 mkdir。 对于临时存储,常见的装入点包括/mnt/tmp或特定于应用程序的目录。

sudo mkdir /mnt/temp

使用 mount 装载文件系统。 以下示例将 /dev/sdb1 分区装载到 /mnt/temp 装入点:

sudo mount /dev/sdb1 /mnt/temp

还可以使用 Azure 设备路径:

sudo mount /dev/disk/azure/resource-part1 /mnt/temp

对临时磁盘的 TRIM/UNMAP 支持

本地临时磁盘支持 "TRIM/UNMAP" 操作。 为了获得最佳性能

请在 discard 中使用 /etc/fstab 装载选项。

UUID=33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e   /mnt/temp   xfs   defaults,discard,nobootwait   0   0

或者,定期运行 fstrim

sudo apt install util-linux
sudo fstrim /mnt/temp

Troubleshooting

将数据磁盘添加到 Linux VM 时,如果 LUN 0 中不存在磁盘,则可能会遇到错误。 如果要使用 az 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 内部正确看到磁盘。

注释

这些示例中的 Azure host 值为 5,但这可能因所选存储类型而异。

此磁盘行为不是 Azure 问题,而是 Linux 内核遵循 SCSI 规范的方式。 当 Linux 内核扫描附加设备的 SCSI 总线时,必须在 LUN 0 中找到设备,以便系统继续扫描其他设备。 如下所示:

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