在使用虚拟机的过程中,我们可能需要时不时的解决一些它们的问题。比如RDP文件损坏、虚拟机IP地址配置错误以及网卡被禁用等等。对于Azure中运行的虚拟机而言,往往解决这些问题是比较困难的,因为虚拟机的有些内容对我们是不可见的,比如引导过程和console口等等。但幸运的是,现在我们可以使用Azure VM串行端口控制台来对出问题的虚拟机进行故障排查,从而解决这些棘手的问题。

我们可以使用串行端口控制台以命令行的方式从Azure门户操作Azure虚拟机。该串行连接连接到VM或虚拟机规模集实例的ttyS0或COM1串行端口,提供独立于网络或操作系统状态的访问,也就是说即使虚拟机没有连接Internet,我们也能对其进行访问。

工作方式

我们可以在Windows和Linux虚拟机上使用串行控制台。但是需要注意额是,默认情况下,Azure上较新的Windows Server映像(在2018年2月之后创建)都具有特殊管理控制台(SAC)。Windows服务器版本支持SAC,但是客户端版本不支持SAC(需单独开启)。除此之外,对于较旧的Windows Server映像(在2018年2月之前创建),可以通过Azure门户的运行命令功能自动启用串行控制台。

使用Azure VM串行控制台诊断和排除VM故障_console

使用串行控制台先决条件

要在VM或虚拟机规模集实例上访问串行控制台,将需要以下内容:

  • 必须为VM启用启动诊断
  • VM中必须存在使用密钥身份验证的用户帐户。可以使用VM访问扩展的重置密钥功能创建基于密钥的用户。
  • 访问串行控制台的Azure帐户必须同时具有VM和启动诊断存储帐户的虚拟机贡献者角色
  • 不支持经典部署。您的VM或虚拟机规模集实例必须使用Azure资源管理器部署模型。


启用启动诊断

登录到Azure Portal,找到要启用串行控制台的虚拟机。点击“支持+故障排除”下的启动诊断:
在这里需要注意的是,串行控制台不支持托管存储账户,仅支持自定义存储账户:

使用Azure VM串行控制台诊断和排除VM故障_虚拟机诊断_02

使用串行控制台

点击支持+技术支持下的串行控制台,即可打开串行控制台窗口。当打开串行控制台时,它会显示SAC命令提示符。可以通过SAC提示符对虚拟机执行一些非常有用的操作,例如重新启动或终止进程:

使用Azure VM串行控制台诊断和排除VM故障_虚拟机诊断_03

串行控制台可以与所谓的通道一起使用,在SAC命令提示符下,输入CMD来启动cmd.exe通道,然后输入ch -? 就可以看到通道管理的所有命令:

使用Azure VM串行控制台诊断和排除VM故障_虚拟机诊断_04

如上图可以看到,我们可以使用ESC+TAB在SAC和CMD通道中进行切换。当我们切换到CMD通道时,我们可以使用常规的Windows命令提示符来执行所需的所有操作。但是需要注意的是,要访问到CMD通道的话,我们需要使用虚拟机的管理员账户进行验证。这也就是为什么先觉条件之一是拥有虚拟机管理员的账户名密钥。
当我们以CMD通道登录到Windows以后,我们可以查看相关信息:

使用Azure VM串行控制台诊断和排除VM故障_console_05

对于喜欢使用Powershell的同学,我们可以在CMD命令行下键入Powershell来切换到powershell窗口,切换完以后,就可以使用PowerShell执行各种操作。例如,检查VM中是否启用了RDP等等:

使用Azure VM串行控制台诊断和排除VM故障_串行控制台_06

使用串行控制台进入VM引导菜单

很多情况下,我们希望能够访问VM的启动菜单来进行一些操作,比如以安全模式启动Windows等。现在我们可以通过串行控制台进行一些简单的设置,就可以对其进行访问。
首先我们需要切换到CMD通道,然后运行如下命令:
bcdedit /set {bootmgr} displaybootmenu yes
bcdedit /set {bootmgr} timeout 10
bcdedit /set {bootmgr} bootems yes
注意:命令中的超时时间,定义了我们能够看到启动菜单的时长。

使用Azure VM串行控制台诊断和排除VM故障_虚拟机诊断_07

命令运行完成以后,重启虚拟机。通过串行控制台我们就能够看到虚拟机的启动菜单并且何其进行交互操作:

使用Azure VM串行控制台诊断和排除VM故障_Azure VM_08

通过上面介绍,相信大家都能够认识到,串行控制台是一个非常有用功能。它在我们对Azure VM进行故障排除时,能够提供很多有用的帮助。