Windows 10, Bootable USB on Linux
Published on 2017-01-07
There are so many misleading, confusing and extremely complicated instructions on how to create a bootable Windows USB stick on Linux that is not funny anymore. This is mostly a "note to self" on how to do this.
Microsoft conveniently provides official Windows ISO files that you can use to perform fresh installations of Windows on PCs of relatives that you need to clean up. You don't even need to provide a "COA" key to download them, at least not for Windows >= 8.
So, once you have the ISO and a USB stick (or external hard disk) of at least 4GB it is very easy, if the machine supports (U)EFI which all machines do that I got my hands on, even an old Samsung machine from 2009 supports it.
We assume the USB device is /dev/sdb
, please make sure this is correct for
you.
Empty the first MB of the USB device to clean any crap that may be there:
$ sudo dd if=/dev/zero of=/dev/sdb count=1024 bs=1024
[sudo] password for fkooman:
1024+0 records in
1024+0 records out
1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.174261 s, 6.0 MB/s
Create a new partition using fdisk
, it is important to create a partition of
type 0x0c
and mark it as bootable:
$ sudo fdisk /dev/sdb
Welcome to fdisk (util-linux 2.28.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x4ddb579b.
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-30998527, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-30998527, default 30998527):
Created a new partition 1 of type 'Linux' and of size 14.8 GiB.
Command (m for help): t
Selected partition 1
Partition type (type L to list all types): 0c
Changed type of partition 'Linux' to 'W95 FAT32 (LBA)'.
Command (m for help): a
Selected partition 1
The bootable flag on partition 1 is enabled now.
Command (m for help): p
Disk /dev/sdb: 14.8 GiB, 15871246336 bytes, 30998528 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x4ddb579b
Device Boot Start End Sectors Size Id Type
/dev/sdb1 * 2048 30998527 30996480 14.8G c W95 FAT32 (LBA)
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
Now, create a FAT32 file system on the USB device:
$ sudo mkdosfs -F32 /dev/sdb1
mkfs.fat 4.0 (2016-05-06)
Create some mount points:
$ sudo mkdir /mnt/usb
$ sudo mkdir /mnt/iso
Mount the USB device:
$ sudo mount /dev/sdb1 /mnt/usb
Next we mount the ISO to access the files on it:
$ sudo mount -o loop Win10_1607_English_x64.iso /mnt/iso
Now, we copy the files from the ISO to the USB stick:
$ sudo cp -r /mnt/iso/* /mnt/usb/ && sync
The sync
is to make sure all data is written to the USB stick.
Unmount the ISO and USB stick:
$ sudo umount /mnt/iso
$ sudo umount /mnt/usb
That's all!