使用 Ansible 剧本在 Linux VM 上可靠地定位正确的 Azure 托管磁盘

Reliably targeting correct Azure Managed Disk on a Linux VM using an Ansible playbook

如何使用 Ansible playbook 在 Linux VM 上可靠地分区和挂载 Azure 托管磁盘的文件系统?

我可以使用 azure_rm_manageddisk 创建 Azure 托管磁盘并将其分配给 VM 实例。当我尝试使用磁盘时,我的问题就开始了。我只是不知道如何再可靠地定位正确的托管磁盘进行分区和文件系统安装。

azure_rm_manageddiskazure_rm_manageddisk_info 似乎都不是 return 可以从 OS 端引用的可靠、明确的磁盘 ID。

我认为磁盘在分区之前甚至不会出现在 blkid 上。

Microsoft 已记录

By default when you create a VM, Azure provides you with an OS disk (/dev/sda) and a temporary disk (/dev/sdb). All additional disks you add show up as /dev/sdc, /dev/sdd, /dev/sde and so on.

(来源:https://docs.microsoft.com/en-us/azure/virtual-machines/linux/optimization

但这似乎并不可靠。我想我看到我的 VM 在创建后立即具有与此不同的设置,并且这肯定会在重新启动后发生变化。所以我认为不要相信 /dev/sdc。如果块设备文件不稳定,重新运行 playbook 可能会造成各种破坏。我实际上已经设法让我的根分区在 /media/my_data_disk_mount.

可见

这只是我必须手动处理的事情吗?似乎很奇怪。这是很常见的事情。

例如,还有 /dev/disk/azure/resource,但这似乎也会导致混乱的结果。

(来源:https://docs.microsoft.com/en-us/azure/virtual-machines/troubleshooting/troubleshoot-device-names-problems

也许有 LUN 编号?

根据消息,您想找到正确的磁盘并获取要挂载的 UUID。你认为是对的。你可以通过磁盘的LUN来判断你要的是哪个。您可以使用命令tree /dev/disk/azure,它显示如下:

可以看到磁盘/dev/sdc使用了lun1。您还可以在 Azure 门户中找到哪个磁盘正在使用 lun1。然后你可以在初始化磁盘后使用命令sudo blkid获取UUID: