我已经构建了一个定制的 Debian (Jessie/8) VHD,并尝试在 Azure 上运行它。根据我的研究(以及我读过的 MS 文档),它符合 Azure Linux VHD 要求。我尽量谨慎行事,以减少或消除可能导致问题的原因。以下是有关我的 VHD 的一些一般信息:
- 静态 VHD 文件(一些来源表明支持动态文件,但有人说不支持)。
- VHD 采用 VPC 格式,并与 1 MB 对齐。
- 没有 LVM(同样,一些消息来源说它受支持,而另一些消息来源说它不受支持)。
- 单个可启动的主分区(无交换),使用 VHD 上的所有空间(一些资料指出这是要求)。
- grub 已根据要求进行了调整(根据https://azure.microsoft.com/en-us/documentation/articles/virtual-machines-linux-debian-create-upload-vhd/)
- waagent 已安装、配置并且服务器已“取消配置”。
我无法访问 MS HyperV,因此我仅在 VirtualBox 中本地测试了它。FWIW 它在那里运行良好。
我正在使用 azure-cli(为什么你要用 NodeJS 编写命令行客户端让我大吃一惊,但那是另外一个故事了...!)。我还在使用较新的“资源管理器”模式(而不是旧的“经典”模式)。
上传过程很顺利,我已经解决了一些问题(例如 Azure 删除了 vhd 文件扩展名),但现在我陷入了困境。当我尝试配置服务器时,它需要很长时间(实际上是几个小时)才能完成,然后最终失败。azure-cli 没有给出任何有用的错误消息;只是“配置失败”之类的信息。
我有不少使用 AWS 和 Linux 的经验,但基本没有使用 Azure 的经验。不管怎样,这应该不会这么难吧!?
那么我该如何解决我的问题呢?
Azure 中是否有某个地方(或 azure-cli 的未记录的调试开关)可以让我获取更详细的错误消息?
是否有一个我可以解决的常见问题列表?
任何帮助都将不胜感激!提前致谢。
[更新]以下是我正在使用的命令:
azure storage blob upload <path-to-vhd> <container-name> <vhd-on-azure-name> -k <access-key> -a <storage-account-name>
值得一提的是,使用的存储帐户与虚拟机位于同一资源组中。
那么这是有问题的部分(永远存在并最终失败):
azure vm create -u <admin-username> -p <admin-password> --location "AustraliaEast" -g "<my-resource-group>" "<vm-name>" -Q <full-vhd-urn> -f <nic-name> -F <vnet-name> -P 10.0.0.0/8 -j <subnet-name> -k 10.0.0.0/24 -o <storage-account-name> -y linux
nic、vnet 和子网最初是由第一个失败的 vm-create 自动创建的。从那时起,我就不再使用自动创建了,但为了避免污染 Azure 帐户,我只是记下了它们的名称以供重复使用。
其他附加信息:
- 图像最初在 Debian Jessie 上构建为 raw(然后是 vhd)。
为了测试 QEMU 的较新版本,我使用以下命令在 Arch Linux 上使用 QEMU 2.7 调整了原始 raw 文件的大小并将其转换为 vhd:
qemu-img convert -f raw -O vpc -o subformat=fixed
还测试了使用和不使用“force_size”来保持一致性。
- 所有尝试在 VirtualBox 中都可以正常进行,但使用 Azure 时却全部失败。
[另一个更新] 感谢@Sam 建议尝试使用“经典”。经典界面似乎有更好的错误报告。它说 VHD 有问题(尽管没有给出任何线索)。我会尝试对其进行进一步调整,如果发现任何问题,我会回复。谢谢大家。