LinuxでUSBに直接ddできるWindows10のインストールイメージを作る

概要

次のようにで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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA