Hyper-V 仮想マシンと実機で同じ SSD から起動する 〜Path through disk の使い方〜

# 要約 (TL ; DR)

Hyper-V の Path through disk を使用すると、仮想マシンと実機の両方で同じ SSD から OS が起動出来るようになり、特に起動周り (grub の設定等) の作業が捗り便利ですよ、という内容です。

誰得かわかりませんが、私は便利に使用しています。

# はじめに

Windows10 / Windows11 の環境で仮想マシンを使用する場合、Windows の標準機能で使える Hyper-V が第一の選択肢になると思います。

Linux に特化した WSL2 とは異なり Hyper-V 仮想マシンは**完全な仮想環境**という特徴があり、Windows10 / Windows11 や Android-x86、各 Linux ディストリビューションや BSD 系の U*ix など、x86 / x64 系であれば殆どの OS を仮想マシンとして使用することができます。

Hyper-V で仮想マシンを作成した場合、ハードドライブ (記憶装置) は vhdx 形式のファイルとなりますが、代わりに PC に物理的に別に接続している HDD や SSD 全体を割り当てる事ができます。このような接続方法を Path through (パススルー) 接続と呼びます。

この記事では、Hyper-V で Path through disk の使用方法と、私が Path through disk を使用する理由、Path through disk のメリット・デメリット等について説明します。

# Hyper-V Path through disk の使用方法

私が Hyper-V Path through disk の使い方の参考にしたサイトは次の二つになります。少し古い記事ですが、現在でも通用する内容です。

https://atmarkit.itmedia.co.jp/ait/articles/1308/09/news100.html

https://www.billionwallet.com/windows10/hyper-v-pass-through-disk.html

詳細な方法と画面はこれらのページを参考にして頂くとして、手順のみ列記します。

- 物理ディスクをオフラインにする
オンラインになっている物理ディスクは選択できないようになっています。「ディスクの管理」から必ずオフラインにします。

- 仮想マシンの設定画面でオフラインにした物理ディスクを選択する
オフラインにすると、仮想マシンの設定画面の「物理ハードディスク」が選択できるようになり、オフラインにした物理ディスクが選択できるようになります。

- 仮想マシンを起動して物理ディスクにアクセスできる事を確認する
仮想マシンの中から、接続した物理ディスクへアクセスできるようになります。

この機能を利用する事により、Windows では通常の方法では認識できない、Linux で使用していた HDD / SSD を読み込む事が可能になります。私は Synology DS-218plus で使用していた HDD の中身を、この方法を使用して確認しました。(将来サルベージが必要になった場合の手順の確認の為)

https://hiro20180901.hatenablog.com/entry/2022/01/01/000000

Windows10 / Windows11 の環境にいながら、ext4 でも btrfs でも xfs でも、mdadm でも LVM でも、Hyper-V にインストールした Linux kernel が対応していれば読み書きが可能です。

SATA 接続だけでなく、USB 接続の HDD / SSD でも Path through 接続は可能です。

WSL2 に mount コマンドが追加されましたので、中身の確認までは WSL2 でも可能かと思います。

https://learn.microsoft.com/ja-jp/windows/wsl/wsl2-mount-disk

# Hyper-V Path through disk にインストールした OS を実機で起動できる

上記に示した二つのページでは、Hyper-V Path through disk で HDD / SSD にインストールした OS を実機で起動できるとは書かれていませんが、試しにやってみたら問題なく起動できました。

私が Hyper-V Path through disk に Ubuntu / Debian をインストールした際の記録が次のリンクになります。

https://hiro20180901.hatenablog.com/entry/2019/02/07/190059

この時は未だ BIOS の環境でしたので Hyper-V 第一世代で仮想マシンを作成しましたが、UEFI の環境では Hyper-V 第二世代で作成すれば大丈夫です(現在もこの方法で起動させています)。Path through disk の接続方法を、第一世代では IDE 接続、第二世代では SCSI 接続にするのが注意点です。

# Hyper-V と実機では環境が違い過ぎるけど本当に起動できるの?

最近の Linux ディストリビューションでは、

- 出来る限り kernel module を作るようになっていて、initramfs に kernel module を入れておくようになっている
- kernel のデバイスの自動認識が上手く動作するようになり、誤認識がほぼ無い

という事もあり、仮想マシンの Hyper-V 環境と実機 PC の環境の違いを上手く吸収してくれるようになりました。

2019年1月から現在まで、Hyper-V Path through disk を使用した環境で使用していますが、特に問題なく動作しています。GUI も、実機では nVidia のドライバが使用されて、Hyper-V 仮想マシンでは hyperv_drm.ko で提供されるフレームバッファが使われます。

<details><summary>hyperv_drm.ko について補足</summary>

Hyper-V のフレームバッファは、通常は hyperv_fb.ko が使われますが、最近の Ubuntu の kernel update で GUI がフリーズする事象が発生しました。hyperv_fb.ko の代わりに hyperv_drm.ko を使用すると回避できます。詳細は以下のページにまとめていますので、興味のある方は参照下さい。



