I have:
- ISO image of Windows 7 install media
- 4 GB USB flash drive
- no DVD drive
- Linux installed
I have:
OK, after unsuccessfully trying all methods mentioned here, I finally got it working. Basically, the missing step was to write a proper boot sector to the USB stick, which can be done from Linux with ms-sys or lilo -M. This works with the Windows 7 retail version.
Here is the complete rundown again:
Install ms-sys - if it is not in your repositories, get it here. Or alternatively, make sure lilo is installed (but do not run the liloconfig step on your local box if e.g. Grub is installed there!)
Check what device your USB media is assigned - here we will assume it is /dev/sdb. Delete all partitions, create a new one taking up all the space, set type to NTFS (7), and remember to set it bootable:
# cfdisk /dev/sdb or fdisk /dev/sdb (partition type 7, and bootable flag)
Create an NTFS filesystem:
# mkfs.ntfs -f /dev/sdb1
Write Windows 7 MBR on the USB stick (also works for windows 8), multiple options here:
# ms-sys -7 /dev/sdbsudo lilo -M /dev/sdb mbr (info)sudo dd if=/usr/lib/syslinux/mbr/mbr.bin of=/dev/sdbMount ISO and USB media:
# mount -o loop win7.iso /mnt/iso # mount /dev/sdb1 /mnt/usb
Copy over all files:
# cp -r /mnt/iso/* /mnt/usb/ ...or use the standard GUI file-browser of your system
Call sync to make sure all files are written.
Open gparted, select the USB drive, right-click on the file system, then click on "Manage Flags". Check the boot checkbox, then close.
...and you're done.
After all that, you probably want to back up your USB media for further installations and get rid of the ISO file... Just use dd:
# dd if=/dev/sdb of=win7.img
Note, this copies the whole device! — which is usually (much) bigger than the files copied to it. So instead I propose
# dd count=[(size of the ISO file in MB plus some extra MB for boot block) divided by default dd blocksize] if=/dev/sdb of=win7.img
Thus for example with 8 M extra bytes:
# dd count=$(((`stat -c '%s' win7.iso` + 8*1024*1024) / 512)) if=/dev/sdb of=win7.img status=progress
As always, double check the device names very carefully when working with dd.
The method creating a bootable USB presented above works also with Win10 installer iso. I tried it running Ubuntu 16.04 copying Win10_1703_SingleLang_English_x64.iso (size 4,241,291,264 bytes) onto an 8 GB USB-stick — in non-UEFI [non-secure] boot only. After execution dd reports: 8300156+0 records in 8300156+0 records out 4249679872 bytes (4.2 GB, 4.0 GiB) copied, 412.807 s, 10.3 MB/s
Reverse if/of next time you want to put the Windows 7 installer onto USB.
ms-sys - Just set the boot flag in GParted.
– l0b0
Nov 17 '11 at 22:09
sync command? Just like that? Where do I need to be located?
– Erik Escobedo
Jun 30 '16 at 02:44
sdb, and executing commands one by one from the site to the terminal, changing the b to something else each time, can be a risky business!
– Déjà vu
Oct 27 '17 at 06:10
fdisk, if you need to create a partition table, type o (MBR).
– Déjà vu
Oct 27 '17 at 06:44
gparted to set the boot flag, as it was done during the fdisk step? (btw, better unmount /mnt/usb before using gparted!)
– Déjà vu
Oct 27 '17 at 07:03
ms-sys -n /dev/sdb1 before ms-sys -7 /dev/sdb (all that after copying the files). See https://wycd.net/posts/2015-03-10-creating-a-bootable-windows-10-usb-drive-on-linux.html
– gsc
Oct 10 '20 at 07:51
ms-sys -n /dev/sdb1 on the partition like the commenter above. The ms-sys manual says that this flag "is probably of no practical use" but it seems that it is in this case. So to clarify, you need to run ms-sys -7 on the BLOCK DEVICE (i.e. /dev/sdb) and ms-sys -n on the PARTITION (i.e. /dev/sdb1).
– JShorthouse
Nov 29 '21 at 21:30
You can accomplish this with dd, if your PC supports UEFI, and, by extension, GPT disks.
Open up a terminal, your going to need to find what device is your pendrive. If you have the drive mounted you can find the name of the device by typing "mount" and looking at it's entry. Something like the following:
/dev/sdb1 on /media/USBDISK type vfat (rw,nosuid,nodev,uhelper=hal,uid=1000,utf8,shortname=mixed)
In this case the first partion of /dev/sdb is mounted at /media/USBDISK. Open a root shell and unmount the drive.
umount /dev/sdb1
Go to the directory where your ISO is stored in a root shell and type in the following: (Replace windows7.iso with whatever the iso is called, and /dev/sdb with the device id of your usb stick).
dd if=windows7.iso of=/dev/sdb
If your motherboard supports booting off of a pendrive it should be able to boot off it. This will get the installer on the pendrive not the OS itself.
PCambell's suggestion is good but you will also want to clear the MBR, the linux equivalent is below
I tried this and it worked (I'm not sure why the dd method failed but seems the partition had to be ntfs?):
Instead of
dd if=windows7.iso of=/dev/sdb
you write as root,
dd if=windows7.iso of=/dev/sdb1
(ADD 1 at the end or whatever your USB drive is placed at.)