All Articles

DISMとBCDBootでUSB接続した外付けSSDから起動可能なWindowsメディアを作成する

今回は外付けSSDからUSB経由でWindowsを起動可能なブートメディアを作成していきます。

外付けSSDからUSB経由でWindowsを起動可能なブートメディアの作成方法についてググると非常に多くの情報がでてきます。

Windowsマシンでは外付けSSDからのブートは実現できないとか、有料アプリを使えば実現できるとか、Macなら可能とか、ほんとに色々な情報があり混乱しました。

結論から言って、本記事執筆時点で最新のWindows10 21H2のバージョンでも外付けSSDからUSB経由で起動可能なブートメディアを作成することはできます。

以下の記事の手順でブート可能なSSDを作成することができました。

参考:USBの外付けSSD/HDDからWindows10を起動する方法(無料/手動でWindows to GoをSSD/HDDにインストールする方法) | 西村誠一のパソコン無料サポートとWindowsフリーソフトblog

もくじ

USBからブート可能なSSDを作成する

今回実践した手順は、失敗すると最悪の場合PCのストレージのデータがすべて消去されます。

そのため、実施する際は細心の注意を払うとともに、自己責任でお願いいたします。

僕は万が一にもメインPCのデータが飛ぶのは嫌だったので、サブのノートPCでブートメディアを作成しました。

作成した環境はWindows 11 21H2です。

image-20220303214811571

インストールするディスクを初期化する

Windowsの「ディスクの管理」ツールを使用して、ブートメディアに使用するSSDを以下の2つのボリュームに分割します。

  • システムパーティション

    • ドライブレター:L
    • サイズ :600MB
    • ファイルシステム:FAT32
  • ボリュームパーティション

    • ドライブレター:M
    • サイズ:残りの空き領域すべて
    • ファイルシステム:NTFS

ここで初期化するディスクを間違えるとデータが消えてしまうので注意です。

特にCドライブとして使用しているディスクを消さないように注意しましょう。

ついでに今回展開するWindowsのISOファイルもダブルクリックしてマウントしておきましょう。

今回はドライブレター:Fとしてマウントされました。

初期化が完了した結果はこんな感じになります。

image-20220303231738698

ここにブート可能なOSを展開していきます。

diskparでシステムパーティションを「active」にマークする

通常のWindowsのインストーラを使用してインストールする場合、残念ながらUSB経由で接続したディスクへのインストールはサポートされていません。

そのため、ブート構成を自分で作成する必要があります。

以下のコマンドを管理者権限のPowershellで順に実行していきます。

環境によってディスクやパーティションの番号が異なるのでコピペしないように注意してください。

diskpart
list disk
// ブートメディアに使用するディスクの番号を指定
select disk 2

list partition
// システムパーティション用に600MBで初期化したパーティションの番号を選択
select partition 1

// activeとしてマークして終了
active
exit

実行結果はこんな感じになります。

image-20220303232019097

diskparとは

diskparコマンドインタプリタは、コンピュータ上のドライブを管理するツールです。

今回は、インストール対象のディスクにフォーカスした上でパーティションを列挙し、600MBのサイズで初期化した方のパーティションを「active」としてマークしました。

参考:diskpart | Microsoft Docs

このパーティションを「active」としてマークすることで、BIOSまたはEFIに対してこのパーティションがOSのスタートアップファイルを含むことを通知することができるようになります。

続いて、この領域にOSのスタートアップファイルを配置していきます。

参考:active | Microsoft Docs

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

実行結果はこんな感じでした。

image-20220303233033290

DISMとは

DISMは、イメージの展開と管理を行うことができるツールです。

DISMによってWindowsイメージや仮想ハードディスクが作成されます。

参考:DISM の概要 | Microsoft Docs

今回は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とそこまで遜色ない使用感です。

ベンチでこれだけ出てれば上出来ですね。普通に快適に使えます。

image-20220303235640818

今までツール任せにしていたブート構成を手動で作成してみたので結構勉強になりました。

追記: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 のディスクマネージャからはシステムパーティションの削除やフォーマットができません。

image-20221211134715898

その場合に、パーティションを削除して新しいシステムドライブとして使用するために 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

上記の手順を実施することで、ディスクマネージャからもシステムパーティションが削除されていることを確認できます。

image-20221211135308504

追記:ディスクマネージャからプライマリパーティションが作成できない場合の対処

ディスクマネージャからパーティションを作成してもプライマリにならない場合、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の再セットアップ以外に解消方法が見つかりませんでした。