aboutsummaryrefslogtreecommitdiffstats
path: root/posts/windows_10_bootable_usb_linux.md
blob: 06e21259c2d81c2f8909ab99a55ee98d79439f7f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
---
title: Windows 10, Bootable USB on Linux
published: 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](https://www.microsoft.com/en-us/software-download/windows10ISO) 
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!