【VirtualBox】ネステッドVT-x/AMD-Vがグレーアウトして押せない!を一発で解決するバッチファイル
はじめに
VirtualBoxで仮想マシン(VM)の中にさらに仮想環境を作りたい場合(DockerやWSL2、Androidエミュレータなどを動かす場合)、「ネステッドVT-x/AMD-V」を有効にする必要があります。
しかし、設定画面を開くと**「ネステッド VT-x/AMD-V を有効化」のチェックボックスがグレーアウトしていて押せない**という現象によく遭遇します。
通常、これを解決するにはコマンドプロンプトを開き、長いパスやコマンドを手打ちする必要がありますが、毎回行うのは非常に面倒です。
そこで、ダブルクリックしてVMを選ぶだけで設定を完了できるバッチファイルを作成しました。
事前確認:PCの「仮想化」は有効になっていますか?
このツールを使う前に、お使いのPC(ホストOS)自体で仮想化支援機能が有効になっているかを確認してください。ここが無効になっていると、VirtualBox側で設定してもエラーになります。
確認のためにBIOS画面を開く必要はありません。Windowsの標準機能で確認できます。
-
タスクマネージャーを開きます(
Ctrl+Shift+Escキー)。 - 「パフォーマンス」タブをクリックし、「CPU」を選択します。
- 右下の情報欄にある「仮想化:」という項目を確認してください。
ここが**「有効」になっていれば準備OKです。
もし「無効」**になっている場合は、PCを再起動してBIOS(UEFI)設定画面に入り、Intel VT-x または AMD-V の項目を有効(Enabled)に変更する必要があります。
バッチファイル(ソースコード)
以下のコードをコピーして、メモ帳などに貼り付け、enable_nested_vtx.bat という名前で保存してください。
※拡張子は .txt ではなく .bat に変更してください。
@echo off
setlocal enabledelayedexpansion
:: ==========================================
:: VirtualBox Nested VT-x 有効化ツール
:: ==========================================
:: 作業ディレクトリの設定
set "VBOX_PATH=C:\Program Files\Oracle\VirtualBox"
:: ディレクトリの存在確認
if not exist "%VBOX_PATH%\VBoxManage.exe" (
echo [エラー] VirtualBoxが見つかりません。
echo 以下のパスを確認してください:
echo "%VBOX_PATH%"
pause
exit /b
)
:: VirtualBoxのディレクトリへ移動
cd /d "%VBOX_PATH%"
echo.
echo ========================================================
echo 仮想マシン(VM) リストを取得中...
echo ========================================================
echo.
:: VMリストの取得と表示
set count=0
for /f "delims=" %%i in ('VBoxManage list vms') do (
set /a count+=1
set "vm[!count!]=%%i"
echo [!count!] %%i
)
if !count! equ 0 (
echo [エラー] 仮想マシンが見つかりませんでした。
pause
exit /b
)
echo.
:ASK_INPUT
set /p "selection=処理対象のVM番号を入力してください (1-!count!): "
:: 入力チェック (簡易)
if "!selection!"=="" goto ASK_INPUT
if !selection! lss 1 goto ASK_INPUT
if !selection! gtr !count! goto ASK_INPUT
:: 選択されたVM情報の取得
set "target_vm=!vm[%selection%]!"
:: UUIDの抽出ロジック
:: 出力形式: "VM Name" {UUID}
:: 区切り文字 "{" 以降を取得し、末尾の "}" を削除する処理
for /f "tokens=2 delims={" %%A in ("!target_vm!") do (
set "uuid_chunk=%%A"
)
:: 末尾の "}" を削除してUUIDを確定
set "target_uuid=!uuid_chunk:~0,-1!"
echo.
echo --------------------------------------------------------
echo 対象VM: !target_vm!
echo 対象UUID: !target_uuid!
echo --------------------------------------------------------
echo.
echo ネステッドVT-x (Nested Paging/VT-x) を有効化しています...
:: コマンド実行
VBoxManage modifyvm "!target_uuid!" --nested-hw-virt on
if %errorlevel% equ 0 (
echo.
echo [成功] 設定が完了しました。
) else (
echo.
echo [失敗] エラーが発生しました。VMが停止しているか確認してください。
)
echo.
pause
使い方
- 上記のコードを保存したバッチファイル(
enable_nested_vtx.bat)をダブルクリックして実行します。 - 黒い画面(コマンドプロンプト)が立ち上がり、VMの一覧が表示されます。
- 設定を変更したいVMの番号を入力してEnterキーを押します。
-
[成功] 設定が完了しました。と表示されれば完了です。 - VirtualBoxの「設定」>「システム」>「プロセッサー」を確認すると、チェックボックスにチェックが入っているはずです。
初心者向け:コードの解説
このバッチファイルが裏で何をやっているのか、ポイントを絞って解説します。
1. VirtualBoxのコマンドを使える場所へ移動
通常、VirtualBoxを操作するコマンド(VBoxManage)は、インストールフォルダの中にあります。
set "VBOX_PATH=C:\Program Files\Oracle\VirtualBox"
ここでは、標準的なインストール先へ移動しています。もしインストール先を変更している場合は、ここのパスを書き換える必要があります。
2. VMの一覧を自動取得
for /f "delims=" %%i in ('VBoxManage list vms') do (...)
VBoxManage list vms というコマンドを実行すると、PCにあるVMの一覧が出力されます。それをループ処理で読み込み、画面に見やすく番号付きで表示しています。
3. UUID(識別ID)だけを抜き出す
ここが少し工夫したポイントです。VMリストは "VMの名前" {1234-abcd-...} という形式で出力されます。コマンドで操作するには、VMの名前かUUIDがを指定します。
今回はバッチファイルで扱うので、UUIDのほうが抜き出しやすく簡単にできるので、後半の {} で囲まれた UUID を使用します。
for /f "tokens=2 delims={" %%A in ("!target_vm!") do (...)
set "target_uuid=!uuid_chunk:~0,-1!"
- まず
delims={(区切り文字を{に設定)を使って、名前部分とID部分を分割します。 - これだと
1234-abcd-...}のように末尾に}が残ってしまうため、!uuid_chunk:~0,-1!という記述で「最後の1文字を削除」して、きれいなUUIDを取り出しています。
4. 設定を書き換える
最後に、抽出したUUIDを使って実際に設定を変更します。
VBoxManage modifyvm "!target_uuid!" --nested-hw-virt on
この modifyvm ... --nested-hw-virt on というコマンドが、グレーアウトしている項目を強制的にONにする操作です。
おわりに
GUI(画面操作)で設定できない項目も、CLI(コマンド操作)なら変更できるケースはよくあります。
このバッチファイルを使えば、難しいコマンドを覚えなくても一瞬で設定変更が可能です。