[Mac][USB][Docker] MacOSでWindows 7 iso からWiondows PC向けUSB起動メディア作成




`Windows 7` Ultimate がBIOSから起動しなくなったので (おそらくWindows update が原因
詳しくは別記事。)
手持ちのMacbook で、Docker 上のUbuntu でUSB起動メディアを作成した。


(Mac 上でWindows PC用の起動メディア は例はあまり見つからなかったので (Mac のBoot Camp用はあったが)
書留ておく。)

# 起こったこと  　 

`Windows 7` が`Windows update` の後の再起動で  BIOSから突然起動しなくなった。(trap? Bitlocker の暗号化更新が 古いbootloaderに対応していない

```
A recent hardware or software change might have installed a file that is signed incorrectly or damaged, or that might be malicious software from an unknown source.

If you have a Windows installation disk, insert the disk and restart your computer. Click "Repair your computer", and then choose a recovery tool.

Otherwise, to start Windows so you can investigate further, press the Enter key to display the boot menu, press F8 for Advanced Boot Options, and select Last Known Good. If you understand why the digital signature cannot be verified and want to start Windows without this file, temporarily disable driver signature enforcement.

File: \Windows\System32\winload.exe

Status: 0xc0000428

Info: Windows cannot verify the digital signature for this file.
```
https://neosmart.net/wiki/0xc0000428/

https://www.borncity.com/blog/2019/08/21/windows-7-neuinstallation-und-der-boot-fehler-0xc0000428/
->
結果的に、Windows機向け起動メディアを`Mac`で作成して 修復した。

Windows の代替機があれば、起動メディア作成も難しくないかもだが、
Macbook しかなかったため、容易に方法がみつからなかった。



はじめは検索に出てきた`Easy Recovery Essentials` というソフトを利用する方法で修復を試みた、が
Bootはしたが結果修復は`失敗` したようで、逆にエラー画面すらでなくなった。
そのため、起動メディアを作成 を試すことにした。

https://neosmart.net/wiki/0xc0000428/


細かい流れは別記事に。


# 試したこと

Mac上で iso などを USB に焼けそうなものだと
UNetBootin, `dd`, Balena etcher, 直接ファイルコピペ, `diskutil` など方法があるが、
ファイルformatシステム (FAT32 など) が違うのか
bootable としてて 今回のWindows7 isoはBIOS認識しなかった。


# 起動メディア作成方法

そして結局うまくいったのは、 `WoeUSB`
Ubuntu上で動作する `WoeUSB` が Windows 向けのWindows 起動メディア作成に適しているよう。open source。
https://github.com/slacka/WoeUSB

(Virtualbox/Docker などに Windows iso入れてもよかったが、容量が必要そうだったので
手軽なUbuntu にした。)



# Docker + Ubuntu を利用した起動メディア作成の流れ

* VirtualBox manager で`docker-machine` で利用する virtualbox の USB busへのアクセス権利を与える
* 同時に、ファイル共有などで、ローカル(Mac) にダウンロードしたiso などをコンテナと共有する
* `docker-machine ssh` で boot2docker に入り、そこから `docker run -v /Volume/shared:/Volume/shared --priviledged --device=/dev/sdb1 ubuntu` などとして さらにファイル共有 + USBドライブにアクセス権を渡す
* 作成したdocker image 上で、WoeUSB をインストールし コマンド実行する


# Ubuntu の用意

Docker 上に用意。

今回は、コンテナに 
* Virtualbox manager で、USB busにアクセスできるように設定
* `docker run` で `--priviledged` と `--device` オプションでUSBドライブのアクセス権を渡す。
* 同時に `-v` で 共有する Volumeを指定する。



```
# /dev/以下の device node 特定
$ lsblk
...
sda    8:0    0  40G  0 disk
sda1   8:1    0  40G  0 part / #(例

```


# WoeUSB インストールと実行


そのままだと、上手くインストールできなかったが、
記事があったので参考。

https://github.com/slacka/WoeUSB/issues/311

https://www.how2shout.com/linux/how-to-install-woeusb-on-ubuntu-20-04-lts/



```
# 以下のようにCUI実行 (これはパーティションなし ですべて初期化の場合
$ woeusb --device win7_amd64.iso /dev/sdb 
```
https://www.mankier.com/1/woeusb


# 注意点

* BIOS 起動時にUSB 起動メディアを先にロードするなどBIOS 設定も注意 (BIOS のFast booting などオプションを無効にする
* BIOS で修復対象のドライブが無効だと 自動修復の際に読み込まれずに、USBメディア自体を書き換える
* 私の場合 認識するファイルフォーマットは FAT32 
(32GB 以上のメモリなら ExFAT)

https://www.quora.com/Which-format-is-better-for-installing-Windows-from-a-USB-drive-FAT32-NTFS-or-exFAT


# 参考

https://apple.stackexchange.com/questions/355930/how-to-create-a-windows-10-bootable-usb-on-a-mac-for-pc-without-bootcamp-when-i

https://stackoverflow.com/questions/35854886/how-do-i-access-a-usb-drive-on-a-osx-host-from-inside-a-docker-container

https://minus9d.hatenablog.com/entry/2018/11/12/224538

https://qiita.com/shungok/items/6c5a7b5a9d63d51e6615

https://armadillo.atmark-techno.com/blog/10899/4191

https://chrolis.hatenablog.com/entry/2018/09/09/105258