【Ubuntu】【WoeUSB】Ubuntu 18.04 上で Windows10 インストーラ格納 USB メモリを作成する【SW】

Ubuntu 18.04 上で Windows10 インストーラ格納 USB メモリを作成する
 
下記の手順で作成したインストーラを使って Windows10 のインストールに成功することを確認した。
なお、woeusb をインストールした影響で apt 依存関係に不整合が生じることがあるかも知れないので、インストーラUSB の作成が完了したら、システムから woeusb を削除した方が良い。

 

結論

話は要らないから、手順だけ知りたいという方はこちらの 1 〜 4 を実行すれば良い。

1. Windows10 イメージをダウンロードする
Windows 10 のディスク イメージ (ISO ファイル) のダウンロード にアクセスしダウンロードをする。

2. WoeUSB をインストールする

% sudo add-apt-repository ppa:nilarimogard/webupd8
% sudo apt-get update
% sudo apt install -y woeusb

3. USB メモリ上にブロックデバイスファイルがあるといけないので確実にアンマウントしておく(以下は例なのでデバイスファイルは読み替えること)

% lsblk 
(--snip--)
sdb      8:16   1   7.5G  0 disk 
└─sdb1   8:17   1   7.5G  0 part /media/neko/Lexar
% udisksctl unmount --block-device /dev/sdb1

4. 1 でダウンロードした Win10 ISOイメージを USB メモリに書き込む。

% woeusbgui &

f:id:dnkrnka:20180917115800p:plain

5. USBメモリが完成したら、woeusb とその依存パッケージを削除する

% sudo apt remove woeusb:i386 

 

概要

Ubuntu 18.04 上で Windows10 インストーラ格納 USB メモリ(以降、USB とする)を作るため手順としては、以下の要領で行えば良い模様。

1. Windows10 イメージを Microsoft のページからダウンロードする
2. 1 でダウンロードした ISO イメージをインストール可能な形式になるようにして USB に書き込む
3. 2 で作成した USB を使って Windows をインストールする。
なお、Windows10 のライセンスは持っているものとする。
・Windows10 のイメージは 4.4GB と巨大なため、USB は 8GB 以上あるものが必要になる。

 

Linux の場合、上記 2 の ISO イメージを USB に書き込むときにインストール可能な形式に換える必要がある模様。
その形式変換のためソフトウェアには幾つかあるようだが、次の2つのソフトが情報も多かった。今回は WoeUSB を使う。

WoeUSB
How to Create a Bootable Windows 10 USB in Linux | It's FOSS
[Linux][Ubuntu] Windows 10インストール用USBメモリをUbuntu上で作成する
Ubuntuで起動可能なWindows 10 USBを作成する方法 – 気まぐれ一言居士の公開メモ帳

