Blog about software development


Creating a bootable Windows 10 USB on Ubuntu

10 Aug 2016 - by 'Maurits van der Schee'

Whenever I have to help somebody with Windows 10 I find myself making a bootable Windows 10 USB drive. If you are on Windows this is provided via a menu option, but on Ubuntu Linux this requires some commands. This post will explain in detail how to do this.

GPT partition table with FAT32 partition

Modern systems support UEFI booting and this differs from traditional BIOS in that it does not read the boot sector. Instead it will look in the /efi/ directory in a FAT32 partition of a drive with GPT partitioning. There are no partition flags (like 'boot') necessary either.

Getting the official Windows 10 ISO image

You can download the official Windows 10 ISO image from Microsoft by visiting:


But you must be on Linux (or pretend to be using user agent switcher) to download the file.

Writing to the USB drive

Your USB drive has a drive letter in Linux typically something like 'b', which leads to a path to the device of /dev/sdb and a partition path for the first partition of /dev/sdb1. To avoid you screwing up your computer I use 'h', which you should replace in the commands below. You can use the 'gparted' graphical tool to find the drive letter of your USB drive.

If your USB drive is behaving weird, then you can reset it by issuing the following command:

sudo dd if=/dev/zero of=/dev/sdh bs=512 count=1

Normally this is not nessecary. Then to create a new layout on the drive:

sudo fdisk /dev/sdh

This is what you should enter in fdisk:

The following command will format the first partition with FAT32.

sudo mkdosfs -F32 /dev/sdh1

Now we need to mount the downloaded ISO file:

sudo mount Downloads/Win10_1607_Dutch_x64.iso /mnt

And copy all contents to the USB drive (this takes up to 15 minutes and shows no progress):

sudo cp -R /mnt/* /media/maurits/39F5-8B34/

Now unmount the ISO...

sudo umount /mnt

and the USB drive before removing it:

sudo umount /media/maurits/39F5-8B34/

To ensure the drive is OK, print the contents using 'fdisk':

maurits@nuc:~$ sudo fdisk /dev/sdh

Welcome to fdisk (util-linux 2.27.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Command (m for help): p
Disk /dev/sdh: 7.2 GiB, 7735541760 bytes, 15108480 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: gpt
Disk identifier: 1F574274-2552-4728-831F-90D768723297

Device     Start      End  Sectors  Size Type
/dev/sdh1   2048 15108095 15106048  7.2G Microsoft basic data

Command (m for help): q


Note that the drive should say 'Disklabel type: gpt' and 'Microsoft basic data'.

PS: Liked this article? Please share it on Facebook, Twitter or LinkedIn.