Ubuntu 22.04 で Windows10 の USB ブートメディアを作成してBootまで

## 1. 初めまして
オープラン株式会社という企業で働く新米ITエンジニアです。
今は、金融Webシステムの開発案件に携わっています。
日々学習していく中で、学んだことをアウトプットしたほうが忘れないかな、と思ったので、備忘録としてQiitaに書き込むことにしました。
今回は初回ということでキッティングの記事です。
業務とは全く関係ないんですが、なんだかんだ時間かかったので、テストがてら投稿してみます。
ご指摘あれば何でも言ってください。

## 2. 授業で習った通りにやってみた
大学の授業では、
1. .isoイメージファイルをUSBに焼く
1. PCに焼いたUSBを指して電源オン
1. UEFIを開いてbootしたい.isoイメージファイルを選択
1. 再起動

でインストールできたはず。この時はDebianだったけどWindowsも同じようにやれば…。

## 3. USBにイメージファイルをコピーできない
早速エラーが発生した。Windows公式のダウンロードページ (https://www.microsoft.com/ja-jp/software-download/windows10) から、isoファイルをダウンロードし、USBにコピーしようとしたけど、とてもとても時間がかかったので、中断してGoogleに頼ることに。

### 3-1. usb 転送速度 遅くなる[検索]
どうやら、ファイルシステムがFAT32である場合、4GB以上のファイルを保存することができず、ファイルシステムをNTFS(NT File System)に切り替える必要があるとのこと (https://recoverit.wondershare.jp/usb/slow-transfer-speed.html) 。
ちなみに、FAT32とNTFSの違いはこんな感じ(https://jisaku-pc.net/hddhukyuu/archives/741) 。
|  |FAT32  |NTFS  |
|---|---|---|
|最大ファイルサイズ  |4GB  |16TB  |
|最大ドライブサイズ  |2TB  |256TB  |
|暗号化 | × | 〇 |
|ファイル圧縮 | × | 〇 |
|耐障害性 | × | 〇 |
|検索の高速化 | × | 〇 |

:::note info
ここでいう耐障害性とは、停電等で障害が発生しても、ファイルシステムの不整合を発生させない仕組みのこと。ジャーナリングファイルシステムという仕組みを使っていて、実データとメタデータ作成の処理を逆にして、メタデータの一時保管場所を用意してあげることで、不整合を発生させない仕組みらしい (https://ja.wikipedia.org/wiki/%E3%82%B8%E3%83%A3%E3%83%BC%E3%83%8A%E3%83%AA%E3%83%B3%E3%82%B0%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0) 。ふーん。
:::

使ってるUSBのファイルシステムを確認すると、
```terminal
(base) hogehoge@foo:~$ sudo parted -l 

モデル: ATA SAMSUNG MZNLN256 (scsi)
ディスク /dev/sda: 256GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: gpt
ディスクフラグ:
 
番号  開始    終了   サイズ  ファイルシステム  名前                  フラグ
1    1049kB  538MB  537MB   fat32             EFI System Partition  boot, esp
2    538MB   256GB  256GB   ext4
 
 
モデル:  USB  SanDisk 3.2Gen1 (scsi)
ディスク /dev/sdb: 15.4GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: msdos
ディスクフラグ:
 
番号  開始    終了    サイズ  タイプ   ファイルシステム  フラグ
1    4194kB  15.4GB  15.4GB  primary  fat32
2    15.4GB  15.4GB  1049kB  primary                    lba
```
で、やっぱりFAT32の設定になってた。
なんだよ、NTFSのほうが性能いいのに、なんで初期設定FAT32になってんだよ、って思ったんだけど、どうやらFAT32のほうが歴史が古いから、より多くのOSに対応するために、あえて初期設定をFAT32としているものが多いらしい。
ボヤいてごめんな、SanDiskちゃん。

## 4. FAT32 → NTFS
### 4-1. デバイス名を知る
ということで、USBのファイルシステムをFAT32からNTFSに変えていく。
まずは、USBのデバイス名を調べる。`dmesg | grep USB`とか`fdisk`で調べる方法もあるけど、手っ取り早くデバイス名知れたなーと思ったのは
```terminal
(base) hogehoge@foo:~$ df -h
(略)
Filesystem  Size Used Avail Use% Mounted on
/dev/sdb1   15G  101K 14.8G 1%   /media/hogehoge/usbdisk
```
とすること。こうしてUSBの名前が`sdb1`で認識されていることを知れた。

### 4-2. ファイルシステム変換 → Have a nice day.
コマンド自体は次のサイトを参照した (https://www.nemotos.net/?p=1357) 。
```terminal
(base) hogehoge@foo:~$ sudo mkfs -t ntfs -Q -L usbdisk /dev/sdb1

/dev/sdb1 is mounted.
Refusing to make a filesystem here!
```
実行してみると、どうやらマウントしている状態でファイルシステムを変えることはできないらしい。そこで、アンマウントしてから実行。

``` terminal
(base) hogehoge@foo:~$ sudo umount /dev/sdb1
(base) hogehoge@foo:~$ sudo mkfs -t ntfs -Q -L usbdisk /dev/sdb1

Cluster size has been automatically set to 4096 bytes.
Creating NTFS volume structures.
mkntfs completed successfully. Have a nice day.
```
うん、うまくいったみたい。
どうでもいいけど、最後の Have a nice day. にちょっと心を動かされた。
自分がコマンド作るとしたら、こんな余裕をもって作りたいなあ。

## 5. イメージファイルをUSBにコピー
無事にNTFSに変えれたので、次にイメージファイルをコピーする。6GBあるファイルをコピーしてくれてるので少々時間がかかる。
コピーが終了してから、USBを抜いて、そのままインストールしたいPCに差し込んで、電源を入れてみた。
ようやく終わった…。

## 6. USB挿入→ PC/UEFI起動→ boot画面に出てこない
USBを挿入して、
PCを起動して、
UEFIを起動して、
boot画面に出て、
こない。
あっれれー？Boot画面に出てこないな？
またしてもGoogle先生に頼らざるを得ないみたい。
「boot iso from usb」で検索。
すると、どうやらイメージファイルをフリーソフトでBoot可能にしてからコピーしなければいけなかったらしい。こんなの、進研ゼミで習ってないよ… (https://onoredekaiketsu.com/rufus-if-booting-from-usb/) 。
有名どころだとRufusとやらを使うらしいが、Linuxに対応していないので、代わりにBalenaEtcherを利用してみる。

### 6-1. (途中断念)BalenaEtcherの非利用
公式Githubから.debファイルをダウンロード(https://github.com/balena-io/etcher/releases/) して、以下のコマンドを叩く。
```terminal
(base) hogehoge@foo:~$ sudo apt install ./ダウンロード/balena-etcher_1.18.11_amd64.deb
```
こうして、BalenaEtcherをインストールして、「flash from file」からいざ変換しようとファイルを選択すると…。
![balenaetcher_attention.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3639640/6f0a3283-df2e-65c2-1a58-0fe3576eb907.png)
Windowsのイメージファイルには、Windows用の変換ツールを使えと、注意されてしまった。なになに、LinuxならWoeUSBだと？先に言ってくれこんちくしょう！

### 6-2. (実際は)WoeUSBの利用
BalenaEtcherの時とは異なり、リポジトリを追加してaptで持ってくる。
```terminal
(base) hogehoge@foo:~$ sudo add-apt-repository ppa:tomtomtom/woeusb
(base) hogehoge@foo:~$ sudo apt update
(base) hogehoge@foo:~$ sudo apt install woeusb woeusb-frontend-wxgtk
```
これでWoeUSBをインストールできた。さっそく変換しよう。アプリ一覧からWoeUSBを開いて、ファイルを指定して変換 (この時もアンマウントしてほしいとか言われたので、その通りにして実行したらできた) 。
ようやくブートメディアができたよ…。

## 7. USB挿入 & PC起動
これで、うまくいってくれ…！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3639640/32cfad14-232d-b610-6b4e-89927bc84104.png)
キター！


## 8. 結論：ファイルシステムはNTFSを、変換にはWoeUSBを。
いろいろ調べたり、インストールしたり、疲れちゃいました。
やっぱ、Windowsって大変だよなあ。

## 9. 参考サイト
- Windows10のダウンロード
(https://www.microsoft.com/ja-jp/software-download/windows10)
- USB3.0の転送速度が遅いときの対処法(https://recoverit.wondershare.jp/usb/slow-transfer-speed.html)
- データ障害に強いNTFSとFAT32の違い
(https://jisaku-pc.net/hddhukyuu/archives/741)
- ジャーナリングファイルシステム
(https://ja.wikipedia.org/wiki/%E3%82%B8%E3%83%A3%E3%83%BC%E3%83%8A%E3%83%AA%E3%83%B3%E3%82%B0%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0)
- LinuxでUSBメモリをNTFSにフォーマットにするコマンド
(https://www.nemotos.net/?p=1357)
- USBメモリ内のISOファイルからブートするには「Rufus」が便利
(https://onoredekaiketsu.com/rufus-if-booting-from-usb/)
- [Github]balena-io etcher 
(https://github.com/balena-io/etcher/releases/)
- Windows 10 をダウンロードしてインストールする方法 (最後の画像を拝借しました)
(https://www.e-soft.net/help/windows10)