Azure VM无法正常启动,一般是系统文件出错,导致无法连接。处理方法是恢复系统文件,恢复的途径主要有下面三个思路:
- 从以前的备份snapshot恢复。
- 从Console进去修改出错的部分。
- 把系统盘mount到其它主机上修改。
对于没有备份的系统,只能使用后两种方式,具体如下:
方法一:进入Console处理
登陆Azure web portal,找到对应的VM,打开诊断模式,重启VM,连接Console。
从Console输出,了解什么原因导致VM启动失败,然后进入系统,以root身份(敲回车键,直接就进入root)修改对应文件,再重启。
【注】2019/5/20 更新,这种办法现在行不通了,root需要密码进入。解决方案Use Serial Console to access GRUB and Single User Mode
方法二:mount系统盘到其它主机
使用Azure CLI 命令行操作。
解除VM与系统盘的关系。
az vm delete -g MyGroup -n MyVM
$ az vm delete -g roy-kafka-rg -n roy-kafka-vm-hdp-01
Are you sure you want to perform this operation? (y/n): y
{
"additionalProperties": {},
"endTime": "2019-02-02T02:28:58.125809+00:00",
"error": null,
"name": "31f5dc00-a550-433f-b4db-4ed8e4a71522",
"startTime": "2019-02-02T02:28:47.610582+00:00",
"status": "Succeeded"
}
[注意] 因为是系统盘,只能通过删除VM的方式,如果是数据盘,可以 detach disk。
把系统盘挂在其它VM上
az vm disk attach -g MyGroup --vm-name AnotherVM --disk Old_VM_OS_disk
[注意]两个VM最好是同样的类型(size,OS)否则磁盘可能挂载不了。
登陆Linux系统,找到新磁盘,挂上去。
- 通过 lsblk 找到新磁盘
- mount 新磁盘
- 修改文件
- umount 磁盘
- 退出
Azure 平台取消disk 与 VM的挂载关系
az vm disk detach -g MyGroup --vm-name AnotherVM -n Old_VM_OS_disk
基于修改后的OS 磁盘,重新创建VM
az vm create -g MyGroup -n MyVM --attach-os-disk Old_VM_OS_disk --os-type linux --size SizeType --nics Old_nic_name
[注意] 额外的两个参数 --size, --nics。size决定了CPU/Memory跟原来一样,nics决定了网卡跟原来一样,也就是子网,ip,nsg跟原来一样。
重新连接VM
VM实际上是新建的,通过ssh连接,发现fingerprint变了,需要修改本地的~/.ssh/known_hosts,再次连接。
拓展
VM 在 OpenStack 环境中连接不上,也是类似的思路。
不同点:
Console 需要输入root 密码,无法登陆。只能通过挂盘的方式来操作。
挂盘操作步骤:
- 找到VM所在的物理机
- 在物理机上安装guestfish
- guestfish 修改虚拟机镜像里面的文件
网友评论