web-dev-qa-db-ja.com

ホストの電源オフまたはログオフ時に自動スナップショットまたは一時停止

私の主な開発環境はUbuntu VMゲストが強力なWindows10 Proホスト(64GB RAM、16コアi9、1TB SSDなど)で実行されています。これは私が持っていた中で最高の開発セットアップです。これまでのところ、1つの例外を除いて、Windows Updateは定期的にマシンを再起動します。これは、デバッグセッションの途中で作業を終了した場合に備えて、VMで行っていたすべての状態が失われることを意味します。

(ホスト)オペレーティングシステムによってVMWareを閉じるように指示されたときに、スナップショットを自動的に取得するようにVMWareを構成するにはどうすればよいですか?

VMWareフォーラムにはさまざまなスクリプト(Powershellのように見えますか?)が浮かんでいるので、APIまたはVMWare Powershell SDKが提示された場合は、おそらく一緒に何かをハックすることができますが、もちろんこれがあればはるかにスムーズになります機能はすでに組み込まれています。私が見つけた唯一の設定は、ゲストの電源がオフになったときにVMWareがスナップショットを処理すること([オプション]-> [スナップショット])を扱っており、ホストの電源が切れたときに何をするかではありません。

モニターをWindowsイベントログのシステム部分に接続することでうまくいくと思いますが、かなり複雑に聞こえます...

関連するスクリプトのヒント

1
oligofren

何度も行ったり来たりした後、VMWareコミュニティフォーラムでユーザーが投稿したソリューションを見つけました。インストールは少し複雑で、いくつかの手動手順(2〜3分で完了)がありますが、見つけて貢献しやすくするために、 GitHubに解決策を掲載 を配置しました。

基本的に、スクリプトをコンピューターにダウンロードし、タスクスケジューラを使用してイベントトリガータスクを作成し、特定のイベントが発生したときにスクリプトを実行するようにタスクを構成します。

イベントのリストは次のとおりです。

Log:System
Source:User32
Event ID:1074
Log:  Microsoft-Windows-Winlogon/Operational
Source:Winlogon
Event ID:7002
Log:  Microsoft-Windows-Eventlog-ForwardingPlugin/Operational
Source:Eventlog-ForwardingPlugin
Event ID:6005
Log:  Microsoft-Windows-Eventlog-ForwardingPlugin/Operational
Source:Eventlog-ForwardingPlugin
Event ID:6006
Log:Security
Source:Microsoft Windows security auditing.
Event ID:4647

スクリプトは次のようになります(2019年9月現在):

@echo off
echo SuspendRunningVMs Command (x64)...
echo Ideas for improving this? Visit https://github.com/fatso83/vmware-auto-suspend

SETLOCAL
REM Specify where vmrun.exe can be located
SET WSPath="C:\Program Files (x86)\VMware\VMware Workstation"

REM Get the list of currently running VMs
%WSPath%\vmrun.exe list | FIND /V "Total running VMs:" > %temp%\vmlist.txt

REM Suspend all running VMs
FOR /F "delims=*" %%v IN (%temp%\vmlist.txt) DO CALL :SuspendVM "%%v"

:WaitLoop
echo Waiting for the VMs to suspend...
REM Pause until no more VMs are running
%WSPath%\vmrun.exe list | FIND "Total running VMs: 0"
IF NOT ERRORLEVEL 1 GOTO End
timeout /t 10 /nobreak
GOTO WaitLoop

:End
echo End of script; all VMs suspended.
ENDLOCAL
GOTO :EOF

REM Suspend a VM
:SuspendVM
REM Suspend any running VM.  Workaround a "vmrun list" quirk that outputs
REM a blank line, by not trying to suspend a blank VM
IF %1x==x GOTO :EOF
echo Suspending VM %1
%WSPath%\vmrun.exe suspend %1
REM Allow some time after suspend call (allow disk to write vmem).
echo Wait a little bit for the VM to commit...
timeout /t 15 /nobreak
GOTO :EOF

REM Resume a VM (not used now, but may have use in future)
:ResumeVM
REM Resume any suspended VM.  Workaround a "vmrun list" quirk that outputs
REM a blank line, by not trying to start a blank VM
IF %1x==x GOTO :EOF
echo Starting VM %1
%WSPath%\vmrun.exe start %1
GOTO :EOF

:EOF

編集:次のイベントが発生したため削除しました someissues

Log:Security
Source:Microsoft Windows security auditing.
Event ID:4634
0
oligofren