首页 > 解决方案 > 无法使用 AZ CLI az create vm 命令添加自定义数据

问题描述

我正在运行以下命令在我的资源组上创建一个 VM,但是当我登录时,我没有看到该文件/root/hello.txt

az vm create --name "my_vm" --resource-group "my_rg" --image "centos" --admin-username "centos" --os-disk-size-gb "100" --vnet-name "my_vnet" --subnet "public-4" --ssh-key-values "ssh-rsa ..." --size "Standard_DS1_v2" --nsg "my_nsg" --custom-data '#!/bin/bash
        touch /root/hello.txt
        ' --data-disk-sizes-gb "10"

当然,有些换行符不能很好地粘贴,但这不重要。另外,我不想传递文件路径。我需要传递文本,就像我为 AWS 做的那样。

最终目标是在 bash 脚本下运行以增加 OS 磁盘的分区,这太小了。

#!/bin/sh
fdisk /dev/sda <<EOF
u
p
d
2
n
p
2


w
EOF
touch fdisk.log
reboot
xfs_growfs -d /dev/sda2
touch xfs.log

标签: azureazure-cli

解决方案


首先,自定义数据是可以在配置时注入到 Microsoft Azure 虚拟机中的脚本或其他元数据。目前,Azure 中有预安装和配置的 cloud-init 映像。它可以使用 cloud-init 配置文件或简单的 shell 脚本对配置期间发送的自定义数据进行操作(只要它以 开头#!,cloud-init 就会执行它)。

在 Linux 上,此数据通过ovf-env.xml文件传递到 VM,该文件在配置期间复制到/var/lib/waagent目录中。/var/lib/waagent/CustomData为方便起见,较新版本的 Microsoft Azure Linux 代理也将复制 base64 编码的数据。

阅读Microsoft Azure 上的自定义数据和 Cloud-Init了解更多详细信息。

通常,自定义数据与其他配置配置信息(例如新主机名、用户名、密码、证书和密钥等)一起发送到 VM。在这种情况下,我认为您无法调整 OS 磁盘的分区大小在提供时使用自定义数据。似乎不可能在自定义数据中进行重启和交互式处理脚本。

有关更多参考,您可以阅读

在 Microsoft Azure 中调整 Linux VM 系统磁盘的大小

使用 Azure CLI 在 Linux VM 上扩展虚拟硬盘


推荐阅读