今回は外付けSSDからUSB経由でWindowsを起動可能なブートメディアを作成していきます。
外付けSSDからUSB経由でWindowsを起動可能なブートメディアの作成方法についてググると非常に多くの情報がでてきます。
Windowsマシンでは外付けSSDからのブートは実現できないとか、有料アプリを使えば実現できるとか、Macなら可能とか、ほんとに色々な情報があり混乱しました。
結論から言って、本記事執筆時点で最新のWindows10 21H2のバージョンでも外付けSSDからUSB経由で起動可能なブートメディアを作成することはできます。
以下の記事の手順でブート可能なSSDを作成することができました。
もくじ
- まとめ
- 追記:USB 起動する Windows のエディションを指定する方法
- 追記:ストレージの EFI パーティションを OS 側から削除する方法
- 追記:ディスクマネージャからプライマリパーティションが作成できない場合の対処
- 追記:USBPcapをインストールするとOSが起動しなくなる問題
USBからブート可能なSSDを作成する
今回実践した手順は、失敗すると最悪の場合PCのストレージのデータがすべて消去されます。
そのため、実施する際は細心の注意を払うとともに、自己責任でお願いいたします。
僕は万が一にもメインPCのデータが飛ぶのは嫌だったので、サブのノートPCでブートメディアを作成しました。
作成した環境はWindows 11 21H2です。
インストールするディスクを初期化する
Windowsの「ディスクの管理」ツールを使用して、ブートメディアに使用するSSDを以下の2つのボリュームに分割します。
-
システムパーティション
- ドライブレター:L
- サイズ :600MB
- ファイルシステム:FAT32
-
ボリュームパーティション
- ドライブレター:M
- サイズ:残りの空き領域すべて
- ファイルシステム:NTFS
ここで初期化するディスクを間違えるとデータが消えてしまうので注意です。
特にCドライブとして使用しているディスクを消さないように注意しましょう。
ついでに今回展開するWindowsのISOファイルもダブルクリックしてマウントしておきましょう。
今回はドライブレター:Fとしてマウントされました。
初期化が完了した結果はこんな感じになります。
ここにブート可能なOSを展開していきます。
diskparでシステムパーティションを「active」にマークする
通常のWindowsのインストーラを使用してインストールする場合、残念ながらUSB経由で接続したディスクへのインストールはサポートされていません。
そのため、ブート構成を自分で作成する必要があります。
以下のコマンドを管理者権限のPowershellで順に実行していきます。
環境によってディスクやパーティションの番号が異なるのでコピペしないように注意してください。
diskpart
list disk
// ブートメディアに使用するディスクの番号を指定
select disk 2
list partition
// システムパーティション用に600MBで初期化したパーティションの番号を選択
select partition 1
// activeとしてマークして終了
active
exit
実行結果はこんな感じになります。
diskparとは
diskparコマンドインタプリタは、コンピュータ上のドライブを管理するツールです。
今回は、インストール対象のディスクにフォーカスした上でパーティションを列挙し、600MBのサイズで初期化した方のパーティションを「active」としてマークしました。
このパーティションを「active」としてマークすることで、BIOSまたはEFIに対してこのパーティションがOSのスタートアップファイルを含むことを通知することができるようになります。
続いて、この領域にOSのスタートアップファイルを配置していきます。
DISMとBCDBootでISOイメージをディスクに展開する
続いて、ISOファイルをSSDに展開していきます。
以下のコマンドを管理者権限のPowershellで実行します。
こちらもドライブレターが僕の環境と異なる場合はコピペしないようにしてください。
完了まで結構時間がかかりました。
# F は ISO をマウントしたドライブ、M はボリュームパーティションのドライブ
# /Index=1 の値は使用する Windows のエディションによって変更する
Dism /Apply-Image /ImageFile:F:\sources\install.wim /Index=1 /ApplyDir:M:\
# 日本語版を使用する場合は /l ja-JP を指定
M:\Windows\System32\bcdboot M:\Windows /l en-US /s L: /f ALL
実行結果はこんな感じでした。
DISMとは
DISMは、イメージの展開と管理を行うことができるツールです。
DISMによってWindowsイメージや仮想ハードディスクが作成されます。
今回はApply-Image
オプションを使用しています。
これは、指定した領域にWindowsイメージを配置するオプションです。
参考:Expand-WindowsImage (DISM) | Microsoft Docs
今回はImageFile
オプションの引数にISO内の\sources\install.wim
を与え、先ほど初期化したディスクのフリー領域に配置しています。
Index
オプションは1を指定しており、install.wim
のインデックス1にあるデータを配置することを指定しています。
BCDBootでシステムパーティションを作成する
最後にBCDBoot
を実行してシステムパーティションを作成します。
BCDBoot
の第1引数にはブート環境のソースとして使用するWindowsフォルダを指定します。
今回は先ほどDISMで配置したイメージのWindowsフォルダを指定しています。
/l
はロケール指定のオプションです。今回はja-JP
を指定しています。
/s <ボリューム文字>
のオプションではシステムパーティションに使用するパーティションのドライブ文字を指定します。
ここでは、システムパーティション用に600MBで初期化したパーティションを指定します。
/f
オプションはファームウェアの指定です。
今回のようにALL
を入れておけばBIOSにもUEFIにも対応させることができます。
参考:BCDBoot のコマンド ライン オプション | Microsoft Docs
まとめ
これでUSBからブート可能なWindowsのディスクを作成することができました。
USB 3.1 Gen1でPCとSSDを接続して起動してみましたが、十分に速度が出ているので、体感的には内臓のSSDにインストールされているOSとそこまで遜色ない使用感です。
ベンチでこれだけ出てれば上出来ですね。普通に快適に使えます。
今までツール任せにしていたブート構成を手動で作成してみたので結構勉強になりました。
追記:USB 起動する Windows のエディションを指定する方法
上記の手順で、複数のエディションを含む ISO を使用してブートメディアを作成する場合、Index の値を指定することで起動する Windows のエディションを指定することができます。
ISO に含まれる install.wim から、使用したい OS のエディションのインデックスを取得するには管理者権限で以下のコマンドを実行します。
# D:\sources\install.wim はマウントした ISO のドライブ
Dism /Get-ImageInfo /ImageFile:D:\sources\install.wim
Details for image : D:\sources\install.wim
Index : 1
Name : Windows 10 Home
Description : Windows 10 Home
Size : 14,732,719,469 bytes
...
Index : 6
Name : Windows 10 Pro
Description : Windows 10 Pro
Size : 15,010,424,921 bytes
ちなみに、指定した Index のエディションのみを含む install.wim を作成する場合は、以下のコマンドでエクスポートを行います。
Dism /Export-Image /SourceImageFile:"D:\sources\install.wim" /SourceIndex:6 /DestinationImageFile:"C:\Users\kash1064\Downloads\install.wim"
追記:ストレージの EFI パーティションを OS 側から削除する方法
インストールメディアなどから OS のインストールを行った場合、Windows のディスクマネージャからはシステムパーティションの削除やフォーマットができません。
その場合に、パーティションを削除して新しいシステムドライブとして使用するために diskpart を使用します。
# 対象のディスクの ID を特定します
DISKPART> list disk
Disk ### Status Size Free Dyn Gpt
-------- ------------- ------- ------- --- ---
Disk 0 Online 465 GB 1024 KB *
Disk 2 Online 238 GB 1024 KB *
# 削除したいディスクを設定し、パーティションを確認します
DISKPART> select disk 2
DISKPART> list partition
Partition ### Type Size Offset
------------- ---------------- ------- -------
Partition 1 System 100 MB 1024 KB
Partition 2 Reserved 16 MB 101 MB
Partition 3 Primary 237 GB 117 MB
Partition 4 Recovery 552 MB 237 GB
# 削除するパーティションの ID を指定し、delete コマンドで削除を行います
DISKPART> select partition 1
DISKPART> delete partition override
DiskPart successfully deleted the selected partition.
# 他のパーティションも同じ要領で削除します
DISKPART> select partition 2
DISKPART> delete partition override
DiskPart successfully deleted the selected partition.
# 削除後にパーティションを確認すると、システムパーティションが削除されていることがわかります
DISKPART> list partition
Partition ### Type Size Offset
------------- ---------------- ------- -------
Partition 3 Primary 237 GB 117 MB
Partition 4 Recovery 552 MB 237 GB
上記の手順を実施することで、ディスクマネージャからもシステムパーティションが削除されていることを確認できます。
追記:ディスクマネージャからプライマリパーティションが作成できない場合の対処
ディスクマネージャからパーティションを作成してもプライマリにならない場合、diskpart からパーティションを作成することができます。
# 対象のディスクの ID を特定します
DISKPART> list disk
Disk ### Status Size Free Dyn Gpt
-------- ------------- ------- ------- --- ---
Disk 0 Online 465 GB 1024 KB *
Disk 2 Online 238 GB 1024 KB *
# 対象のディスクを選択して clean します。
DISKPART> select disk 2
clean
DISKPART> create partition primary size=600 offset=0
DISKPART> list partition
Partition ### Type Size Offset
------------- ---------------- ------- -------
* Partition 1 Primary 600 MB 1024 KB
DISKPART> select partition 1
DISKPART> format fs=fat32
DISKPART> active
追記:USBPcapをインストールするとOSが起動しなくなる問題
USB接続したSSDにUSBPcap
をインストールして再起動すると、OS起動時に「自動修復中」の表示になり起動しない問題が発生しました。
残念ながら、外部接続したSSDからインストール時に作成された以下のフォルダとレジストリをすべて削除してみたものの、起動に失敗する問題は解消されませんでした。
- %ProgramFiles%\USBPcap
- C:\Windows\System32\drivers\USBPcap.sys
- HKLM\System\CurrentControlSet\Services\USBPcap
- HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\USBPcap
確認した限りでは上記を削除すればUSBPcapのインストール前の状態に戻せそうな気がするのですが、いまいち原因がわかりませんね。
システムファイルを書き換えてるとは考えにくいですが、現状この問題が発生した場合は起動SSDの再セットアップ以外に解消方法が見つかりませんでした。