https://hiro20180901.com/2023/06/16/hyper-v-ubuntu-prevent-gnome-freeze/



</details>

:::note info
昔の Linux kernel は PC に合わせて kernel を作り直すのが当たり前でした。ISA カードの誤認識なんてのも日常でしたので「不要なデバイスは外す」というのが身についていました。現在は PCI-E、USB等が主流になった影響もあり、自動認識が上手く行っているのだと思います。
:::

# 何故 Hyper-V Path through disk から実機で起動させたいの？

上のリンクに記載しましたが、発端は「DVD や USB メモリのブートイメージ作るの面倒」という動機でした。折角 ISO イメージが PC 内にあるのに、わざわざ USB メモリ等に書き込んで起動させる一手間を省きたいというのが目的でした。

現在でも Hyper-V Path through disk と実機の両方から起動させている理由は、

- grub 等の起動直後の部分の調整が仮想マシンの方がやりやすい
- 仮想マシンを起動させた Window と、ホスト側の Chrome で調べた内容を並べて表示して作業できる
- アップデート等の時間を要しない作業は、実機を再起動せずに仮想マシンのみで済ませられる
- PC の再起動と比べると仮想マシンの起動の方が圧倒的に速く (特に Hyper-V 仮想マシンの起動・停止は速い)、少しの確認だけの為に PC を再起動しなくてもよい

という所です。事例を二つ紹介します。

Android-x86 を MINISFORUM GK41 で試す際に、Hyper-V Path through disk で SATA SSD に Ubuntu をインストールしてから Android-x86 をインストールしました。Hyper-V 仮想マシンで殆どの設定を終わらせてから実機で起動して確認できるので作業が捗りました。

https://hiro20180901.hatenablog.com/entry/2022/05/29/200000

メモリの不具合を調査する為に Memtest86+ を Ubuntu の grub から起動するようにしました。この際には、Hyper-V Path through disk で Memtest86+ が起動する所までを仮想マシンで確認してから、実機で起動して実際のメモリテストを実行しました。

https://hiro20180901.com/2023/02/26/use-memtest86-ver-6-10-on-ubuntu-22-04-lts-grub/

このように、私の中では Hyper-V Path through disk を使用するのが当たり前となっています。

# メリットとデメリット

https://atmarkit.itmedia.co.jp/ait/articles/1308/09/news100.html

https://www.billionwallet.com/windows10/hyper-v-pass-through-disk.html

先に示した二つのページで言及されているメリットとデメリットをまとめました。

メリット:
- HDD / SSD への高速アクセス
- 大量のデータが含まれているボリュームの高速マウント

デメリット:
- 自動チェックポイントに非対応
- インポート / エクスポートに非対応
- 仮想マシンのポータビリティー低下

実測した事がないので HDD / SSD への高速アクセスは実感できていません。

個人的なメリットとデメリットをまとめてみます。

メリット:
- PC を再起動させなくても、仮想マシンから簡単な操作や確認が可能 (アップデートや設定ファイルの確認)
- grub 等の起動周りの調整が PC を再起動しなくても行えるので作業が捗る
- 起動・停止が Hyper-V 仮想マシンは高速なので、少しの作業を行う場合に短時間で済む

デメリット:
- 仮想 HDD (vhdx) のコピーだけで環境移行できないのは不便、且つバックアップも煩雑
- お金と場所が許せば個々に単独で置きたいというのは正直な気持ち

# 他の仮想環境で同様の機能は?

VMWare については調べていない (あまり興味がない) ので省略。

qemu は raw ディスクイメージを扱えますので、Hyper-V Path through disk と同様の事は可能だと推測しますが、事例が見つかりませんでした。Linux であれば /dev 以下のデバイスを指定すれば良さそうですが、Windows だと出来るのでしょうか…ご存じの方がいらっしゃればご教授願いたいです。

Virtualbox には raw disk と呼ばれる機能があります。ただ、Hyper-V Path through disk と異なり、raw disk 用の vmdk ファイルを作成する必要があり、一手間増えます。また、下記で試して暫く運用してみましたが、途中でファイルシステムが破損する事が度々ありましたので、Hyper-V Path through disk よりも安定性に欠けるとの私の印象です。

https://hiro20180901.hatenablog.com/entry/2020/03/29/070000

# まとめ

ここまでまとめてみても本当に誰得か分かりませんが、Hyper-V で Path through disk を使用して、仮想マシンと実機の両方で、インストールされている OS を起動する方法についてまとめました。

2019年に初めて試して以来、私の中では Hyper-V Path through disk を使用する事は、実機で起動させる前に各種設定を行う事、及びちょっとした作業を再起動せずに行う事の両方に於いて、非常に役立っています。

Hyper-V を使用されている方の参考になれば幸いです。