一.背景:
Azure云上由于虚拟机故障导致无法启动,需要进行恢复
二.思路:
1.创建故障虚拟机的磁盘快照(这是出于安全考虑,备份数据);
2.使用故障虚拟机的磁盘快照创建新的虚拟机,称为修复虚拟机;
3.打开cloud shell,安装vm-repair插件;
4.根据修复虚拟机的操作系统,根据故障诊断,选择执行对应的repair脚本,脚本位置:https://github.com/Azure/repair-script-library;
5.卸载原先故障的虚拟机磁盘,将修复好的磁盘调换到故障虚拟机上,修复完成。
简洁办法:
(尝试,一般要根据诊断日志来)数据不太重要,就不做快照了,也不使用救援虚拟机,直接使用脚本进行修复
az vm repair run -g 所属故障虚拟机的资源组名 –n 故障虚拟机的名称 –run-on-repair –run-id win-sfc-sf-corruption –verbose
为什么要创建修复虚拟机?
因为怕数据丢失,在修复虚拟机上修复,不影响故障虚拟机的数据
三.详细步骤:
打开cloud shell命令行窗口
1.安装repair扩展
az extension add -n vm-repair;
2.有两种创建修复虚拟机的方式,一个是在当前云环境中创建,一个是使用云环境中虚拟机中的Hyper-V作为修复虚拟机环境;
以下命令是对故障虚拟机的磁盘进行快照,并创建虚拟机,将快照作为修复虚拟机的数据盘
使用云环境下创建修复虚拟机:az vm repair create -g 故障虚拟机所属资源组名 -n 故障虚拟机名 --repair-username username --repair-password 'password!234' --verbose;
使用云环境下嵌套hyper-v创建修复虚拟机:az vm repair create -g MyResourceGroup -n myVM --repair-username username --repair-password 'password!234' --enable-nested --verbose
3.开启故障诊断:
常见错误解决方案:https://learn.microsoft.com/zh-cn/troubleshoot/azure/virtual-machines/boot-diagnostics
开启诊断:az vm boot-diagnostics enable --name 故障虚拟机的名字 --resource-group 故障虚拟机的资源组
获取诊断日志:az vm boot-diagnostics get-boot-log --name 故障虚拟机的名字 --resource-group 故障虚拟机的资源组
也可以从portal门户查看对应故障虚拟机日志
4.执行修复步骤:
区分Linux和Windows
列出对应脚本ID,az vm repair list-scripts
5.根据诊断日志,执行对应脚本修复:
az vm repair run -g 修复虚拟机的资源组名 –n 修复虚拟机名称 –run-on-repair –run-id win-sfc-sf-corruption –verbose
6.卸载修复虚拟机的磁盘,给故障虚拟机做交换磁盘,重启故障虚拟机