有时候我们经常需要调试有性能问题的Windows VM,那么手动使用NMI进行Crash然后收取Dump进行分析的话是必不可少的步骤,或者是使用Hyper-V的CheckPoint(检查点功能)来获取Dump。然而在Nested Hyper-V中这些手段将受到限制,CheckPoint的方法将不可用,因此触发NMI将成为唯一的选项。
因此,我创建了以下Windows批处理以便简化操作流程。
[本文为AndyX.Net原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明!]
[本人中所有涉及到的实验均在 Azure VM 中进行配置,同样适用于其他云环境的虚拟机]
[如果本文章帮助到了您,请Feel free在文章末尾“打赏”作者,感谢!]
使用前提
在GuestOS中需要手动配置Full Memorydump(完全内存转储)以及NMI触发器:
REM For full DMP REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\CrashControl" /v DumpFile /t REG_EXPAND_SZ /d "%SystemRoot%\MEMORY.DMP" /f REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\CrashControl" /v CrashDumpEnabled /t REG_DWORD /d 1 /f REM For NMI trigger REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\CrashControl" /v NMICrashDump /t REG_DWORD /d 1 /f REM Restart the VM so the changes takes a place shutdown /r /t 0 /f
如果GuestOS无法操作,你依然可以尝试挂载注册表的方法手动修改GuestOS中的注册表键值。
批处理脚本
@cls @echo off REM Auto Admin - Code Start %1 %2 ver|find "5.">nul&&goto :Admin @mshta vbscript:createobject("shell.application").shellexecute("%~s0","goto :Admin","","runas",1)(window.close)&goto :eof :Admin REM Auto Admin - Code End @Title Nested Hyper-V NMI trigger - Created by AndyX [Azure VM] 2020.09.21 @color b @echo Nested Hyper-V NMI trigger - Created by AndyX [Azure VM] 2020.09.21 @ping -n 2 127.0.0.1 > nul @cls @echo Please make sure the Hyper-V VM is running..... @echo. @echo Checking all VM status: @PowerShell -Command "& {get-vm | Select-Object name,state,uptime }" @ping -n 2 127.0.0.1 > nul @set /p vmname="Please Type the Hyper-V VM name: " & echo. @echo. @PowerShell -Command "& {debug-vm '%vmname%' -InjectNonMaskableInterrupt -Force}" > nul @pause REM -------------------------------------------------------------------------------------- REM This script is used to easy troubleshooting of WindowsOS in nested Hyper-V environment REM My Website: http://andyx.net/ REM --------------------------------------------------------------------------------------
将以上脚本保存至txt文档,并重命名扩展名为“OneKeyDump for Nested Hyper-V.cmd”。
使用方法
将该批处理放置在Host/Rescue VM上
保持Nexted Hyper-V开启,运行此脚本,复制VM在Nested Hyper-V的名称,并准备复现问题
一旦问题复现,直接敲回车键即可看到Bugcheck触发,然后系统会自动收集完全内存转储
参考文献
Debug-VM (Hyper-V) | Microsoft Docs
(全文完)
文章撰写:作者AndyX,来自AndyX.Net。
文章遵循 CC 4.0 BY-SA 版权协议,若需转载本文,请标注来源与链接:原创内容AndyX.Net版权所有
本文地址:【原创文章】分享用于内嵌式Nested Hyper-V虚拟机的NMI触发脚本,以便收集完全内存转储 – AndyX.Net – 安迪克斯