排查在 Azure 中创建新的 Linux 虚拟机时出现的资源管理器部署问题

注意

本文中引用的 CentOS 是 Linux 发行版, (EOL) 将达到生命周期结束。 相应地考虑使用和计划。 有关详细信息,请参阅 CentOS 生命周期终止指南

尝试创建新的 Azure 虚拟机 (VM) 时,遇到的常见错误是预配失败或分配失败。

  • 如果 OS 映像因准备步骤不正确或从门户捕获期间选择了错误的设置而无法加载,则会发生预配失败。
  • 如果群集或区域没有可用的资源或不支持请求的 VM 大小,则会导致分配失败。

如果本文未解决 Azure 问题,请访问 MSDN 和 Stack Overflow 上的 Azure 论坛。 你可以在这些论坛中发布你的问题,也可以在 Twitter 上发布到@AzureSupport。 还可以提交Azure 支持请求。 若要提交支持请求,请在“Azure 支持”页上,选择“获取支持”。

预配故障排除

在创建自定义映像,然后从该映像部署 VM 之后,会发生典型的预配失败情况,然后遇到 40 分钟,其中 VM 状态显示 creating,并看到以下错误消息:

Provisioning state Provisioning failed. 

OS Provisioning for VM 'sentilo' did not finish in the allotted time. 

The VM may still finish provisioning successfully. Please check provisioning state later. 

Also, make sure the image has been properly prepared (generalized). * Instructions for Windows: https://azure.microsoft.com/documentation/articles/virtual-machines-windows-upload-image/ * Instructions for Linux: https://azure.microsoft.com/documentation/articles/virtual-machines-linux-capture-image/.

或:

Deployment failed. Correlation ID: f9dcb33a-4e6e-45c5-9c9d-b29dd73da2e0. {
  "status": "Failed",
  "error": {
    "code": "ResourceDeploymentFailure",
    "message": "The resource operation completed with terminal provisioning state 'Failed'.",
    "details": [
      {
        "code": "OSProvisioningInternalError",
        "message": "OS Provisioning failed for VM 'iWishThisWouldCreateVM01' due to an internal error: The VM encountered an error during deployment. Please visit https://aka.ms/linuxprovisioningerror for more information on remediation."
      }
    ]
  }
}

然后,会看到 VM 状态标记为 failed

为什么会发生预配失败?

预配失败通常有多种原因,例如:

  • 缺少预配/代理配置不正确

    • 你需要确保代理存在并且正常工作,应使用 cloud-init ,或者如果映像不支持此功能,可以查看 这些步骤
  • 映像配置不正确

排查预配失败问题

若要确定预配失败的原因,需要从串行日志开始,可以通过使用 Azure 启动诊断部署 VM 来执行此操作。

需要为具有失败映像的 VM 部署一个启用了启动诊断的新 VM,才能访问串行日志中的预配事件。

# create resource group
resourceGroup=myBrokenImageRG
location=westus2
az group create --name $resourceGroup --location $location

# create storage account

storageacct=mydiagdata$RANDOM

az storage account create \
  --resource-group $resourceGroup \
  --name $storageacct \
  --sku Standard_LRS \
  --location $location

# create VM
vmName=iWishThisWouldCreateVM01
brokenImageName=<ResourceID of brokenImage>
sshPubkeyPath=""

az vm create \
    --resource-group $resourceGroup \
    --name $vmName \
    --image $brokenImageName \
    --admin-username azadmin \
    --ssh-key-value $sshPubkeyPath \
    --boot-diagnostics-storage $storageacct

若要查看串行日志,可以转到门户,或运行以下命令以下载“serialConsoleLogBlobUri”日志:

az vm boot-diagnostics get-boot-log-uris --name $vmName --resource-group $resourceGroup

了解系统事件和预配事件的串行日志

首次创建 VM 时,cloud-init 将启动并尝试装载 ISO、建立网络连接、设置在 VM 创建过程中传递的属性、将临时磁盘 (装载到受支持的 VM 大小) 上,并向 Azure 平台发出初始 OS 配置已完成的信号。

系统事件和密钥信息 串行日志 注释
内核版本和内核版本 [ 0.000000] Linux version 5.4.0-1031-azure (buildd@lcy01-amd64-021) (gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)) #32~18.04.1-Ubuntu SMP Tue Oct 6 10:03:22 UTC 2020 (Ubuntu 5.4.0-1031.32~18.04.1-azure 5.4.65) 显示在串行日志的开头。
内核命令行选项 [ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-5.4.0-1031-azure root=UUID=8c0a4742-2f51-40b4-b659-357cfb0bb2a3 ro console=tty1 console=ttyS0 earlyprintk=ttyS0
[ 0.503399] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-5.4.0-1031-azure root=UUID=8c0a4742-2f51-40b4-b659-357cfb0bb2a3 ro console=tty1 console=ttyS0 earlyprintk=ttyS0
显示在串行日志的开头。 的command line:搜索。
Systemd 版本 [ 8.626739] systemd[1]: systemd 237 running in system mode. (+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD -IDN2 +IDN -PCRE2 default-hierarchy=hybrid) systemd搜索。
已达到系统目标 [ [0;32m OK [0m] Reached target Swap.
[ [0;32m OK [0m] Reached target User and Group Name Lookups.
[ [0;32m OK [0m] Reached target Slices.
[ [0;32m OK [0m] Reached target Local File Systems (Pre).
[ [0;32m OK [0m] Reached target Local Encrypted Volumes.
[ [0;32m OK [0m] Reached target Local File Systems.
[ [0;32m OK [0m] Reached target System Time Synchronized.
[ [0;32m OK [0m] Reached target Network (Pre).
[ [0;32m OK [0m] Reached target Network.
[ [0;32m OK [0m] Reached target Host and Network Name Lookups.
[ [0;32m OK [0m] Reached target Cloud-config availability.
[ [0;32m OK [0m] Reached target System Initialization
[ [0;32m OK [0m] Reached target Timers.
[ [0;32m OK [0m] Reached target Paths.
[ [0;32m OK [0m] Reached target Network is Online.
[ [0;32m OK [0m] Reached target Remote File Systems (Pre).
[ [0;32m OK [0m] Reached target Remote File Systems.
[ [0;32m OK [0m] Reached target Sockets.
[ [0;32m OK [0m] Reached target Basic System.
[ [0;32m OK [0m] Reached target Login Prompts.
Reached target搜索。
跨不同发行版的常见 systemd 网络目标 [ [0;32m OK [0m] Reached target Network (Pre).
[ [0;32m OK [0m] Reached target Network.
[ [0;32m OK [0m] Reached target Network is Online.
Reached target Network搜索。
Ubuntu 和发行版的深入网络状态和网络目标,其中系统网络由 systemd-network管理。 Starting Network Time Synchronization...
[ [0;32m OK [0m] Started Network Time Synchronization.
Starting Initial cloud-init job (pre-networking)...
[ [0;32m OK [0m] Started Initial cloud-init job (pre-networking).
[ [0;32m OK [0m] Reached target Network (Pre).
Starting Network Service...
[ [0;32m OK [0m] Started Network Service.
Starting Wait for Network to be Configured...
Starting Network Name Resolution...
[ [0;32m OK [0m] Started Network Name Resolution.
[ [0;32m OK [0m] Reached target Network.
[ [0;32m OK [0m] Reached target Host and Network Name Lookups.
[ [0;32m OK [0m] Started Wait for Network to be Configured.
[ [0;32m OK [0m] Reached target Network is Online.
Starting Dispatcher daemon for systemd-networkd...
[ [0;32m OK [0m] Started Dispatcher daemon for systemd-networkd.
搜索 或 networknetworkd
RHEL/CentOS 和发行版的深入网络状态和网络目标,其中系统网络由 Network Manager管理。 Starting Read and set NIS domainname from /etc/sysconfig/network...
[ [32m OK [0m] Started Read and set NIS domainname from /etc/sysconfig/network.
Starting Import network configuration from initramfs...
[ [32m OK [0m] Started Import network configuration from initramfs.
Starting Initial cloud-init job (pre-networking)...
[ [32m OK [0m] Started Initial cloud-init job (pre-networking).
[ [32m OK [0m] Reached target Network (Pre).
Starting Network Manager...
[ [32m OK [0m] Started Network Manager.
Starting Network Manager Wait Online...
Starting Network Manager Script Dispatcher Service...
[ [32m OK [0m] Started Network Manager Script Dispatcher Service.
[ [32m OK [0m] Started Network Manager Wait Online.
Starting LSB: Bring up/down networking...
[ [32m OK [0m] Started LSB: Bring up/down networking.
[ [32m OK [0m] Reached target Network.
[ [32m OK [0m] Reached target Network is Online.
搜索 或 networkNetwork Manager
SUSE/SLES 和发行版的深入网络状态和网络目标,其中系统网络由 Wicked管理。 Starting Initial cloud-init job (pre-networking)...
[ [0;32m OK [0m] Reached target Host and Network Name Lookups.
[ [0;32m OK [0m] Started Initial cloud-init job (pre-networking).
[ [0;32m OK [0m] Reached target Network (Pre).
Starting wicked DHCPv6 supplicant service...
Starting wicked DHCPv4 supplicant service...
Starting wicked AutoIPv4 supplicant service...
[ [0;32m OK [0m] Started wicked DHCPv6 supplicant service.
[ [0;32m OK [0m] Started wicked DHCPv4 supplicant service.
[ [0;32m OK [0m] Started wicked AutoIPv4 supplicant service.
Starting wicked network management service daemon...
[ [0;32m OK [0m] Started wicked network management service daemon.
Starting wicked network nanny service...
[ [0;32m OK [0m] Started wicked network nanny service.
Starting wicked managed network interfaces...
[ [0;31m* [0;1;31m* [0m [0;31m* [0m] A start job is running for wicked m…etwork interfaces (22s / no limit)
[K[ [0;31m* [0;1;31m* [0m [0;31m* [0m] A start job is running for wicked m…etwork interfaces (28s / no limit)
[K[ [0;31m* [0;1;31m* [0m [0;31m* [0m] A start job is running for wicked m…etwork interfaces (32s / no limit)
[K[ [0;32m OK [0m] Started wicked managed network interfaces.
[ [0;32m OK [0m] Reached target Network.
[ [0;32m OK [0m] Reached target Network is Online.
搜索 或 networkwicked
启动范围是否足以让 cloud-init 启动? Starting Initial cloud-init job (pre-networking)...
Starting Initial cloud-init job (metadata service crawler)...
Starting Initial cloud-init job搜索。
已到达 Cloud-init 版本和 cloud-init 阶段 [ 22.446387] cloud-init[703]: Cloud-init v. 20.3-2-g371b392c-0ubuntu1~18.04.1 running 'init-local' at Wed, 28 Oct 2020 17:46:30 +0000. Up 21.23 seconds.
[ 28.357120] cloud-init[837]: Cloud-init v. 20.3-2-g371b392c-0ubuntu1~18.04.1 running 'init' at Wed, 28 Oct 2020 17:46:34 +0000. Up 24.52 seconds.
[ 50.421009] cloud-init[1445]: Cloud-init v. 20.3-2-g371b392c-0ubuntu1~18.04.1 running 'modules:config' at Wed, 28 Oct 2020 17:46:57 +0000. Up 48.21 seconds.
[ 51.338792] cloud-init[1541]: Cloud-init v. 20.3-2-g371b392c-0ubuntu1~18.04.1 running 'modules:final' at Wed, 28 Oct 2020 17:47:00 +0000. Up 51.01 seconds.
[ 51.366837] cloud-init[1541]: Cloud-init v. 20.3-2-g371b392c-0ubuntu1~18.04.1 finished at Wed, 28 Oct 2020 17:47:01 +0000. Datasource DataSourceAzure [seed=/dev/sr0]. Up 51.32 seconds
Cloud-init v搜索。
网络接口 (NIC) 、NIC 状态 () 以及 NIC IP 地址。 显示是否已正确配置和分配 NIC IP 地址。 IP 地址分配可以通过 DHCP 动态分配,也可以静态配置。 [ 28.381544] cloud-init[837]: ci-info: ++++++++++++++++++++++++++++++++++++++Net device info+++++++++++++++++++++++++++++++++++++++
[ 28.396781] cloud-init[837]: ci-info: +--------+------+-----------------------------+---------------+--------+-------------------+
[ 28.416501] cloud-init[837]: ci-info: | Device | Up | Address | Mask | Scope | Hw-Address |
[ 28.427493] cloud-init[837]: ci-info: +--------+------+-----------------------------+---------------+--------+-------------------+
[ 28.446544] cloud-init[837]: ci-info: | eth0 | True | 10.0.0.4 | 255.255.255.0 | global | 00:0d:3a:c6:17:d5 |
[ 28.460031] cloud-init[837]: ci-info: | eth0 | True | fe80::20d:3aff:fec6:17d5/64 | . | link | 00:0d:3a:c6:17:d5 |
[ 28.476415] cloud-init[837]: ci-info: | lo | True | 127.0.0.1 | 255.0.0.0 | host | . |
[ 28.487962] cloud-init[837]: ci-info: | lo | True | ::1/128 | . | host | . |
[ 28.498191] cloud-init[837]: ci-info: +--------+------+-----------------------------+---------------+--------+-------------------+
搜索 或 ci-infoNet device info
(IPv4 和 IPv6) 的 IP 路由。 显示各种终结点的 IP 路由,例如 VNet 子网、Azure 终结点 (168.63.129.16) 和 Azure 实例元数据服务器/IMDS 终结点 (169.254.169.254) 。 [ 28.508190] cloud-init[837]: ci-info: ++++++++++++++++++++++++++++++Route IPv4 info+++++++++++++++++++++++++++++++
[ 28.522189] cloud-init[837]: ci-info: +-------+-----------------+----------+-----------------+-----------+-------+
[ 28.531173] cloud-init[837]: ci-info: | Route | Destination | Gateway | Genmask | Interface | Flags |
[ 28.549782] cloud-init[837]: ci-info: +-------+-----------------+----------+-----------------+-----------+-------+
[ 28.562896] cloud-init[837]: ci-info: | 0 | 0.0.0.0 | 10.0.0.1 | 0.0.0.0 | eth0 | UG |
[ 28.571653] cloud-init[837]: ci-info: | 1 | 10.0.0.0 | 0.0.0.0 | 255.255.255.0 | eth0 | U |
[ 28.580192] cloud-init[837]: ci-info: | 2 | 168.63.129.16 | 10.0.0.1 | 255.255.255.255 | eth0 | UGH |
[ 28.587633] cloud-init[837]: ci-info: | 3 | 169.254.169.254 | 10.0.0.1 | 255.255.255.255 | eth0 | UGH |
[ 28.600728] cloud-init[837]: ci-info: +-------+-----------------+----------+-----------------+-----------+-------+
[ 28.611117] cloud-init[837]: ci-info: +++++++++++++++++++Route IPv6 info+++++++++++++++++++
[ 28.619534] cloud-init[837]: ci-info: +-------+-------------+---------+-----------+-------+
[ 28.629292] cloud-init[837]: ci-info: | Route | Destination | Gateway | Interface | Flags |
[ 28.638596] cloud-init[837]: ci-info: +-------+-------------+---------+-----------+-------+
[ 28.647791] cloud-init[837]: ci-info: | 1 | fe80::/64 | :: | eth0 | U |
[ 28.660622] cloud-init[837]: ci-info: | 3 | local | :: | eth0 | U |
[ 28.670776] cloud-init[837]: ci-info: | 4 | ff00::/8 | :: | eth0 | U |
[ 28.691506] cloud-init[837]: ci-info: +-------+-------------+---------+-----------+-------+
、 或 Route IPv6 infoci-infoRoute IPv4 info搜索。
VM 上用户的 SSH 授权密钥。 authorized_keys SSH 中的 文件指定可用于登录到为其配置文件的用户帐户的 SSH 密钥。 ci-info: ++++++++++++++++++++++++++Authorized keys from /home/azureuser/.ssh/authorized_keys for user azureuser+++++++++++++++++++++++++++
ci-info: +---------+-------------------------------------------------------------------------------------------------+---------+---------+
ci-info: | Keytype | Fingerprint (sha256) | Options | Comment |
ci-info: +---------+-------------------------------------------------------------------------------------------------+---------+---------+
ci-info: | ssh-rsa | 88:b0:2a:ce:f5:91:49:a2:01:07:a4:e5:db:b3:8c:3e:7e:1f:52:83:53:3c:83:4f:a3:a7:17:13:65:a3:47:e2 | - | - |
ci-info: +---------+-------------------------------------------------------------------------------------------------+---------+---------+
Authorized keys搜索。
SSH 主机密钥生成。 主机密钥是用于在 SSH 协议中对计算机进行身份验证的加密密钥。 主机密钥是密钥对,通常使用 RSA、DSA 或 ECDSA 算法。 公钥存储在 SSH 客户端上和/或分发到 SSH 客户端,私钥存储在 SSH 服务器上。 Starting OpenSSH Server Key Generation...
[ [32m OK [0m] Started OpenSSH Server Key Generation.
[ 40.437735] cloud-init[837]: Generating public/private rsa key pair.
[ 40.451048] cloud-init[837]: Your identification has been saved in /etc/ssh/ssh_host_rsa_key.
[ 40.473777] cloud-init[837]: Your public key has been saved in /etc/ssh/ssh_host_rsa_key.pub.
[ 40.489730] cloud-init[837]: The key fingerprint is:
[ 40.501705] cloud-init[837]: SHA256:NGxA6sf9EAMtczaFSBSJqiGkafEZuPUykNLxefbXofM root@myVmName
[ 40.686610] cloud-init[837]: Generating public/private dsa key pair.
[ 40.712350] cloud-init[837]: Your identification has been saved in /etc/ssh/ssh_host_dsa_key.
[ 40.721901] cloud-init[837]: Your public key has been saved in /etc/ssh/ssh_host_dsa_key.pub.
[ 40.721966] cloud-init[837]: The key fingerprint is:
[ 40.722011] cloud-init[837]: SHA256:QjoxEw9PNOg0P3LW6wnSZzjsfQQ4vhW8S0dAuNWkWHM root@myVmName
[ 40.722606] cloud-init[837]: Generating public/private ecdsa key pair.
[ 40.722650] cloud-init[837]: Your identification has been saved in /etc/ssh/ssh_host_ecdsa_key.
[ 40.722690] cloud-init[837]: Your public key has been saved in /etc/ssh/ssh_host_ecdsa_key.pub.
[ 40.722734] cloud-init[837]: The key fingerprint is:
[ 40.722774] cloud-init[837]: SHA256:BaFqan71k4blzY8TQrLQOavMWoKHgUDgxEAuB0ouJCo root@myVmName
[ 41.063239] cloud-init[837]: Generating public/private ed25519 key pair.
[ 41.091125] cloud-init[837]: Your identification has been saved in /etc/ssh/ssh_host_ed25519_key.
[ 41.120794] cloud-init[837]: Your public key has been saved in /etc/ssh/ssh_host_ed25519_key.pub.
[ 41.154126] cloud-init[837]: The key fingerprint is:
[ 41.157135] cloud-init[837]: SHA256:KsKfIKjwGpMgbYYved5v5oNE6v6eeUwI4AxeeigXk14 root@myVmName
、、 The key fingerprint is:SHAGenerating public/privateYour identification has been saved in搜索。
转储 ssh 主机密钥指纹。 <14>Oct 28 17:47:00 ec2: #############################################################
<14>Oct 28 17:47:00 ec2: -----BEGIN SSH HOST KEY FINGERPRINTS-----
<14>Oct 28 17:47:00 ec2: 1024 SHA256:QjoxEw9PNOg0P3LW6wnSZzjsfQQ4vhW8S0dAuNWkWHM root@myVmName (DSA)
<14>Oct 28 17:47:00 ec2: 256 SHA256:BaFqan71k4blzY8TQrLQOavMWoKHgUDgxEAuB0ouJCo root@myVmName (ECDSA)
<14>Oct 28 17:47:00 ec2: 256 SHA256:KsKfIKjwGpMgbYYved5v5oNE6v6eeUwI4AxeeigXk14 root@myVmName (ED25519)
<14>Oct 28 17:47:00 ec2: 2048 SHA256:NGxA6sf9EAMtczaFSBSJqiGkafEZuPUykNLxefbXofM root@myVmName (RSA)
<14>Oct 28 17:47:00 ec2: -----END SSH HOST KEY FINGERPRINTS-----
<14>Oct 28 17:47:00 ec2: #############################################################
BEGIN SSH HOST KEY FINGERPRINTSEND SSH HOST KEY FINGERPRINTS的搜索。
转储 ssh 主机密钥。 -----BEGIN SSH HOST KEY KEYS-----
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBFzu1pBMlq3g/8ztkQo+ZukigmLzQ02/ogL7Xe8aKjbuM8q4ibo1kWnXB0UuGkGE0DotVyBQsoyUNorTj96G2Xo= root@myVmName
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIbGOVk/IMfL+RZBDo6YlfbKncVTIBy7wSrqL5ixX6yZ root@myVmName
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDnH5sIIEFi2ne6CMk1jscVQ289i4idOMJt3WwzHR1lOgJf9kPY+WzmFw71Ai9ZEpqSTpYWxgt+z26ujxAE3R1LvOn1QKetlsPLT5FH8oIZESXmYDb/KL/4k81aDelzko1Xipk5SSai8LeX1qglKUEyGevht9S+QQTHK8Ed++UDzNidCk02iAdhpX/0E5d09NE4r+v5wAojOazLnq6JaESYV07SI7rBOGO7hCdSrQwWodYnhyTQRP3FbqjUeNRqBl3uqlH3+rgMAAPsCpToFTCperTRmyBrCbspzpxIpQSEFbf639EL/7Cst/Ff2ND0D0zVAaSdrmFZisYUcO+VRanZ root@myVmName
-----END SSH HOST KEY KEYS-----
BEGIN SSH HOST KEY KEYSEND SSH HOST KEY KEYS的搜索。
SSH 服务器是否已启动? Starting OpenBSD Secure Shell server...
[ [0;32m OK [0m] Started OpenBSD Secure Shell server.
Starting OpenSSH server daemon...
[ [32m OK [0m] Started OpenSSH server daemon.
Starting OpenSSH Daemon...
[ [0;32m OK [0m] Started OpenSSH Daemon.
、 或 OpenSSH DaemonSecure Shell serverOpenSSH server daemon搜索。
是否允许用户会话和用户登录? VM 是否显示用户登录提示? Starting Accounts Service...
Starting Permit User Sessions...
Starting Login Service...
[ [0;32m OK [0m] Started Permit User Sessions.
[ [0;32m OK [0m] Started Login Service.
[ [0;32m OK [0m] Reached target Login Prompts.
[ [0;32m OK [0m] Started Accounts Service.
Ubuntu 18.04.5 LTS myVmName ttyS0
myVmName login:
、、Permit User SessionsLogin ServiceLogin Promptslogin:Accounts Service搜索。
Azure Linux 代理是否已成功启动? [ [0;32m OK [0m] Started Azure Linux Agent.
2020/10/28 17:46:52.082569 INFO Daemon Azure Linux Agent Version:2.2.45
Azure Linux Agent搜索。
从 Azure Linux 代理的角度来看,VM 是否已成功完成预配? 预配成功后,Azure Linux 代理是否启动了 VM 扩展处理程序? Azure Linux 代理仅在检测到 VM 预配成功时启动 VM 扩展处理程序。 2020/10/28 17:46:52.586765 INFO Daemon Finished provisioning INFO Daemon Finished provisioning搜索。
串行日志中是否存在任何错误、故障或异常? 串行日志中 、failerrorwarnexception 的搜索。

常见错误

已列入阻止列表的 UDF 驱动程序

错误:在串行日志中:

[   10.855501] cloud-init[732]: Cloud-init v. 20.4.1-0ubuntu1~18.04.1 running 'init-local' at Thu, 28 Jan 2021 23:43:02 +0000. Up 10.68 seconds.
[   10.869581] cloud-init[732]: 2021-01-28 23:43:03,097 - azure.py[WARNING]: /dev/sr0 was not mountable
[   10.875608] cloud-init[732]: 2021-01-28 23:43:03,106 - azure.py[ERROR]: No Azure metadata found
[   10.885776] cloud-init[732]: 2021-01-28 23:43:03,107 - azure.py[ERROR]: Could not crawl Azure metadata: No Azure metadata found
[   14.634117] cloud-init[732]: 2021-01-28 23:43:06,876 - azure.py[WARNING]: Reported failure to Azure fabric.

在 waagent.log:

"UDF driver Blocklisted 2020/09/11 19:16:40.240016 ERROR Daemon Provisioning failed: [ProtocolError] [CopyOvfEnv] Error mounting dvd: [OSUtilError] Failed to mount dvd deviceInner error: [mount -o ro -t udf,iso9660 /dev/sr0 /mnt/cdrom/secure] returned 32: mount: /mnt/cdrom/secure: wrong fs type, bad option, bad superblock on /dev/sr0, missing codepage or helper program, or other error."

原因:UDF 驱动程序未加载到内核中,这是 VM 预配所必需的,请参阅 映像要求

首次在 Azure 上预配 VM 时,Azure 主机会向 VM 提供“预配 cdrom iso disk”。 此预配磁盘通常通过 /dev/sr0 提供给 VM。 在预配磁盘中,有一个预配清单,其中包含 VM 的预配信息。 VM 内预配代理应装载预配磁盘、读取预配清单并相应地预配 VM

由于预配磁盘是 , cdrom iso disk因此内核需要 Linux UDF 驱动程序才能成功装载此磁盘。 有关 Linux 映像的 Microsoft 文档中引用了这一点。 对于此 VM,日志指示预配磁盘装载失败,从而导致 VM 预配失败。 最有可能的原因是 UDF 驱动程序丢失或受阻。

解决方案:确保 UDF 驱动程序配置为在内核中加载。

阻止 UDF 驱动程序的常见方法是通过 中的 /etc/modprobe.d/配置。 请与客户/映像所有者合作,确保 Linux UDF 驱动程序存在且未受阻止。 请参阅 有关阻止/取消阻止内核驱动程序的文章

VM 标记中的 Unicode 字符问题

错误:在 cloud-init.log:

  File "/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceAzure.py", line 1316, in _get_metadata_from_imds
    except json.decoder.JSONDecodeError:
AttributeError: 'module' object has no attribute 'JSONDecodeError'

原因:这是因为 VM 标记具有非 ascii 字符,并且 cloud-init 的版本早于 20.3。

解决方案:使用或确保映像支持 cloud-init 20.3 或更高版本,或者从 VM 标记中删除非 ascii 字符。

包含 unicode 字符的密码

错误:在 cloud-init.log:

File "/usr/lib/python2.7/site-packages/cloudinit/sources/DataSourceAzure.py", line 1153, in encrypt_pass
    return crypt.crypt(password, salt_id + util.rand_str(strlen=16))
  File "/usr/lib64/python2.7/crypt.py", line 55, in crypt
    return _crypt.crypt(word, salt)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 10-11: ordinal not in range(128)

原因:发生此情况的原因是,提供的密码 (非 ascii) 的字符不受支持。

解决方案:提供仅包含 ascii 字符的密码。

Dhclient 权限

错误:在 cloud-init.log:

Command: ['/var/tmp/cloud-init/cloud-init-dhcp-yd8mvxud/dhclient', '-1', '-v', '-lf', '/var/tmp/cloud-init/cloud-init-dhcp-yd8mvxud/dhcp.leases', '-pf', '/var/tmp/cloud-init/cloud-init-dhcp-yd8mvxud/dhclient.pid', 'eth0', '-sf', '/bin/true']
Exit code: -
Reason: [Errno 13] Permission denied: b'/var/tmp/cloud-init/cloud-init-dhcp-yd8mvxud/dhclient'

原因:旧版 cloud-init (版本 20.3 之前) 在 中/var/tmp复制和执行 dhclient DHCP。 如果 /var/tmp 装载为 noexec (VM 没有执行) ,则 DHCP 将失败, dhclient 因为没有在 中 /var/tmp执行的权限。

Cloud-init 版本 >= 20.3 包含一个修补程序,该 dhclient 修补程序在) 存在权限问题时不复制和执行它 /var/tmp ,从而“按原样”执行 (。

解决方案:对于运行低于版本 20.3 的 cloud-init 的 VM,请配置 VM, /var/tmp 使其不作为 noexec装载。 或者,将 VM 的 cloud-init 包升级到版本 >= 20.3。

获取更多日志

如果发现需要 VM 中的更多日志来了解问题,则可以使用已烘焙到映像中的用户,通过 串行控制台 通过 SSH 连接到 VM。 如果没有用户,则可以使用用户重新创建映像,或使用 AZ VM 修复工具 将无法预配的 VM 的 OS 磁盘装载到另一个 VM。

az vm repair create  \
    --resource-group $resourceGroup \
    --name $vmName \
    --repair-username repairadm \
    --repair-password AnotherPassword123! \
    --repair-vm-name repairVM \
    --verbose

了解cloud-init.log

如果有权访问 cloud-init 日志,请查看 cloud-init 故障排除文档

获取支持

如果已参考指南,但仍无法排查问题,可以创建支持案例。 执行此操作时,请选择正确的产品和支持主题,这样做将吸引正确的支持团队。

选择案例产品:

Product Family: Azure
Product: Virtual Machine Running (Window\Linux)
Support Topic: <COMPLETE>
Support Subtopic: <COMPLETE>

收集活动日志

若要开始故障排除,请收集活动日志以确定与问题关联的错误。 以下链接包含有关要遵循的过程的详细信息。

查看部署操作

查看活动日志以管理 Azure 资源

问题:自定义映像;预配错误

如果将通用 VM 映像作为专用 VM 映像上传或捕获,则会出现预配错误,反之亦然。 前者将导致预配超时错误,后者将导致预配失败。 若要在不出错的情况下部署自定义映像,必须确保映像的类型在捕获过程中不会更改。

下表列出了通用化映像和专用映像的可能组合、遇到的错误类型以及修复错误所需的操作。

下表列出了 Linux 通用化和专用 OS 映像的可能上传和捕获组合。 将处理且没有任何错误的组合由 Y 指示,将引发错误的组合由 N 指示。下表下面提供了你将遇到的不同错误的原因和解决方法。

操作系统 上传规范。 Upload gen. 捕获规范。 捕获 gen。
Linux gen. N1 Y N3 Y
Linux 规范。 Y N2 Y N4

Y: 如果 OS 是通用的 Linux,并且是使用通用设置上传和/或捕获的,则不会出现任何错误。 同样,如果 OS 是 Linux 专用的,并且是使用专用设置上传和/或捕获的,则不会出现任何错误。

上传错误

N1 如果 OS 是通用的 Linux,并且以专用化的形式上传,则会出现预配超时错误,因为 VM 在预配阶段停滞。

N2 如果 OS 是 Linux 专用的,并且以通用形式上传,则会出现预配失败错误,因为新 VM 使用原始计算机名称、用户名和密码运行。

解决方法 - 上传错误

若要解决这两个错误,请上传本地提供的原始 VHD,其设置与 OS (通用化/专用) 相同。 若要以通用方式上传,请记得先运行 -deprovision。

捕获错误

N3 如果 OS 是通用的 Linux,并且它被捕获为专用,则会出现预配超时错误,因为原始 VM 不可用,因为它被标记为通用化。

N4 如果 OS 是 Linux 专用的,并且它被捕获为通用化,则会出现预配失败错误,因为新 VM 使用原始计算机名称、用户名和密码运行。 此外,原始 VM 不可用,因为它被标记为专用。

解决方法 - 捕获错误

若要解决这两个错误,请从门户删除当前映像,并使用与 OS (通用化/专用) 相同的设置 从当前 VHD 中重新捕获它

如果新的 VM 请求固定到群集,该群集不支持所请求的 VM 大小,或者没有可用空间来容纳请求,则会出现此错误。

原因 1

群集不支持请求的 VM 大小。

解决方法 1

  • 使用较小的 VM 大小重试请求。

  • 如果请求的 VM 大小无法更改:

    • 停止可用性集中的所有 VM。 >>单击资源组“资源>可用性集>虚拟机>虚拟机>停止”。
    • 所有 VM 停止后,以所需大小创建新的 VM。
    • 首先启动新的 VM,然后选择每个已停止的 VM,然后单击“ 启动”。

原因 2

群集没有可用资源。

解决方法 2

  • 稍后重试请求。
  • 如果新 VM 可以是其他可用性集的一部分
    • 在同一区域) 的不同可用性集中 (创建新的 VM。
    • 将新 VM 添加到同一虚拟网络。

热门问题

以下首要问题可能有助于解决问题。 若要开始故障排除,请查看以下步骤:

群集不支持请求的 VM 大小

  • 使用较小的 VM 大小重试请求。
  • 如果请求的 VM 大小无法更改:
    • 停止可用性集中的所有 VM。 >虚拟机虚拟机>停止,单击资源组>>资源组“资源可用性集>>”。
    • 所有 VM 停止后,以所需大小创建 VM。
    • 首先启动新的 VM,然后选择每个已停止的 VM,然后单击“启动”。

群集没有可用资源

  • 请稍后重试请求。
  • 如果新 VM 可以是其他可用性集的一部分
    • 在同一区域) 的不同可用性集中 (创建 VM。
    • 将新 VM 添加到同一虚拟网络。

常见问题

如何实现激活 Visual Studio Enterprise (BizSpark) 的每月信用额度

若要激活每月信用额度,请参阅 此文

为什么无法为 Ubuntu NV VM 安装 GPU 驱动程序?

目前,Linux GPU 支持仅适用于运行 Ubuntu Server 16.04 LTS 的 Azure NC VM。 有关详细信息,请参阅 为运行 Linux 的 N 系列 VM 设置 GPU 驱动程序

Linux N 系列 VM 缺少驱动程序

此处提供了为基于 Linux 的 VM 安装驱动程序的说明。

在 N 系列 VM 中找不到 GPU 实例

若要利用 Azure N 系列 VM 的 GPU 功能,必须在部署后在每个 VM 上安装图形驱动程序。 此处提供了驱动程序设置信息。

我的区域是否提供 N 系列 VM?

可以从按区域提供的“产品”表此处的定价中检查可用性。

在调整 VM 大小时,我无法看到所需的 VM 大小系列

VM 运行时,它会部署到物理服务器。 Azure 区域中的物理服务器分组在常见物理硬件群集中。 调整需要将 VM 移动到不同硬件群集的 VM 的大小会有所不同,具体取决于用于部署 VM 的部署模型。

  • 在经典部署模型中部署的 VM,必须删除并重新部署云服务部署,以将 VM 更改为另一个大小系列的大小。

  • 资源管理器部署模型中部署的 VM,必须先停止可用性集中的所有 VM,然后才能更改可用性集中任何 VM 的大小。

在可用性集中部署时,不支持列出的 VM 大小

选择可用性集群集支持的大小。 建议在创建可用性集时选择所需的最大 VM 大小,并将其作为可用性集的首次部署。

Azure 支持哪些 Linux 分发版/版本?

可以在 Linux on Azure-Endorsed Distributions 中找到该列表。

是否可以将现有经典 VM 添加到可用性集?

是。 可以将现有经典 VM 添加到新的或现有的可用性集。 有关详细信息 ,请参阅将现有虚拟机添加到可用性集

重要

经典 VM 将于 2023 年 9 月 1 日停用

如果使用 ASM 中的 IaaS 资源,请在 2023 年 9 月 1 日前完成迁移。 我们建议你尽快进行切换,以利用 Azure 资源管理器 中的许多功能增强功能。

有关详细信息,请参阅在 2023 年 9 月 1 日前将 IaaS 资源迁移到 Azure 资源管理器

后续步骤

联系我们寻求帮助

如果你有任何疑问或需要帮助,请创建支持请求联系 Azure 社区支持。 还可以向 Azure 反馈社区提交产品反馈。