WindowsおよびWindows ServerのHyper-Vでは、仮想マシンを起動するために、仮想マシンに割り当てられた「仮想ハードディスク」(VHD、VHDX)に特殊なアクセス許可設定が必要です。その必須のアクセス許可、人が扱うのは少し厄介な代物です。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
仮想マシンのIDEコントローラーまたはSCSIコントローラーに接続される「仮想ハードディスク」(.vhd、.avhd、vhdx、.avhdx)には、特殊なアクセス許可が設定されています。
例えば、ある仮想マシンに割り当てられた既存の仮想ハードディスクと、同じファイル名の仮想ハードディスクを別に作成し、仮想ハードディスクのファイルを入れ替えたとしましょう。仮想マシンの設定としては、同じ仮想ハードディスクのパスを参照しているため、変更はないはずです。しかし、仮想マシンを起動しようとすると、「'<仮想ハードディスクのパス>'を開くためのアクセス許可がありません。エラー:'アクセスが拒否されました'。」というエラーメッセージが表示され、失敗します(画面1、画面2)。
仮想ハードディスクを入れ替える前のもともとの仮想ハードディスクに設定されていた「アクセス許可」(アクセス制御リスト、ACL)を確認してみると、一般的ではないユーザー名/グループ名に対する「読み取り」と「書き込み」の「アクセス許可設定」(アクセス制御エントリ、ACE)が2つ存在することが分かります(画面3)。
1つ目のアカウント「不明なアカウント(S-1-15-3-1024-2268835264-3721307629-241982045-173645152-1490879176-104643441-2915960892-1612460704)」は、怪しげに見えますが、「仮想マシンワーカープロセス(vmwp.exe)」に関連する「ケーパビリティ(機能)SID」と呼ばれるもので、フレンドリ名が存在しないため、「不明なアカウント」として表示されます。こちらは仮想マシンの起動には必須ではありませんが、既定で設定されます。
もう1つのアカウント「38073C6B-4CCC-B0A0-1E0D3C8383B2」の方は、仮想マシンの「仮想マシンID」であり、以下のサポート情報にあるように、こちらのアクセス許可は仮想マシンの起動に必須となっています。仮想マシンの仮想マシンIDは、「Get-VM」コマンドレットで確認できます。これらのアクセス許可設定の詳細は、「CACLS」コマンドでも確認できます(前出の画面3)。
仮想マシンIDに対するアクセス許可は必須ですが、エクスプローラーのUIから設定することはできません。仮想マシンIDを入力したとしても、一致するオブジェクトは見つかりません(画面4)。また、たとえオブジェクトが見つかったとしても、前出の画面3のCACLSコマンドが示すアクセス許可を適切に設定することはできそうもありません。
では、どうすればよいのでしょうか。最も簡単な方法は、「Hyper-Vマネージャー」で仮想マシンの設定を開き、仮想ハードディスクを再割り当て(別の仮想ハードディスクを選択し、その後、目的の仮想ハードディスクに再設定、または現在の割り当てを削除して改めて追加)することです(画面5)。これで、「不明なアカウント」と仮想マシンIDのアクセス許可が適切に設定されます。PowerShellの「Add/Set-VMHardDiskDrive」コマンドレットで再設定した場合も、同様に適切なアクセス許可が設定されます。
仮想マシンIDに対するアクセス許可については、以下のPowerShell Galleryで公開されている「Restore-VMPermission」を使用して復元することもできます(画面6)。
PS> Install-Script -Name Restore-VMPermission PS> Restore-VMPermission -VM <仮想マシン名>
岩手県花巻市在住。Microsoft MVP 2008 to 2023(Cloud and Datacenter Management)。SIer、IT出版社、中堅企業のシステム管理者を経て、フリーのテクニカルライターに。Microsoft製品、テクノロジーを中心に、IT雑誌、Webサイトへの記事の寄稿、ドキュメント作成、事例取材などを手掛ける。個人ブログは『山市良のえぬなんとかわーるど』。近著は『Windows版Docker&Windowsコンテナーテクノロジ入門』(日経BP社)、『ITプロフェッショナル向けWindowsトラブル解決 コマンド&テクニック集』(日経BP社)。
Copyright © ITmedia, Inc. All Rights Reserved.