UbuntuでWindowsのインストールメディアを作成する

# 今どきのPCならddで大丈夫
Linuxのディスクイメージなどから `dd if=/install-media.iso of=/USB-device` などでインストールUSBメディアを作成することがあるかと思いますが、WindowsのISOファイルも同様に書き込んでも基本的には問題ありません。今どきのPCならこれで起動してくるでしょう。

もう骨董品に近く必要性は低いかもしれませんが、32bitのブートローダを搭載したPCを復活させたくインストールメディアを作成したい場合があります。その場合おそらくddで作成したメディアでは起動してこないと思います。

ですので折角ならwoeusbを用いてWindowsのインストールメディアを作成しましょう。
インストールメディアは8GB以上の容量がある必要があります。

# WoeUSBでメディアを作成する
[WoeUSB](https://github.com/WoeUSB)はWindowsのインストールメディアをLinux端末で作成するためのツールです。GUIもあるのですが、下のキャプチャの様に応答がなくなりちゃんとメディアが作成できたのか不明なまま終了してしまうことがあります。そのため、ここではCLIを用いた作成方法を紹介します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156568/043719a8-441b-0f66-a5a7-50cb1bf7777b.png)

## WoeUSBをインストールする
様々な手順がありますが、Ubuntuですのでリポジトリを追加してインストールしましょう。

```shell
sudo add-apt-repository ppa:nilarimogard/webupd8
sudo apt-get update
sudo apt install woeusb
```

## USBメモリを挿入してデバイス名を取得する
dmesgコマンドで確認するなど様々な方法がありますが、ディスク(disk)アプリを起動して挿入したUSBデバイスを選択するとどのようなデバイス名で認識されているか確認することが出来ます。デバイスと書かれた部分で確認しますが `/dev/sdb` という名前で認識されていることが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156568/c504f309-b34c-3109-a9be-4fdb0b378ad1.png)

## Windowsインストールメディアをダウンロードする
Windowsのインストールメディアは[ソフトウェアダウンロードWebサイト](https://www.microsoft.com/software-download/)から入手します。
どのメディアを作るかはアナタ次第なのでダウンロード方法の説明は割愛します。

## WoeUSBのCLIでメディアを作成する
`woeusb`に何もオプションをつけずに実行するとコマンドラインの説明が出ます。デバイスを選択してインストールメディアを作成する方法とパーテーションを選択してインストールメディアを作成する2つの方法がありますが、メディアのフォーマットなども一連の中で実施してくれる**デバイスを選択する方法**で実行したいと思います。

コマンドラインの指定は次の通り

```
sudo woeusb --device <ISOのフルパス> <デバイス名>
```

先程確認したデバイス名は `/dev/sdb` でした。
今回用意したWindowsのメディアはWindows10のもので `Win10_22H2_Japanese_x64v1.iso` です。（ファイル名はダウンロード時期により変更になると思います）
今回ファイルは `/tmp` にダウンロードしたので指定したコマンドラインは下記になります。
ファイルパスはアクセス権さえあればどこでも良いので`/tmp`にする必要はありません。

```
sudo  woeusb --device /tmp/Win10_22H2_Japanese_x64v1.iso /dev/sdb
```

### 実行結果
```
$ sudo woeusb --device /tmp/Win10_22H2_Japanese_x64v1.iso /dev/sdb
WoeUSB v5.2.4
==============================
Info: Mounting source filesystem...
Info: Wiping all existing partition table and filesystem signatures in /dev/sdb...
/dev/sdb: オフセット 0x000001fe にある 2 バイト (dos) を消去しました: 55 aa
/dev/sdb: ioctl() を呼び出してパーティション情報を再読み込みします: 成功です
Info: Ensure that /dev/sdb is really wiped...
Info: Creating new partition table on /dev/sdb...
Info: Creating target partition...
Info: Making system realize that partition table has changed...
Info: Wait 3 seconds for block device nodes to populate...
mkfs.fat 4.2 (2021-01-31)
mkfs.fat: Warning: lowercase labels might not work properly on some systems
Info: Mounting target filesystem...
Info: Copying files from source media...
Splitting WIM: 4765 MiB of 4765 MiB (100%) written, part 2 of 26%
Finished splitting "./sources/install.wim"
Info: Installing GRUB bootloader for legacy PC booting support...
Installing for i386-pc platform.
Installation finished. No error reported.
Info: Installing custom GRUB config for legacy PC booting...
Info: Done :)
Info: The target device should be bootable now
Info: Unmounting and removing "/tmp/woeusb-source-20230826-100929-Saturday.ksq48S"...
Info: Unmounting and removing "/tmp/woeusb-target-20230826-100929-Saturday.GCz4Nz"...
Info: You may now safely detach the target device
$ 
```
`Info: Done :)` と表示され、プロンプトが帰ってきたら成功です。
途中`Installing for i386-pc platform.` の辺りで32bitのブートローダーのインストールが実行されますが、ここで結構な待ち時間が発生するかと思います。プログラムが止まったように感じるかと思いますが暫く待ってみてください。