mkusb
Ubuntuでwindows10のインストールusbを作成する [Sato'sWiki]
https://help.ubuntu.com/community/mkusb

 

手順

基本的には [Linux][Ubuntu] Windows 10インストール用USBメモリをUbuntu上で作成する のページの手順をそのまま実行すれば良い。
しかし、今回、トラブルが発生したので、トラブルとその解決方法も併せて記しておく。

1. Windows10 イメージをダウンロードする

Windows 10 のディスク イメージ (ISO ファイル) のダウンロード にアクセスし、ダウンロードをする。

 

2. WoeUSBのインストールをする

% sudo add-apt-repository ppa:nilarimogard/webupd8
% sudo apt-get update
% sudo apt install -y woeusb

インストール完了後に woeusb と woeusbgui がインストールされていれば OK.

% which woeusb
/usr/bin/woeusb
% which woeusbgui
/usr/bin/woeusb

 

3. woeusb を使って 1 でダウンロードした iso を USB メモリに書き込む

CUI 版の woeusb でも USB メモリへの書き込みは簡単にできそうだが、今回は見本にしたサイトと同様に GUI 版で実行する。

% woeusbgui &
  • 「From a disk image (iso)」に 1 でダウンロードしたイメージを指定する。
  • [Target device:」は(自動的に選択されていたが、) USB メモリを指定する

f:id:dnkrnka:20180917115800p:plain
 
「install」ボタンを押下してインストール実行する。が、失敗した。
f:id:dnkrnka:20180917122029p:plain
 
念のために CUI でも実行してみるが、次の通りエラーになった。

% sudo woeusb --device /home/neko/Downloads/Win10_1803_Japanese_x64.iso /dev/sdb

WoeUSB v@@WOEUSB_VERSION@@
==============================
Error: Target device is currently busy, unmount all mounted partitions in target device then try again
Target device is busy, please make sure you unmount all filesystems on target device or shutdown the computer before detaching it.

 
USB 内のファイルを開いたり、意図的にアクセスしていないため原因が分からない。
そこで WEB で調べてみると以下の情報が見つかった。

Please verify if the following solution works for you:

Note all the mounted partitions in the target device via running lsblk
For each mounted partitions, run the following command: udisksctl unmount --block-device
If the command errors, please ensure all files in the mounted partition are closed, or reboot the system and retry.
Run WoeUSB again and try to reproduce the problem
Removable storage management is a mess on GNOME-based desktop environments, this ensures that WoeUSB won't be interfered by the "user-friendly" automounting feature.

Error in record iso · Issue #112 · slacka/WoeUSB · GitHub

 
上記の助言では、USB メモリの最上位層にブロックデバイスがあるのでアンマウントしてみろ、とのことなので以下実行してみる。
 
まずは lsblk を実行してみる。
すると、/dev/sdb1 というブロックデバイスが存在していた。

% lsblk 
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0    7:0    0  87.9M  1 loop /snap/core/5328
loop1    7:1    0  78.7M  1 loop /snap/go/2635
sda      8:0    0 931.5G  0 disk 
├─sda1   8:1    0 927.6G  0 part /
├─sda2   8:2    0     1K  0 part 
└─sda5   8:5    0     4G  0 part [SWAP]
sdb      8:16   1   7.5G  0 disk 
└─sdb1   8:17   1   7.5G  0 part /media/neko/Lexar
sr0     11:0    1  1024M  0 rom  

 
そこで、助言通りに udisksctl というコマンドを使ってアンマウントしてみる。

% udisksctl unmount --block-device /dev/sdb1
Unmounted /dev/sdb1.

 
ブロックデバイスがアンマウントされた。

% lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0    7:0    0  87.9M  1 loop /snap/core/5328
loop1    7:1    0  78.7M  1 loop /snap/go/2635
sda      8:0    0 931.5G  0 disk 
├─sda1   8:1    0 927.6G  0 part /
├─sda2   8:2    0     1K  0 part 
└─sda5   8:5    0     4G  0 part [SWAP]
sdb      8:16   1   7.5G  0 disk 
└─sdb1   8:17   1   7.5G  0 part 
sr0     11:0    1  1024M  0 rom  

 
再度, USB メモリへの iso の書き込みを試みる。が、失敗した。
f:id:dnkrnka:20180917123607p:plain
 
CUI でも実行してみる。

% sudo woeusb --device /home/neko/Downloads/Win10_1803_Japanese_x64.iso /dev/sdb

WoeUSB v@@WOEUSB_VERSION@@
==============================
Mounting source filesystem...
Wiping all existing partition table and filesystem signatures in /dev/sdb...
/dev/sdb: オフセット 0x000001fe にある 2 バイト (dos) を消去しました: 55 aa
/dev/sdb: ioctl() を呼び出してパーティション情報を再読み込みします: 成功です
Ensure that /dev/sdb is really wiped...
Creating new partition table on /dev/sdb...
Creating target partition...
Making system realize that partition table has changed...
Wait 3 seconds for block device nodes to populate...
mkfs.fat 4.1 (2017-01-24)
mkfs.fat: warning - lowercase labels might not work properly with DOS or Windows
Mounting target filesystem...
Applying workaround to prevent 64-bit systems with big primary memory from being unresponsive during copying files.
/usr/bin/woeusb: 行 1348: false: 未割り当ての変数です
Resetting workaround to prevent 64-bit systems with big primary memory from being unresponsive during copying files.
Unmounting and removing "/media/woeusb_source_1537155468_14636"...
Unmounting and removing "/media/woeusb_target_1537155468_14636"...
You may now safely detach the target device

 
エラーログを見みと「/usr/bin/woeusb: 行 1348: false: 未割り当ての変数です」とある。
どうやら /usr/bin/woeusb は Bash の模様。

/usr/bin/woeusb: Bourne-Again shell script, UTF-8 Unicode text executable

 
問題の 1348行目を見てみると、「local only_for_gui」という変数が未定義というものであった。
そこで次の 1348, 1349 行目のように「local」を外して only_for_gui を定義してやる。

% cp /usr/bin/woeusb .
% vim woeusb
  1340		fi
  1341	}; declare -fr check_target_filesystem_free_space
  1342	
  1343	## Copying all files from one filesystem to another, with progress reporting
  1344	copy_filesystem_files(){
  1345		util_check_function_parameters_quantity 3 "${#}"
  1346		local source_fs_mountpoint="${1}"; shift
  1347		local target_fs_mountpoint="${1}"; shift
  1348	#   local -ir only_for_gui="${1}"
  1349	    only_for_gui="${1}"

 
そして、再々実行すると成功した。

> sudo ./woeusb --device /home/neko/Downloads/Win10_1803_Japanese_x64.iso /dev/sdb

WoeUSB v@@WOEUSB_VERSION@@
==============================
Mounting source filesystem...
Wiping all existing partition table and filesystem signatures in /dev/sdb...
/dev/sdb: オフセット 0x000001fe にある 2 バイト (dos) を消去しました: 55 aa
/dev/sdb: ioctl() を呼び出してパーティション情報を再読み込みします: 成功です
Ensure that /dev/sdb is really wiped...
Creating new partition table on /dev/sdb...
Creating target partition...
Making system realize that partition table has changed...
Wait 3 seconds for block device nodes to populate...
mkfs.fat 4.1 (2017-01-24)
mkfs.fat: warning - lowercase labels might not work properly with DOS or Windows
Mounting target filesystem...
Applying workaround to prevent 64-bit systems with big primary memory from being unresponsive during copying files.
Copying files from source media...
Installing GRUB bootloader for legacy PC booting support...
Installing for i386-pc platform.
Installation finished. No error reported.
Installing custom GRUB config for legacy PC booting...
Resetting workaround to prevent 64-bit systems with big primary memory from being unresponsive during copying files.
Unmounting and removing "/media/woeusb_source_1537155974_21275"...
Unmounting and removing "/media/woeusb_target_1537155974_21275"...
You may now safely detach the target device
Done :)
The target device should be bootable now

 
このときに USB に書き込まれたのか見てみようとするが、USB にアクセスできない。
以下の通りどうやら UI からはアンマウントされてしまっているらしい。

% lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0    7:0    0  87.9M  1 loop /snap/core/5328
loop1    7:1    0  78.7M  1 loop /snap/go/2635
sda      8:0    0 931.5G  0 disk 
├─sda1   8:1    0 927.6G  0 part /
├─sda2   8:2    0     1K  0 part 
└─sda5   8:5    0     4G  0 part [SWAP]
sdb      8:16   1   7.5G  0 disk 
└─sdb1   8:17   1   7.5G  0 part 
sr0     11:0    1  1024M  0 rom  
% umount /dev/sdb
umount: /dev/sdb: not mounted.

 
そこで、本当に書き込みができたのか USB を確認するために USB を抜いて差し込み直して、USB を見てみる。



成功。
f:id:dnkrnka:20180917131340p:plain
 
駄目押しのために CUI でも USB メモリを見てみると、4.4GB の書き込みがされていた。

% ls -l /media/neko/Windows\ USB/
合計 1748
-rw-r--r--  1 neko neko     128  917 12:46 autorun.inf
drwxr-xr-x  5 neko neko    4096  917 12:46 boot/
-rw-r--r--  1 neko neko  407582  917 12:46 bootmgr
-rw-r--r--  1 neko neko 1257376  917 12:46 bootmgr.efi
drwxr-xr-x  4 neko neko    4096  917 12:46 efi/
drwxr-xr-x  5 neko neko    4096  917 12:57 grub/
-rwxr-xr-x  1 neko neko   80648  917 12:46 setup.exe*
drwxr-xr-x 11 neko neko   20480  917 12:57 sources/
drwxr-xr-x  3 neko neko    4096  917 12:57 support/
% du -s -h /media/neko/Windows\ USB/
4.4G	/media/neko/Windows USB/

 
以上。

USB インストーラの作成が完了したら、woeusb を消す方が良い。
こちらのページのようなエラーが発生してしまうことがある。

% sudo apt remove woeusb:i386