Boot from VHD 機能で Windows Insider Preview を安全に試す

エヌビディアの佐々木です。

[CUDA on WSL 2](https://qiita.com/ksasaki/items/ee864abd74f95fea1efa) に興味はあるものの、Windows Insider Preview のしかも Dev チャネルに参加するのはちょっとなぁ… と二の足を踏んでおられる方も多いのではないでしょうか。仮想マシンで検証できれば良いのですが、Windows 10 の Hyper-V では VM に GPU をアタッチできませんから、物理マシンに直接 Windows Insider Preview をインストールする必要があるというのも気が重くなるポイント。できればメイン環境は安定した Windows を保持しておきたいのが人情です。

PC のディスクに新しいパーティションを切ったり、あるいは新たなディスクを追加して Insider Preview をインストールするのも手ですが、パーティションの指定を間違って虚無を生成したり、うっかりマザボに落っことした M.2 のネジが混沌に飲み込まれて姿を消したりしがちです。

そこで本日紹介したいのが、Boot from VHD 機能によるマルチブートです。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32712/da19c9a2-3499-d1ee-f4c7-f62dcda0523d.png" width="50%"/>

# Boot from VHD

これは、Hyper-V でおなじみのディスクイメージ ファイル (.vhd あるいは .vhdx) を使って、物理マシンを直接起動することができる機能です。登場したのは Windows 7 の頃ですから、もう 10 年選手ですね。その割にあまり使われていない気もしますが。

これを使うと、ディスク上に作った VHD ファイルを、まるで新しい物理ディスクのように扱って、そこに Windows Insider Preview をインストールし、VM ではなく物理マシンを起動できます。パーティションを切り直す必要もありませんし、容量可変タイプの VHD を使えば、ディスク容量も節約できます。

早速やってみましょう。

# VHD への Windows Insider Preview のインストール

前提条件:

- 既に Windows 10 がインストールされている PC がある
 - CUDA on WSL 2 を試すなら、もちろん NVIDIA の GPU も必要です
- ディスクにそれなりの空き容量がある
 - Windows Insider Preview 21286 に CUDA on WSL 2 をセットアップした状態で、私の VHDX ファイルは 32GB のサイズがありました
- 容量 8GB 程度以上の USB ドライブがある
 - Windows Insider Preview 21286 の ISO イメージは 4.3GB 程度あります

制限事項:
Windows Insider Preview をインストールするには、通常、2 通りの方法があります。

- 既存の Windows 10 に、Windows Update からの更新として、Insider Preview をインストールする
- Windows Insider Preview の ISO イメージからインストールメディアを作り、インストールする

VHD をブートディスクとして使う場合には、後者の方法しか使えないようです。何度か試しましたが、前者は「仮想ディスクにはインストールできない」旨のエラーで失敗しました。そのため、この記事では後者の方法を紹介します。

## Windows Insider Preview ISO イメージの入手

[Windows Insider Preview Downloads](https://www.microsoft.com/en-us/software-download/windowsinsiderpreviewiso) ページから、Dev チャネルの ISO イメージを入手してください。2021 年 2 月 8 日現在では、ビルド 21286 が入手可能です。

## 起動可能メディアの作成

[Rufus](https://rufus.ie/) 等を使って、ISO イメージから起動可能な USB ドライブを作ります。

## インストールメディアで起動

作成した USB ドライブを起動デバイスとして選択し、インストーラーを起動します。この際、必ず UEFI モードで起動してください。そうしないと、肝心なところで「次へ」ボタンがクリックできずに詰みます。

下図で、同じ USB Flash Disk のエントリが「UEFI」と「USB」の二つありますが、UEFI のほうを選ぶわけです。(これは一例です。画面は、環境によりそれぞれ異なるでしょう)
<img alt="起動デバイスの選択" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32712/56aaf258-2cc3-3ab6-dbcb-9b900e6ae98a.png" width="50%" />

下図のように、Windows のインストーラーが起動したら、まずは普通に進めてください。
<img alt="インストーラーの初期画面" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32712/82848131-fee2-2620-4ff9-6299f44b7588.png" width="50%" />


インストール場所の選択画面まで来ました。ここに表示されている「ドライブ 0」は、既存の Windows がインストールされているディスクです。間違ってもこれを塗りつぶさないようにしましょう。
<img alt="インストール先の選択画面" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32712/1be17b2d-aafc-9e3c-657e-876619210f0d.png" width="50%" />

しかし、他にディスクはありませんよね。作るのです。仮想ディスクを。ここで。

[Shift] + [F10] でコマンドプロンプトを出してください。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32712/5ef0b078-348e-1d1c-fa2b-13abecd37575.png" width="50%"/>


ここで、diskpart コマンドを使って、既存のディスク上に VHD ファイルを作成します。が、その「既存のディスク」にはこの時点でドライブレターが割り当てられていません。これではアクセスしづらいので、ドライブレターを割り当てます。

まずは ``diskpart`` を起動します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32712/661dbf42-93b3-4e70-3426-83531629e08d.png)
ここからは、diskpart のプロンプトに対する操作です。

ドライブレターは、「ボリューム」に対して割り当てられるので、``list volume`` コマンドでボリュームを一覧します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32712/3a557cb2-8597-ca97-6f63-e58d3cfbc9e9.png)

この例では、容量 511GB の Volume 1 が対象とわかるので、``select volume 1`` コマンドで、これを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32712/b1dbbb41-05b8-9fad-a715-457c63b8bc1d.png)

``assign`` コマンドで、ドライブレターを割り当てます。その後、もう一度 ``list volume`` すると、Volume 1 が C ドライブになったことが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32712/568417a6-04c7-e1a5-5140-6e09d508b351.png)

ここで、一旦 DiskPart を終了しておきましょう。

```
DISKPART> exit

DiskPart を終了しています...

X:\Sources> 
```

## VHD を作成

では、C ドライブに VHD を作っていきましょう。まず、VHD を格納するディレクトリを作っておきます。別にどこでも良いのですが、ここでは C:\VHD とします。

```
X:\Sources> mkdir c:\VHD
```

もう一度、DiskPart を起動します。

```
X:\Sources> diskpart
```

次のコマンドで、仮想ハードディスクを作成します。maximum パラメータで、容量を MB 単位で指定 (131072MB=128GB)、type=expandable で、容量可変タイプを指定しています。これによって、いきなり 128GB の VHDX ファイルが作成されるのではなく、実際の書き込みに従って拡張されていくようになります。

```
DISKPART> create vdisk file=c:\VHD\WIPTest.vhdx  maximum=131072 type=expandable 

  100% 完了しました

DiskPart により、仮想ディスク ファイルが正常に作成されました。
```

この後、アタッチすることで仮想ディスクが使用可能になります。

```
DISKPART> attach vdisk

  100% 完了しました

DiskPart により、仮想ディスク ファイルがアタッチされました。
```

``list disk`` すると、128GB の「ディスク 1」が出現していますね。ここに、Windows Insider Preview をインストールすれば良いわけです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32712/1cc158ea-326e-c0d9-97d7-175085c15d8b.png)

DiskPart を終了し、コマンドプロンプトからも exit します。

```
DISKPART> exit

DiskPart を終了しています...

X:\Sources> exit
```

## VHD へ Windows Insider Preview をインストール

インストール場所の選択画面に戻ったら、「最新の情報に更新」をクリックすれば、先ほど作成した VHD による新しいドライブが現れます。後はここに、いつも通り Windows をインストールするだけです。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32712/0b4b071f-60b9-8096-8b4f-9251b1bca695.png" width="50%"/>

※ なお、インストーラーを UEFI モードで起動しなかった場合、ここで「次へ」がグレーアウトしてクリックできません。

インストール完了後は、起動時に次のような選択画面が表示され、どの Windows を起動するか選べるようになります。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32712/da19c9a2-3499-d1ee-f4c7-f62dcda0523d.png" width="50%"/>

これで、(ディスクの容量さえ十分あれば) いつもの環境を壊さずに、[CUDA on WSL 2](https://qiita.com/ksasaki/items/ee864abd74f95fea1efa) にトライできますね。お楽しみ CUDA さい！

# 関連情報

- [バーチャルハードディスクを起動する: ブートメニューに VHDX または VHD を追加する](https://docs.microsoft.com/ja-jp/windows-hardware/manufacture/desktop/boot-to-vhd--native-boot--add-a-virtual-hard-disk-to-the-boot-menu)
- [待ってました CUDA on WSL 2](https://qiita.com/ksasaki/items/ee864abd74f95fea1efa)