Make a bootable Windows USB from Kali Linux
As we all know that Ubuntu already comes with an application called Startup Disk Creator, but this can only be used to make Linux bootable USB drives. To make a Windows bootable USB there is an application called WinUsb but it hasn't been updated for a while which can create some problems.
The following guide is up-to-date and works on any Linux distribution as long as it has GRUB and GParted installed and can make bootable USB for any Windows version newer than Vista: Windows Vista, Windows 7, Windows 8, Windows 8.1 and Windows 10. UEFI boot is only supported for Windows 7 x64 and newer.
Before starting, you should be fully aware that there are two types of boot methods. There is the MBR code type where the bootable executable is stored in a reserved section at the beginning of the storage device. And there is the EFI type, where the boot loader executable file is stored at a standard path in an FAT32 filesystem.
You must decide in advance what you will use.
Bellow is the step by step Guide for Creating an Windows Bootable Usb on Kali Linux.
1. Format USB drive:
This is the first step. GParted has a nice GUI and it is easy to use for this. So, plug in your USB flashdrive and start GParted (root permissions required). Select the USB drive and unmount it, otherwise you won't be able to format it. You will see the GParted main window. The first thing to do is select the USB drive.
After this Right-click the USB drive partition and select Unmount
Now You must re-create the partition table by going to the Device menu then select Create Partition Table. Choose
msdos
(or gpt
if you want an UEFI only bootable drive) and click Apply.
Now you will see the following alert box.
After this Right click the unallocated space and select New. Make a primary NTFS or FAT32partition and give it a label too. The label must be as strange as possible because the bootloader will identify the bootable partition by this and you should not use
If you have a customized Windows with windows
like I did in the video! If the filesystem is FAT32 use only uppercase letters. For example: WUSB1840
would be a good label (W
for Windows, USB
for USB flash drive and 18:40
is the time I was writing this). Remember the label as you will need it later.install.wim
larger than 4 GB you should definitely go for NTFS. Otherwise, if you choose FAT32, you could get the flashdrive bootable from UEFI too.
Now Apply all pending operation from Edit menu - Apply all operations or click the button on the main window.
Right click the partition and choose Manage flags. If you chose the msdos
partition table tick boot
. If you chose the gpt
partition table, msftdata
should already be checked.2. Copy Windows files
Quit GParted and use the file manager to copy all files from Windows ISO to USB stick. Mount the ISO using Open with - Disk Image Mounter (if you use Nautilus as a file manager). If that fails you can use Furius ISO Mount and loop-mount the ISO.
Select all files Ctrl+A and Copy to USB drive which will be automatically mounted when you click on it at /media/<username>/<drive_label>
.After the copy process is finished, look in the USB root folder for the boot directory. If it is uppercase, rename it to lowercase.
3. Make it bootable
If you used NTFS filesystem and MSDOS table, only method A is available. If you used FAT32 and MSDOS table, you can apply method A, B or both. If you used GPT partition table, only method B should be followed.
A. MBR bootable
GRUB will be used for that. Open a Terminal and run:
sudo grub-install --target=i386-pc --boot-directory="/media/<username>/<drive_label>/boot" /dev/sdX
Replace:
/media/<username>/<drive_label>
with the path where USB drive is mounted;/dev/sdX
with the USB drive, not the partition (e.g./dev/sdb
)
Wait for it to finish. If everything is OK, you should see:
Installing for i386-pc platform. Installation finished. No error reported.
Now, create a text file and write the following in it:
default=1 timeout=15 color_normal=light-cyan/dark-gray menu_color_normal=black/light-cyan menu_color_highlight=white/black menuentry "Start Windows Installation" { insmod ntfs insmod search_label search --no-floppy --set=root --label <USB_drive_label> --hint hd0,msdos1 ntldr /bootmgr boot } menuentry "Boot from the first hard drive" { insmod ntfs insmod chain insmod part_msdos insmod part_gpt set root=(hd1) chainloader +1 boot }
Replace
That's it. The USB drive is now bootable from BIOS and can be used to install Windows on your PC. The first time you boot from it in MBR BIOS or CSM mode select <USB_drive_label>
with the label from step 1 (you can place it between quotes if it contains a space, although it is not recommended to use spaces in drive label). Save the file as grub.cfg and put it on the USB drive in the boot/grub folder.Start Windows Installation
.B. UEFI bootable
Not all Windows versions are supported. Windows 7 on 64 bits, Windows 8 and newer versions should work.
After the copy process is finished, look in the USB root folder for the efi/boot directory. If there's a bootx64.efi or bootia32.efi file there, then you're done. You can boot from your USB in UEFI mode.If the OS you are making a bootable USB for is Windows 7, browse the efi/microsoftfolder and copy the entire boot folder from this path one level up in the efi folder. Merge folders if boot already exists.
Here is what to do if you don't have the bootx64.efi file in efi/boot folder. Browse the mounted Windows ISO image into the sources folder. Open install.wim (or install.esd) with your archive manager (you will need
7z
installed). Go to the path ./1/Windows/Boot/EFI
and extract the file bootmgfw.efi anywhere you want. Rename it to bootx64.efi and put it on the USB drive, in the efi/boot folder. If you can't find bootmgfw.efi in install.wim then you probably have a 32 bit Windows ISO or other types of images (recovery disks, upgrade versions).You can now boot from your USB in UEFI mode.
While following these steps you can encounter some of these errors the errors with there fixes are given bellow:
Errors:
1. modinfo.sh
doesn't exist
grub-install: error: /usr/lib/grub/i386-pc/modinfo.sh doesn't exist. Please specify --target or --directory.
Install the
grub-pc-bin
package with sudo apt install grub-pc-bin
and run the grub-install
command again.
2. Embedding errors
If you get embedding errors (something like
filesystem 'x' does not support embedding
or Embedding is not possible
), be sure you are installing GRUB to USB device and not USB partition. Most likely you typed /dev/sdb1
instead of /dev/sdb
(sdb
is just an example here). If it still doesn't work, try zeroing the USB drive (at least some sectors at beggining) or use a different USB flash drive.Sometimes, GRUB will not want to install on some flash drives. Try to force it by adding
--force
argument to the grub-install
command.The root partition selection may fail if your USB flash drive partition has the same label as one of the partitions on the target computer. The best way of setting the root partition is by UUID.
Partition UUID
In grub.cfg, replace the line:
search --no-floppy --set=root --label <USB_drive_label> --hint hd0,msdos1
with:
insmod search_fs_uuid search --no-floppy --fs-uuid --set root <drive_UUID>
where you will replace
Still getting errors? If you want an useful answer, please post a comment with the complete <drive_UUID>
with the UUID you got from GParted.grub-install
command and the error message.
No comments
If you have any doubts, please let us Know.