LinuxでWindows PEのLive USBを作る

BIOSの更新プログラムや、CPUのファームウェアの更新プログラムはWindowsしかサポートしていないものが多い。
PC環境がLinuxしかない場合、以下のような記事に従い、isoをUSBに書き込むことでBIOSのアップデートができる。
How to update Lenovo BIOS from Linux without using Windows - nixCraft

しかし、ベンダーから exe しか提供されていない場合に詰む。
そこで、USBから起動できるWindows PE(プレインストール)環境を使って、exe を実行する環境を構築する。

なお、作業環境はArchLinuxのため、パッケージのインストール方法などは各ディストリビューションのものに置き換えること。

必要なパッケージをインストールする。

$ yay -S fuse2 cdrtools cabextract wimlib 
$ yay -S syslinux mtools

Windows PEのイメージ(KB3AIK_EN.iso)を以下からダウンロードする。
Download The Windows® Automated Installation Kit (AIK) for Windows® 7 from Official Microsoft Download Center
Windows PE - ArchWiki

Windows PEのLive USBを以下の手順で作成する。

$ sudo mkdir /mnt/waik
$ sudo mount KB3AIK_EN.iso /mnt/waik

$ mkwinpeimg --waik-dir=/mnt/waik --overlay=${USER_DIR}
:: Copying primary boot files from the Windows Automated Installation Kit (/mnt/waik, X86
:: Extracting boot.wim from "/mnt/waik/WinPE.cab"
:: Overlaying "/home/ryo/Downloads/bios/mod_bios" on the Windows PE filesystem 
:: Rebuilding WIM with changes made 
:: Making disk image "winpe.img"
The image (winpe.img) is 139730944 bytes.

$ sudo umount /mnt/waik

$ sudo dd if=winpe.img of=/dev/sdb bs=64K
2132+1 records in
2132+1 records out
139730944 bytes (140 MB, 133 MiB) copied, 15.3978 s, 9.1 MB/s

$ sync

以下の --overlay= オプションでディレクトリを指定することで、そこに含まれるファイルがWindows PEのXドライブ直下に配置される。

$ mkwinpeimg --waik-dir=/mnt/waik --overlay=${USER_DIR}

ThinkPad X220の場合、作成したUSBを挿したまま電源を入れ、起動画面でF12を押して起動ディスクにUSBを指定するとWIndows PEが立ち上がる。

Xドライブ直下まで移動し、適宜実行ファイルを実行する。

なお、以下のコマンドでWindows PEの電源を落とせる。

> wpeutil shutdown