Making a Bootable Windows Install Flash Drive in Linux
2013-11-13
Making a bootable flash drive for installing Windows is a bit more involved than you would think, but it’s still easy. Making a bootable linux flash drive is as simple as using dd to write the iso image directly to the flash drive. Here are the steps involved to make it work with a Windows install.
Partition the drive.
Create a single NTFS partition on the drive, and make it bootable.
sudo fdisk /dev/sdc
Assuming /dev/sdc
is your flash drive of course.
In fdisk, first do o
to create a new empty partition table. Second, n
to create a new partition.
Use the defaults for anything it asks. Then t
to change the type. Change the type to 7
for NTFS.
Last step is a
to make the partition bootable. Then w
to write the changes to the drive.
Format and copy data.
Now that the drive is partitioned, it’s time to create an NTFS filesystem and copy the data over.
sudo mkntfs -f -L Win7 /dev/sdc1
The -f
option is for fast format. Otherwise it writes zeroes to the whole drive. We don’t want to wait for that.
The -L
option allows you to specify a volume label. Make it whatever you want. Enclose in quotes if you want spaces in your label.
Personally I avoid spaces whenever possible.
Finally /dev/sdc1
is the partition we created with fdisk.
Next you will need to copy the contents of the install disc to your flash drive. I usually mount the iso as loopback, but of course a physical disc will work just as well.
Create directory to mount to if using loop.
mkdir loop
Mount the iso.
sudo mount -o loop windows7.iso loop
I usually just unplug and replug the flash drive so it will automatically mount. Then copy the contents over.
rsync -av loop/ /media/win7/
Where loop/
is where the iso or disc is mounted. The trailing slash is important.
And /media/win7/
is where the flash drive is mounted.
After it’s done copying, you can unmount the flash drive and iso or disc.
sudo umount loop
sudo umount /media/win7
Write a bootloader.
The last step is to use ms-sys to write a bootloader to the flash drive. You can download the source code from their website.
http://ms-sys.sourceforge.net/
Download and compile it. You shouldn’t need to install any dependencies.
Finally, the command to write the bootloader.
sudo ms-sys-2.2.1/bin/ms-sys -7 /dev/sdc
Note that here I’m running the ms-sys binary directly from the tree the source was extracted to, without installing it on the system.
If you install it, replace ms-sys-2.2.1/bin/ms-sys
with ms-sys
.
The -7
option is for a Windows 7 bootloader. You can use -m
instead for an XP bootloader.
That’s it. You should be able to boot from the flash drive and install Windows much faster than from an optical disc.