概要
次のようにでUSBメモリに直接ddすればWindows10のインストールUSBが出来上がるようなイメージを作成します。
sudo dd if=Win10_install_memstick.img of=/dev/sdX bs=1M
fallocateコマンドで空のファイルを作成してパーティションを作成すること、losetupコマンドでloopbackデバイスを割り当ててフォーマット/マウントして作業する2点がポイントです。Gentoo/Linuxで作業しましたが、特殊なツールは利用していないので、他のディストリビューションでも大枠は変わらないはずです。
準備するもの
Windows10のインストール用ISOイメージは2020年7月時点で約4.8GB、dd用のイメージファイルは6GB確保しますので、相応のディスク空き領域が必要です(もう少し少なくても大丈夫かと思いますが、最小サイズは検証していません)。
- 8GB以上のUSBメモリ
- Windows10のインストールISOイメージ
- HDD/SSDに8GB以上の空き容量があること
イメージファイルの作成とパーティション分割
まずはイメージ作成用に6GBの空ファイルを用意します。大容量な空ファイルを作成する場合はddがよく使われますが、ディスクにデータを書くため時間がかかります。fallocateは容量だけ確保してデータの全量を書き込まないため、大容量なファイルでも瞬時に作成でき便利です。ここで作成したファイルが最終的にUSBにddするイメージになるので、気になる方はddで作成すると空き領域が0で埋められたイメージができます。
fallocate -l 6G Win10_install_memstick.img
次に、作成したファイルをパーティション分割します。パーティション構成は以前の記事と同様です。partedやfdiskは、/dev以下にあるブロックデバイスでなくても、ファイルに対してパーティションの操作ができます。UNIX系のOSはデバイスもファイルとして扱うので、同じコマンドが使えるのは便利ですね。
parted Win10_install_memstick.img
WARNING: You are not superuser. Watch out for permissions.
GNU Parted 3.2
Using /home/tnakajima/work/Win10_install_memstick.img
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt
(parted) mkpart primary fat32 0G 1G
(parted) mkpart primary ntfs 1G 100%
(parted) name 1 UEFI_Boot
(parted) name 2 Win10
(parted) print
Model: (file)
Disk /home/tnakajima/work/Win10_install_memstick.img: 6442MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 1000MB 999MB fat32 UEFI_Boot
2 1000MB 6441MB 5441MB ntfs Win10
(parted) quit
パーティションが作成できても、mkfs系のコマンドは引数にパーティションをとるため、そのままではフォーマットができません。そこで、losetupコマンドでファイルを/dev/loopXにアタッチして作業します。/dev/loopX は複数あると思いますが、-fオプションは空いているデバイスを自動で選択してアタッチしてくれます(たとえば、/dev/loop0がまだ使われていなければそこに割り当てられます)。また、-Pオプションでパーティションもスキャンしてくれます。
sudo losetup -f -P Win10_install_memstick.img
上のコマンドの最後の引数で指定したファイルが割り付けられたloopデバイスは次のコマンドで確認します。ここまでで、/dev/loop0p1や/dev/loop0p2のように見慣れた形でパーティションが操作できそうなことに気づくと思います。
losetup- l
パーティションが扱えるようになったので、各領域をフォーマットします。
sudo mkfs.vfat /dev/loop0p1
sudo mkfs.ntfs -f /dev/loop0p2
これで、パーティションの準備ができました。
マウントとファイルのコピー
パーティションが準備できたら、適当なディレクトリを作成してマウントし、必要なファイルをコピーします。こちらも以前の記事と同様です。
mkdir -p /tmp/work/{uefi_boot,win10,loop}
sudo mount -t udf -o ro,loop /path/to/Win10_2004_Japanese_x64.iso /tmp/work/loop
sudo mount -t vfat /dev/loop0p1 /tmp/work/uefi_boot
sudo mount -t ntfs /dev/loop0p2 /tmp/work/win10
EFIブート用のファイルをコピーします。
sudo cp -r \
/tmp/work/loop/{autorun.inf,boot,bootmgr,bootmgr.efi,efi,setup.exe,support} \
/tmp/work/uefi_boot
sudo mkdir /tmp/work/uefi_boot/sources
sudo cp -r /tmp/work/loop/sources/boot.wim \
/tmp/work/uefi_boot/sources/boot.wim
Windowsインストール用のデータもコピーします。
sudo cp -r /tmp/work/loop/sources /tmp/work/win10
上記コマンド実行が終了したら、ディスクへの書き込みが終了するまで待ちましょう。
sync
以上でファイルの書き込みは終了です。
アンマウントとループバックデバイスのデタッチ
すべてのファイルの書き込みが終了したので、作業領域をアンマウントし、不要なディレクトリを削除します。
sudo umount /tmp/work/{uefi_boot,win10,loop}
rmdir /tmp/work/{uefi_boot,win10,loop,}
最後に、losetupコマンドで/dev/loopXをデタッチして作業終了です。
sudo losetup -d /dev/loop0
USBメモリの作成
これで、コマンド1回で誰でも簡単にWindows10のインストールUSBを作れるようになりました。
sudo dd if=Win10_install_memstick.img of=/dev/sdb bs=1M