I needed to reinstall one of my Windows PCs at home recently, and realised that I only have Windows 7 DVDs, but no Windows 10s.
Since it's possible to boot and install Windows 10 from USB, that's what I decided to do: download Window 10 ISO and burn it one of the USB sticks I have. This approach will be simpler for any other ISO image like Ubuntu or CentOS, so there's a separate Steps 3-5 for them at the end of the post.
Here are the steps I had to take on my MacBook, originally procedure was written in macOS High Sierra, but I tested it in MacOS Mojave 10.14.2 as well. All of these need to be done in the Terminal app.
Windows 10 bootable USB vs Linux ISO USB
Windows 10 is a very specific bootable media, so the process is a bit involved. For generic Linux installation ISOs this procedure would be simpler. So the first two steps are the same, then Windows and Linux have separate procedure.
Here's what we will do for Windows ISO:
- erase USB stick and create MBR (master boot record)
- format USB stick with FAT-32 filesystem
- mount Windows 10 ISO image as a folder
- copy all the files from that folder onto the USB stick
Here's what we would do for Linux ISO:
- use dd command to burn Linux installation ISO onto USB stick
Step 1: Confirm partitions before inserting USB
Use the diskutil command to list all disks and partitions on your Mac. This is simply so that you can run the same command again after inserting USB and easily spot the USB device.
[email protected]:/ $ diskutil list /dev/disk0 (internal): #: TYPE NAME SIZE IDENTIFIER 0: GUID_partition_scheme 500.3 GB disk0 1: EFI EFI 314.6 MB disk0s1 2: Apple_APFS Container disk1 500.0 GB disk0s2 /dev/disk1 (synthesized): #: TYPE NAME SIZE IDENTIFIER 0: APFS Container Scheme - +500.0 GB disk1 Physical Store disk0s2 1: APFS Volume Macintosh HD 466.2 GB disk1s1 2: APFS Volume Preboot 24.3 MB disk1s2 3: APFS Volume Recovery 519.0 MB disk1s3 4: APFS Volume VM 12.3 GB disk1s4 /dev/disk2 (disk image): #: TYPE NAME SIZE IDENTIFIER 0: GUID_partition_scheme +30.0 GB disk2 1: EFI EFI 209.7 MB disk2s1 2: Apple_APFS Container disk3 29.8 GB disk2s2 /dev/disk3 (synthesized): #: TYPE NAME SIZE IDENTIFIER 0: APFS Container Scheme - +29.8 GB disk3 Physical Store disk2s2 1: APFS Volume Photos 9.2 GB disk3s1 /dev/disk4 (disk image): #: TYPE NAME SIZE IDENTIFIER 0: Apple_partition_scheme +173.1 MB disk4 1: Apple_partition_map 32.3 KB disk4s1 2: Apple_Driver_ATAPI 4.1 KB disk4s2 3: Apple_HFSX Firefox 173.0 MB disk4s3 /dev/disk5 (disk image): #: TYPE NAME SIZE IDENTIFIER 0: GUID_partition_scheme +80.0 MB disk5 1: Apple_APFS Container disk6 80.0 MB disk5s1 /dev/disk6 (synthesized): #: TYPE NAME SIZE IDENTIFIER 0: APFS Container Scheme - +80.0 MB disk6 Physical Store disk5s1 1: APFS Volume Raven-Core 70.1 MB disk6s1 /dev/disk7 (disk image): #: TYPE NAME SIZE IDENTIFIER 0: GUID_partition_scheme +18.1 MB disk7 1: Apple_HFS F-Secure XFENCE 18.1 MB disk7s1 /dev/disk8 (external, physical): #: TYPE NAME SIZE IDENTIFIER 0: GUID_partition_scheme *3.0 TB disk8 1: EFI EFI 209.7 MB disk8s1 2: Apple_HFS Backups 3.0 TB disk8s2
Step 2: Insert USB stick an re-run diskutil list
This time I can see there's a disk9 showing up, with 64GB of size which matches my USB stick size:
[email protected]:/ $ diskutil list /dev/disk0 (internal): #: TYPE NAME SIZE IDENTIFIER 0: GUID_partition_scheme 500.3 GB disk0 1: EFI EFI 314.6 MB disk0s1 2: Apple_APFS Container disk1 500.0 GB disk0s2 /dev/disk1 (synthesized): #: TYPE NAME SIZE IDENTIFIER 0: APFS Container Scheme - +500.0 GB disk1 Physical Store disk0s2 1: APFS Volume Macintosh HD 466.2 GB disk1s1 2: APFS Volume Preboot 24.3 MB disk1s2 3: APFS Volume Recovery 519.0 MB disk1s3 4: APFS Volume VM 12.3 GB disk1s4 /dev/disk2 (disk image): #: TYPE NAME SIZE IDENTIFIER 0: GUID_partition_scheme +30.0 GB disk2 1: EFI EFI 209.7 MB disk2s1 2: Apple_APFS Container disk3 29.8 GB disk2s2 /dev/disk3 (synthesized): #: TYPE NAME SIZE IDENTIFIER 0: APFS Container Scheme - +29.8 GB disk3 Physical Store disk2s2 1: APFS Volume Photos 9.2 GB disk3s1 /dev/disk4 (disk image): #: TYPE NAME SIZE IDENTIFIER 0: Apple_partition_scheme +173.1 MB disk4 1: Apple_partition_map 32.3 KB disk4s1 2: Apple_Driver_ATAPI 4.1 KB disk4s2 3: Apple_HFSX Firefox 173.0 MB disk4s3 /dev/disk5 (disk image): #: TYPE NAME SIZE IDENTIFIER 0: GUID_partition_scheme +80.0 MB disk5 1: Apple_APFS Container disk6 80.0 MB disk5s1 /dev/disk6 (synthesized): #: TYPE NAME SIZE IDENTIFIER 0: APFS Container Scheme - +80.0 MB disk6 Physical Store disk5s1 1: APFS Volume Raven-Core 70.1 MB disk6s1 /dev/disk7 (disk image): #: TYPE NAME SIZE IDENTIFIER 0: GUID_partition_scheme +18.1 MB disk7 1: Apple_HFS F-Secure XFENCE 18.1 MB disk7s1 /dev/disk8 (external, physical): #: TYPE NAME SIZE IDENTIFIER 0: GUID_partition_scheme *3.0 TB disk8 1: EFI EFI 209.7 MB disk8s1 2: Apple_HFS Backups 3.0 TB disk8s2 /dev/disk9 (external, physical): #: TYPE NAME SIZE IDENTIFIER 0: NONAME *62.1 GB disk9
Chances are, your USB stick has a PC standard FAT16/FAT32 filesytem, and will be mounted automatically. Let's check:
[email protected]:/ $ df -h | grep disk9 /dev/disk9 4.1Gi 4.1Gi 0Bi 100% 18446744073707414141 2138557 1704874683337099264% /Volumes/NONAME
Sure enough, it's mounted as /Volumes/NONAME!
Creating Windows bootable USB
IMPORTANT: these steps are only needed for Windows ISOs. If you're burning a Linux ISO, skip this and go to the Creating Linux bootable USB section below, it has its own steps.
Step 3: format USB stick for Windows boot
This single command will erase the USB stick, make it bootable by adding a Master Boot Record (MBR) and create a Windows-friendly filesystem (FAT) on it:
[email protected]:~ $ diskutil eraseDisk MS-DOS "WIN10" MBR disk9 Started erase on disk9 Unmounting disk Creating the partition map Waiting for partitions to activate Formatting disk9s1 as MS-DOS (FAT) with name WIN10 512 bytes per physical sector /dev/rdisk9s1: 30000480 sectors in 1875030 FAT32 clusters (8192 bytes/cluster) bps=512 spc=16 res=32 nft=2 mid=0xf8 spt=32 hds=255 hid=2048 drv=0x80 bsec=30029824 bspf=14649 rdcl=2 infs=1 bkbs=6 Mounting disk Finished erase on disk9
You'll have the new filesystem mounted automatically, as you can see it's empty (1.1MB used of 14GB):
[email protected]:/ $ df -h | grep disk9 /dev/disk9s1 14Gi 1.1Mi 14Gi 1% 0 0 100% /Volumes/WIN10
Great stuff, now we're moving to the next phase: we need to mount the Windows ISO image as a folder and then copy all the files onto the freshly formatted /Volumes/WIN10 USB stick.
Step 4: Mount Windows ISO
Simply go to the directory where you have the ISO image and run the open command for it:
[email protected]:/Volumes/SSD $ open ./Win10_1607_English_x64.iso
You'll have the MacOS Finder window with Windows ISO content pop-up, just ignore it and go back to the terminal.
You should now have it mounted under folder like this:
[email protected]:/Volumes/SSD $ df -h | grep EN-US /dev/disk8 4.1Gi 4.1Gi 0Bi 100% 18446744073707414141 2138557 1704874683337099264% /Volumes/CCSA_X64FRE_EN-US_DV5
Go into that folder and do ls to make sure you can see Windows DVD files there:
[email protected]:/Volumes/SSD $ cd /Volumes/CCSA_X64FRE_EN-US_DV5/ [email protected]:/Volumes/CCSA_X64FRE_EN-US_DV5 $ ls autorun.inf boot bootmgr bootmgr.efi efi setup.exe sources support
Excellent!
Step 5: Copy Windows files onto USB stick
Right, now we have to copy all the files from DVD ISO image onto our new USB stick.
IMPORANT: you should be in the /Volumes/CCSA_X64FRE_EN-US_DV5 directory when running this command below. That's exactly where you are if you just completed Step 4.
The copy will take good 10-15min:
$ sudo cp -r . /Volumes/WIN10/ Password:
There should be no errors returned.
If you remember, in Step 3 we did the df command and the USB filesystem /Volumes/WIN10 was empty.
Just to get an idea that the copy was successful, let's run the df command again to make sure the USB stick has roughly the same amount taken up now – 4.1GB as per output fragments in previous step.
[email protected]:/ $ df -h | grep WIN10 /dev/disk7s1 14Gi 4.1Gi 10Gi 29% 0 0 100% /Volumes/WIN10
Looks good! What's left now is to eject the USB stick:
[email protected]:/ $ diskutil unmountDisk /dev/disk9 Unmount of all volumes on disk9 was successful
and to boot it on the PC as shown below.
Step 6: Boot USB stick on your PC
IMPORTANT: recent enough PCs will likely offer you both legacy boot and UEFI boot. The rule of thumb is to boot UEFI if it's available, especially if you're booting Windows USB stick:
Creating Linux bootable USB
As I said earlier, non-Windows ISOs are much easier to deal with! So after the first 2 generic steps at the start of this post, we'll be taking separate steps for Linux as shown below.
We need to unmount the USB disk we found in Step 2. It's /dev/disk9 in our case:
[email protected]:/ $ diskutil unmountDisk /dev/disk9 Unmount of all volumes on disk9 was successful
Step 3: convert ISO into bootable DMG
WARNING: this is an important step, without it your USB stick won't boot.
So I have this DVD ISO of the CentOS 7.4, let's convert it before burning onto the USB stick.
$ hdiutil convert -format UDRW -o centos ./CentOS-7-x86_64-DVD-1708.iso Reading Master Boot Record (MBR : 0)… Reading CentOS 7 x86_64 (Apple_ISO : 1)… Reading (Type EF : 2)… Reading CentOS 7 x86_64 (Apple_ISO : 3… ............................................................. Elapsed Time: 10m 15.681s Speed: 7.0Mbytes/sec Savings: 0.0% created: /Volume/Stuff/dist/centos.dmg
Step 4: write DMG image onto USB stick with dd
Exellent, now we are ready to burn the ISO image. Let's cd into the directory with all the ISOs that you have and burn it using the dd command.
dd command runs with the help of 3 command line parameters:
- if – specifying source data, that's our ISO image file
- of – specifying the destination file or device, /dev/disk9 in our case
- bs – block size, just needs to be something big enough like 1m (meaning 1 megabyte)
[email protected]:/ $ cd /Volumes/Stuff/dist [email protected]:/Volumes/Stuff/dist $ sudo dd if=./centos.dmg of=/dev/disk9 bs=1m
Depending on the ISO size and the USB stick speed, you'll have to wait 10-20min for this to complete.
Useful tip (cheers Jim!): if you want to confirm your current process, press Ctrl+t in the Terminal app and it should update output with dd progress (I highlighted the output below every tipe I pressed Ctrl+t):
load: 2.53 cmd: dd 11985 uninterruptible 0.00u 0.05s 83+0 records in 82+0 records out 85983232 bytes transferred in 7.441006 secs (11555324 bytes/sec) load: 2.48 cmd: dd 11985 uninterruptible 0.01u 1.26s 2248+0 records in 2247+0 records out 2356150272 bytes transferred in 222.985555 secs (10566381 bytes/sec) load: 2.24 cmd: dd 11985 uninterruptible 0.01u 1.94s 3422+0 records in 3421+0 records out 3587178496 bytes transferred in 339.752252 secs (10558218 bytes/sec)
finally, dd will complete a message like this:
4177+1 records in 4177+1 records out 4380387328 bytes transferred in 415.014562 secs (10554780 bytes/sec)
Step 5: Boot USB stick on your PC
That's it, we're done! Eject the USB stick (no need to run any diskutil commands as it wasn't mounted automaticaly) and boot on your PC.
IMPORTANT: recent enough PCs will likely offer you both legacy boot and UEFI boot. The rule of thumb is to boot UEFI if it's available:
I think there might be a typo. In step 3 we convert an ISO to a DMG. But then in step 4, the instructions still point to the original ISO file, rather than the newly-created DMG file. Is this is a mistake? I instead pointed dd to the new DMG file.
Tip: See the progress of dd command: When dd is running, press ctrl + t in order to see how many blocks and bytes have been written so far, giving you a sense of how long the process will take.
Thanks for this! Not a typo! 🙂 Original post had step 3 missing altogether, so I added it yesterday but forgot to update step 4. Just did it now, so should be a correct procedure.
Great tip! Will try and update the post shortly. Thanks!
something is wrong with step 3. No matter how many times I tried the steps described here, I couldn't get my USB drive to boot
Hi Famzy, are you sure you're burning the DMG that results from Step 3 and not the original ISO image?
I also think something is wrong with step 3. It doesn't produce a bootable USB for me. All the files are on the USB but it simply isn't bootable.
thanks for bringing it to my attention. After further testing and research, I have rewritten this page to have separate (quite different) steps for Windows ISOs and Linux ISOs. Please give it another try? Thanks!
thanks again Jim, procedure rewritten and tested even more. Let me know if you get a chance to try it.
That is indeed helpful, however I followed the steps for Linux (I believe these are the same as before?) and it does not result in a bootable USB fro me unfortunately. Note that I was trying to make a bootable Tails USB. I followed the steps for Windows and that actually worked for Tails 🙂
Thanks for this. You're referring to the intermediary Tails ISO, right?
Yes I am