适用对象:✔️ Linux VM ✔️ 灵活规模集
本文介绍如何在 Azure Linux 虚拟机(VM)上格式化、装载和保存托管磁盘。 托管磁盘是附加到 VM 的永久性存储,可以使用 SCSI 或 NVMe 接口,具体取决于 VM 大小。
先决条件
在格式化和装载数据磁盘之前,请确保:
- 确定正确的磁盘 以避免数据丢失
- 对 VM 的 SSH 访问
- 根权限或 sudo 权限
警告
在设置格式之前,请始终验证你是否正在使用正确的磁盘。 格式化错误的磁盘可能会导致数据丢失。
格式化磁盘
使用适用于您的发行版的最新版本的 parted
。 如果磁盘大小为 2 TB(TiB)或更大,请使用 GPT 分区。 如果磁盘大小低于 2 TiB,则可以使用 MBR 或 GPT 分区。
确定正确的磁盘(例如, /dev/nvme0n2
数据磁盘)后,可以设置其格式:
以下示例使用 parted
在 /dev/sdc
,其中第一个数据磁盘通常位于大多数 VM 内。 将sdc
替换为您的磁盘的正确选项。 它还使用 XFS 文件系统格式化磁盘。
sudo parted /dev/sdc --script mklabel gpt mkpart xfspart xfs 0% 100%
sudo partprobe /dev/sdc
sudo mkfs.xfs /dev/sdc1
使用 partprobe 实用工具确保内核知道新的分区和文件系统。 如果不使用partprobe
,则blkid
lsblk
命令不会立即返回新文件系统的 UUID。
装载磁盘
现在,创建一个目录来挂载文件系统 mkdir
。 以下示例在以下位置创建目录 /datadrive
:
sudo mkdir /datadrive
然后,使用mount
装载文件系统。 以下示例将 /dev/sdc1
(for SCSI) 或 /dev/nvme0n2p1
(for NVMe) 分区装载到 /datadrive
装入点:
# Mount the disk identified earlier (replace sdc1 with your identified disk's partition)
sudo mount /dev/sdc1 /datadrive
还可以使用 Azure 设备路径:
sudo mount /dev/disk/azure/scsi1/lun0-part1 /datadrive
保持挂载
若要确保在重新启动后自动重新装载驱动器,请将其添加到 /etc/fstab
文件。
强烈建议使用 /etc/fstab
UUID(通用唯一标识符)来引用驱动器,而不是设备路径(如 /dev/sdc1)。 设备路径不会持久且在重新启动时发生更改。 若要查找新驱动器的 UUID,请使用 blkid
实用工具:
sudo blkid
输出与以下示例类似:
/dev/sda1: LABEL="cloudimg-rootfs" UUID="11111111-1b1b-1c1c-1d1d-1e1e1e1e1e1e" TYPE="ext4" PARTUUID="1a1b1c1d-11aa-1234-1a1a1a1a1a1a"
/dev/sda15: LABEL="UEFI" UUID="BCD7-96A6" TYPE="vfat" PARTUUID="1e1g1cg1h-11aa-1234-1u1u1a1a1u1u"
/dev/sdb1: UUID="22222222-2b2b-2c2c-2d2d-2e2e2e2e2e2e" TYPE="ext4" TYPE="ext4" PARTUUID="1a2b3c4d-01"
/dev/sda14: PARTUUID="2e2g2cg2h-11aa-1234-1u1u1a1a1u1u"
/dev/sdc1: UUID="33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e" TYPE="xfs" PARTLABEL="xfspart" PARTUUID="c1c2c3c4-1234-cdef-asdf3456ghjk"
警告
错误地编辑 /etc/fstab
文件可能会导致系统无法启动。 如果不确定,请参阅分发的文档,了解如何正确编辑此文件。 在编辑之前,还应为 /etc/fstab
文件创建备份。
接下来,在 /etc/fstab
文本编辑器中打开该文件。 使用前面步骤中创建的磁盘的 UUID 值和装入点 /datadrive
,将一行添加到文件的末尾。 使用本文中的示例,新行如下所示:
UUID=33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e /datadrive xfs defaults,nofail 1 2
编辑完文件后,保存并关闭编辑器。
或者,可以运行以下命令将磁盘添加到 /etc/fstab
文件:
# For SCSI disks
UUID=$(sudo blkid -s UUID -o value /dev/sdc1)
echo "UUID=$UUID /datadrive xfs defaults,nofail 1 2" | sudo tee -a /etc/fstab
# For NVMe disks
UID=$(sudo blkid -s UUID -o value /dev/nvme1n1p1)
echo "UUID=$UUID /datadrive xfs defaults,nofail 1 2" | sudo tee -a /etc/fstab
注释
以后在不编辑 fstab 的情况下删除数据磁盘可能会导致 VM 无法启动。 大多数发行版都提供 nofail
和/或 nobootwait
fstab 选项。 这些选项允许系统启动,即使磁盘在启动时无法装载。 有关这些参数的详细信息,请参阅分发的文档。
该 nofail
选项可确保即使文件系统已损坏或磁盘在启动时不存在,VM 也会启动。 如果没有此选项,可能会遇到由于 FSTAB 错误而无法通过 SSH 连接到 Linux VM 的行为
如果修改 fstab 会导致启动失败,则 Azure VM 串行控制台可用于对 VM 的控制台访问。 串行控制台文档中提供了更多详细信息。
在 Azure 中对 Linux 的 TRIM/UNMAP 支持
某些 Linux 内核支持 TRIM/UNMAP 操作,以丢弃磁盘上未使用的块。 此功能主要用于通知 Azure 已删除的页面不再有效且可放弃。 此功能可以节省基于已使用存储量计费的磁盘上的费用,例如非托管标准磁盘和磁盘快照。
在 Linux VM 中启用 TRIM 支持有两种方法。 像往常一样,请参考您的发行版以了解推荐的方法:
• 在 discard
中,例如使用 /etc/fstab
装载选项:
UUID=33333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e /datadrive xfs defaults,discard 1 2
• 在某些情况下,该 discard
选项可能具有性能影响。 或者,可以从命令行手动运行 fstrim
命令,或将其添加到 crontab 以定期运行:
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 中是否存在磁盘。