Generally, the only reason for which you may need to create a bootable Windows CD is when you have updated the operating system installation files with the latest Service Pack (slipstream). Even in this case, chances are that most users will rather use standard windows software to create the bootable CDs than mkisofs under Linux, but, even for this extremely rare case, here is how to accomplish this task.
For the following operation the Linux native mkisofs version 2.01 (or genisoimage), which is shipped with Fedora (and with every other Linux distribution), was used.
The Windows port of mkisofs and, generally, the Win32 binaries of all the utilities included in the cdrtools package can be found in the Cdrtools: Win32 Binaries page. Please note that the page also includes a Win32 binary version of the latest (unstable) version of cdrtools. It is highly recommended to use the latest stable version.
So, change to the directory that contains the Windows installation files and issue the following command:
mkisofs \ -b cdboot/msboot.img -no-emul-boot -boot-load-seg 1984 -boot-load-size 4 \ -iso-level 2 -J -l -D -N -joliet-long -relaxed-filenames \ -V "WINSP" \ -o ../winsp.iso .
The above command ends with a dot (.).
All of the above flags seem to be necessary in order to relax many of the ISO restrictions. For more information about each of them please refer to the mkisofs (or genisoimage) manual page (man 8 mkisofs
).
This tip assumes that the boot image which is used in the Microsoft bootable CDs is available and that it has been placed in a cdboot/
subdirectory under the windows installation files root dir:
. cdboot/msboot.img other_dir/some_other_file file1 file2
I admit that this is a nasty workaround, but I didn’t have enough time to investigate why the -b option caused that much trouble. The path to the boot image which is supplied with the -b option is supposed to be a relative path to the path of the root directory of the windows files, which is our current directory, aka (.). But, everytime I placed the msboot.img outside the win files directory and used -b ../msboot.img
, mkisofs complained with the following pesky error message:
mkisofs: Uh oh, I cant find the boot image '../msboot.img' !
It didn’t make any sense, so I did not bother any more with it. If you have any info on this or if I miss anything, which is rather possible since I have spent very little time with this, your feedback is appreciated.
The above command will produce an image of a bootable Windows CD, which will also contain the boot image. But, this should not be a problem in any case.
Note that the ISO image will be saved in the parent directory of the one that holds the Windows files.
Note: How to integrate a service pack into a Windows OS is beyond the scope of this document. There are numerous guides out there that cover this topic in great detail.
How to create a Windows bootable CD with mkisofs by George Notaras is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
Copyright © 2007 - Some Rights Reserved
Hi, good guide.
On the last part you question why doesn’t the -b switch gives error. It is indeed expecting the boot loader to be inside the folder and if you intend to place on a subfolder, the path needs to use something like this: -b -b “Boot/etfsboot.com” for recent Windows PE boot disks.
@Nuno, Thanks for your feedback.
Hey George,
Great guide, I am trying to create a bootable Windows ISO on linux, I’ve got a windows install cd iso as a source and I want to make a copy of it that I can modify for an unattended install and re-roll into an iso with mkisofs. There is no msboot.img on my source iso, there is boot/etfsboot.com which I think serves the same purpose? This is how I created the ISO, but the resulting ISO was not bootable :( Any ideas?
mkisofs \
-b boot/etfsboot.com \
-no-emul-boot -boot-load-seg 1984 \
-boot-load-size 4 -iso-level 2 -J -l -D -N \
-joliet-long -relaxed-filenames \
-V “WINSP” \
-o /opt/Windows.iso \
/opt/WindowsCD/
man, you make my day, thank you so much!!
mkisofs -bboot/etfsboot.com -no-emul-boot -boot-load-seg 1984 -boot-load-size 4 -iso-level 2 -J -l -D -N -joliet-long -relaxed-filenames -V “WINSP” -o /opt/Windows.iso /opt/WindowsCD/
should work, it’s strange that the -b cannot have a space between -b and -b won’t work, but -b will
Hi,
I am using command
genisoimage -bboot/etfsboot.com -no-emul-boot -boot-load-seg 1984 -boot-load-size 4 -iso-level 2 -J -l -D -N -joliet-long -relaxed-filenames -V “Win2012” -o /win2012.iso and it produces an ISO file but it hangs just after start without booting.
Any ideas?
This works for me
genisoimage -bboot/etfsboot.com -no-emul-boot -iso-level 2 -udf -J -l -D -N -joliet-long -relaxed-filenames -o win81.iso extracted