Deep Dive: Combining Windows Deployment Services & PXELinux for the ultimate network boot

In a previous article, Installing Linux via PXE using Windows Deployment Services (WDS), I talked about using PXELinux to enable deployment of WDS images, Linux distros and a multitude of tools. It got a bit heavy when trying to make this all work but the system is now up & running and we have already benefitted from it on many occasions. So here is my guide for Microsoft admins wanting to enhance their existing Windows Deployment Services server.

Step One – Install WDS

This should be obvious and if you are reading this I imagine you’ve done it already. Ours is running on a Windows Server 2003 box but it should work fine with the latest, more secure, stuff.

  • We will be adding bits to the folders within the \\WDS\REMINST share

Step Two – Install PXELinux

PXELinux is part of the SysLinux package

  • Download SysLinux from here
  • There’s quite a bit in SysLinux but you only need to extract the following files
    • ZIP\core\pxelinux.0
    • ZIP\com32\menu\vesamenu.c32
    • ZIP\com32\modules\chain.c32
  • Copy the files into \\WDS\REMINST\Boot\x86
  • Rename pxelinux.0 to
  • You also need to make copies of two original WDS files in this folder
    • Copy pxeboot.n12 and rename it to pxeboot.0
    • Copy and rename it to abortpxe.0
  • Create to new subfolders
    • \\WDS\REMINST\Boot\x86\Linux
    • \\WDS\REMINST\Boot\x86\pxelinux.cfg
  • The pxelinux.cfgfolder is where you store the files that make up the PXE boot (F12) menu.
    • All the files we will put in there are text files, even though they don’t use a .txt extension
  • First create a new text file called default.  This is the first menu that loads.
  • Paste the following text into it
    DEFAULT      vesamenu.c32
    PROMPT       0
    MENU TITLE PXE Boot Menu (x86)
    MENU INCLUDE pxelinux.cfg/graphics.conf
    MENU AUTOBOOT Starting Local System in 8 seconds
    # Option 1 - Exit PXE Linux & boot normally
    LABEL bootlocal
          menu label ^Boot Normally
          menu default
          localboot 0
          timeout 80
          TOTALTIMEOUT 9000
    # Option 2 - Run WDS
    LABEL wds
    	 MENU LABEL ^Windows Deployment Services
    	 KERNEL pxeboot.0
    # Option 3 - Exit PXE Linux
    LABEL Abort
    	MENU LABEL E^xit
    	KERNEL abortpxe.0
  • Now create a text file called graphics.conf
    • This file controls how the menu is displayed. It’s very versatile so have a play around until it looks as basic or as flashy as you like
  • Paste the following text into it
    MENU ROWS 16
    MENU COLOR BORDER 30;44		#00000000 #00000000 none
    MENU COLOR SCROLLBAR 30;44		#00000000 #00000000 none
    MENU COLOR TITLE 0 		#00269B #00000000 none
    MENU COLOR SEL   30;47		#40000000 #20ffffff
    MENU BACKGROUND background.jpg
  • If you want to use a custom background, place it in the \\WDS\REMINST\Boot\x86folder.
    • The image should be a 640×480 jpeg file.
    • Make sure it has the same name as specified in the MENU BACKGROUND line in graphics.conf
  • Now we need to change the default boot program in WDS
    • Open the Windows Deployment Services Console
    • Right Click on your Server and select Properties
    • From the Boot tab change the default boot program for x86 architecture to \Boot\x86\
    • In Server 2008 R2 you have to use the wdsutil  command line to set the the default boot program with these commands
wdsutil /set-server /bootprogram:boot\x86\ /architecture:x86
wdsutil /set-server /N12bootprogram:boot\x86\ /architecture:x86

Step Three – Test it out

Before you go any further, do a test PXE boot to check everything is OK.

I use a Hyper-V VM to make this testing process quicker. Just make sure it’s set to boot to a legacy network adapter in the settings

Image Source:

If it doesn’t load make sure you have the following files and folders in the right place within the \\WDS\REMINST share

  • \Boot\x86\
  • \Boot\x86\vesamenu.c32
  • \Boot\x86\chain.c32
  • \Boot\x86\pxeboot.0
  • \Boot\x86\abortpxe.0
  • \Boot\x86\background.jpg
  • \Boot\x86\Linux\
  • \Boot\x86\pxelinux.cfg\
  • \Boot\x86\pxelinux.cfg\default
  • \Boot\x86\pxelinux.cfg\graphics.conf

Step Four– Add new boot options

If you can boot into the new menu and still load WDS then we are ready to add our Linux distros and other tools. If not, go back to step one and check everything.

This stage is relatively easy. It is just a case of putting the relevant netboot files for your preferred distribution in to the \Boot\x86\Linux folder and then adding a menu option for them. You can find more info on where to get these from on the official WDSLinux wiki. I’ll show you a more generic way of doing things using Debian as an example

  • Create a new subfolder
    • \Boot\x86\Linux\Debian\
  • Download the netboot files (initrd.gz and linux) from a Debian mirror
  • Copy them into the Debian subfolder
  • Create a menu entry for them in \Boot\x86\pxelinux.cfg\default
    LABEL debian6Netinstall
    	menu label ^Debian 6-0 Net-install
    	# Load the correct kernel
    	kernel /Linux/Debian/Linux
    	# Boot options
    	append priority=low vga=normal initrd=/Linux/Debian/initrd.gz

That’s all there is to it. As long as you download the correct files and boot the correct boot options on the append line of the menu, you should be OK.

What if I need 64-bit options

This is easy too just replicate everything we did in \Boot\x86 into \Boot\x64. Don’t forget to change the WDS Server boot program for the x64 architecture (as shown in step 2) to \Boot\x64\

Taking it further

Hopefully you are reading this because you have numerous ideas of what you could boot to. To help you along I’ve included my current default menu as well as adding sub-menus for Linux and Tools. Most of them were fairly straightforward as they had special PXE version with instructions on their website, e.g. GParted & Clonezilla


DEFAULT      vesamenu.c32
PROMPT       0

MENU TITLE PXE Boot Menu (x86)
MENU INCLUDE pxelinux.cfg/graphics.conf
MENU AUTOBOOT Starting Local System in 8 seconds

# Option 1 - Exit PXE Linux & boot normally
LABEL bootlocal
      menu label ^Boot Normally
      menu default
      localboot 0
      timeout 80
# Option 2 - Run WDS
	 MENU LABEL ^Windows Deployment Services
	 KERNEL pxeboot.0
# Go to Linux sub-menu
LABEL linux
	MENU LABEL ^Linux Distros
	KERNEL vesamenu.c32
	APPEND pxelinux.cfg/graphics.conf pxelinux.cfg/
# Go to Tools sub-menu
LABEL tools
	KERNEL vesamenu.c32
	APPEND pxelinux.cfg/graphics.conf pxelinux.cfg/
# Exit PXE Linux
	KERNEL abortpxe.0 (save in same place default)

MENU TITLE Install a Linux Distro

LABEL debian6.0-amd64-Netinstall
	menu label ^Debian 6-0 amd64-Net-install:
	kernel /Linux/Debian-Net-Install-amd64/Linux
	append priority=low vga=normal initrd=/Linux/Debian-Net-Install-amd64/initrd.gz

LABEL Centos5.0-Install
	menu label ^Centos 5-0 32bit install:
	kernel /Linux/Centos-5.0-32-bit/vmlinuz
	APPEND ks initrd=Linux/Centos-5.0-32-bit/initrd.img ramdisk_size=100000

LABEL Debian-5.08-Installer
	menu label ^Install 5.08 (Lenny)
	kernel /Linux/debian-installer/i386/linux
	append vga=normal debian-installer/allow_unauthenticated=true  initrd=/Linux/debian-installer/i386/initrd.gz

LABEL Main Menu
      MENU LABEL ^Back to Main Menu
      KERNEL vesamenu.c32
      APPEND pxelinux.cfg/default (save in same place default)


LABEL memtest
	menu label ^Memory Test: Memtest86+ v4.20
	kernel \Linux\memtest\memtestp
LABEL Clonezilla Live
	MENU LABEL ^Clonezilla Live
	kernel \Linux\Clonezilla\vmlinuz
	append initrd=\Linux\Clonezilla\initrd.img boot=live live-config noswap nolocales edd=on nomodeset ocs_live_run="ocs-live-general" ocs_live_extra_param="" ocs_live_keymap="" ocs_live_batch="no" ocs_lang="" vga=788 nosplash fetch=
LABEL gparted
	MENU LABEL ^GParted Live
	kernel \Linux\gparted\vmlinuz
	append initrd=\Linux\gparted\initrd.img boot=live config  noswap noprompt  nosplash  fetch=
		GParted live version: 0.8.1-3. Live version maintainer: Steven Shiau
		Disclaimer: GParted live comes with ABSOLUTELY NO WARRANTY
LABEL Main Menu
	MENU LABEL ^Back to Main Menu
	KERNEL vesamenu.c32
	APPEND pxelinux.cfg/default


This is a really useful tool to have in our SysAdmin arsenal. I encourage you to give it a go. Let me know if your successful, or if you are having any problems getting it working, in the comments section. I’d also love to hear of any other tools you’ve added to the PXE menu.


148 thoughts on “Deep Dive: Combining Windows Deployment Services & PXELinux for the ultimate network boot

  1. Nice work Thom.

    I’ve had something very similar up and running for a little while which might add an idea or two to the mix.

    My pxelinux files:

    \\{server}\REMINST\Boot\pxelinux\pxelinux.0 – The boot loader
    \\{server}\REMINST\Boot\pxelinux\menu.c32 – The basic menu system suits me
    \\{server}\REMINST\Boot\pxelinux\chain.32 – A hard disk boot loader
    \\{server}\REMINST\Boot\pxelinux\memdisk – A floppy image boot loader
    \\{server}\REMINST\Boot\pxelinux\pxelinux.cfg\default – pxelinux’s default configuration file.

    I then manually configured my DHCP to point the PXE Client to the PXELinux bootloader. i.e.
    DHCP Option 66 (Boot Server Host Name): “ct-deploy.act.rpl.local”
    DHCP Option 67 (Boofile Name): “boot\pxelinux\pxelinux.0” *

    * WDS/RIS enables MS’s own Trivial FTP Daemon, a network service which responds to PXE Clients. The daemon is configured in the registry to set a root folder, (HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TFTPD\Parameters\ Directory = “D:\RemoteInstall”) hence the path to the bootloader in DHCP Option 67

    My pxelinux is currently configured with three boot options:

    DEFAULT menu.c32
    PROMPT 0

    TIMEOUT 30 – Time in tenths of a second before default option is selected. Overridden by cursor up/down.

    LABEL Boot Local
    MENU LABEL ^Boot from the hard-disk
    MENU default
    KERNEL chain.c32
    APPEND hd0 0

    LABEL Windows Deployment Services – Boot the original 32bit WDS bootloader
    MENU LABEL ^Windows Deployment Services
    KERNEL ../x86/wdsnbp.0
    APPEND keeppxe

    LABEL Ghost Client
    MENU LABEL ^Ghost Client
    KERNEL memdisk
    APPEND initrd=GhostBoot.img

    The Ghost Client is a mountable MS-DOS floppy image (*.img created with WinImage or similar) which allows me to quickly multicast a Ghost image to many PCs at once from a Ghost Server.


  2. Very useful, thank you
    Would it be possible to use this setup to perform bare-metal restores?
    I’m referring to using images (including system state) taken from fully configured servers, running specific applications or databases?


    1. You can use WDS to capture an image of a computer to be restored at a later date by using the Capture image as mentioned in the comment above. To fully automate it you would need to use the paid-for Microsoft System Center software but if you are able to be physically at the machine then you only need WDS

      1. Do you happen to know whether “Capture image as” could work with a backup image produced by Volume Shadow Service?


  3. My Ghost deployment using pxelinux is essentially a bare metal restore. There’s no reason why you couldn’t put together a network boot disk (DOS or Linux) that could perform the kind of restore you’re trying for (*.bkp ?).

    1. Since you’ve already set up WDS you could just boot WinPE and use ImageX (no need for a Ghost license). I use ImageX for full machine backup and bare metal restore.

      1. That’s true (and I have used this in the past) but I prefer the GUI management tools that WDS provides that achieves the same goals. Same underlying tech anyway 🙂

      2. Completely agree with you both. Guess i’ve been spoilt by Ghost for too many years to want to give it up. 🙂

  4. I’m going to try to follow this tomorrow. I will post if I have any problems. Although I must say, it does look very well written and thought-out compared to some of the others I’ve looked at. One problem to get started with may be this: I have just clicked the link [Download SysLinux from here] in Step Two and received a page stating, “The Syslinux website is currently out of order.”

    I’m hoping to be able to boot BackTrack x64 and Ubuntu x64 via WDS. I have just tested Windows 7 x64. It booted fine. But I cancelled it after getting to the Language Selection screen (I just wanted to make sure it was working).

  5. Hi the bootloader works fine.
    I have one problem how i add images to the bootloader?
    I have a Projekt on our vocational school in styria austria i must deploy ubuntu withe pxe boot .

    i hope you can help me thank you for your answer

    1. I’ve just set this up myself and it seems to be working fine. Follow the instructions below and let me know how you get on.

      1. Go to the Ubuntu “netboot” website
      2. Click on the latest release e.g. Ubuntu 11.10 (Oneiric Ocelot)
      3. Select an architecture to match the PC you are deploying to e.g. i386
      4. Download netboot.tar.gz
      5. Unzip netboot.tar.gz
      6. Unzip netboot.tar
      7. The unzipped folder contains 2 files you need in \ubuntu-installer\i386, these are initrd.gz and linux
      8. Copy these to files into your PXE boot folder e.g.\\WDS-Server\REMINST\Boot\x86\Linux\Ubuntu\
      9. Edit your PXELinux menu (in \\WDS-Server\REMINST\Boot\x86\pxelinux.cfg\default) to include the boot commands. I used a new separate sub-menu of my Linux Menu, which you can see below
      10. MENU TITLE Ubuntu 1.10 x86 (Oneiric Ocelot) Netboot Install
        label install
        menu label ^Install
        menu default
        kernel /Linux/Ubuntu/linux
        append vga=788 initrd=/Linux/Ubuntu/initrd.gz -- quiet
        label cli
        menu label ^Command-line install
        kernel /Linux/Ubuntu/linux
        append tasks=standard pkgsel/language-pack-patterns= pkgsel/install-language-support=false vga=788 initrd=/Linux/Ubuntu/initrd.gz -- quiet
        LABEL Linux
        MENU LABEL ^Back to Linux Menu
        KERNEL vesamenu.c32
        APPEND pxelinux.cfg/ pxelinux.cfg/graphics.conf
      11. Now start up a client and boot via PXE and test if it works!

      This worked for me. After the setup runs it will look for an ubunto mirror to download the rest of the setup files over the internet.
      BTW, I got the code from point 10 from the netboot download in the file \ubuntu-installer\i386\boot-screens\txt.cfg
      You might find more help here »

  6. Hi i have an other problem how can i add my own mirror server in the neetboot installer of ubuntu i must everytime download from the internet the installations files.


    1. You can do this by having a copy of the full install version of Ubuntu hosted by IIS on the same server as WDS. Then, when the setup asks for a mirror to choose just point the installer to http://WDSServer/VirtualDirectory. You should find more info on this in the Ubuntu help site. They will probably recommend apache as a webserver but IIS is fine for this purpose

      1. After the netboot starts it will get to the stage where it asks if you want to auto-select a mirror or specify your own. Just type the URL there.
        I haven’t done this for ubuntu but have for Debian so I guess it’s similar.

    1. I think you’ve misunderstood the process. A virtual directory is just a term used by Microsoft’s IIS web server for a local folder that can be accessed by HTTP or FTP (read more:

      If you want to install an ubuntu image you could use clonezilla or point to a CD copy on your network as described in the Official ubuntu help linked to in previous comments

  7. My situation is slightly different in that I’ve had my IT dept follow this:

    So that I can have control over the Linux end of it, but I’m stuck as to my next step, since I know I can’t have control over the DHCP server either.

    So, I’m basically wanting to do what you did, but don’t have control of either the WDS server or the DHCP server, nor can I use my Linux PXE server as a DHCP server in the traditional sense. Help!

      1. Modify the WDS settings how? Serve both of what? DHCP and PXE? I’m in an enormous corporate environment, and another DHCP server is the last thing they want, and in any case that’s completely out of my purview or interest. I just need control over the PXE booting of the Linux portion only. They’ve got the WDS server PXEChaining out to my test server now and I hope to pick up the ball from there. I just don’t know how to do that.

      2. OK, I just properly read the article you linked to and know understand what you are trying to do. I’m afraid I only have experience hosting it all on one box (i.e. the WDS server).

        From my limited knowledge, when using PXE-chaining you don’t need to involve DHCP. Just set up your linux PXE server as normal but skip the DHCP bit. It’s not needed as your client already has an IP address passed over from the initial menu provided by the WDS server.

      3. Arriving at work, I read your comment another way. Are you saying that it’s best to configure WDS ONLY? Then I have to go through a whole different, totally ignorant about Linux group in order to make any changes, and I had hoped to avoid that.

      4. No I’m not saying that. You have two options,
        1) Have WDS host everything. You can then add images/new menus by just adding them to a folder share on the WDS server (as I have done in this article)
        2) You have a WDS server that chains to another PXE server hosting all your Linux images and menus. The network won’t mind having 2 PXE servers because DHCP will only point to the WDS one

      5. Thanks for your reply. I am not able to do the first, as I have no control over that machine, only IT does, and even getting this test environment took a month of delay. The second is what I am setting up, but the question is how, specifically, to do that. I’m in a huge learning curve here and am looking for some help as to why I get the error message I’m getting, etc.

  8. i am not success to install Linux through via pxe Linux getting error after boot menu unable to download the kickstart file modify the kickstart parameters below or press cancel to interactive installation

      1. dear i also use it but i think main problem is that they could not load
        lan drivers
        when i boot they getting error unable to find any drivers

        i do not thik about it how to add lan drives this image …………….

  9. i originally used the set up guide found on the SYSLINUX website (down at time of this post–go figure) and i decided to make a couple of changes which seem to be easier to deal with.
    to possibly add to a previous question — in order for your client to be able to PXE boot you need to specify two DHCP options (66 and 67) which specify boot server and boot file; respectively. if you are not able to set those options your client will never know how to PXE boot.

    as in this article (extremely helpful) i set the bootprogram to for both architectures (i386 & x64) but i do not call it from option 67. i instead call “\boot\x64\” as a server option. the cool part is this file will auto detect hardware capabilities and give you an i386 or x64 boot menu. this is very handy indeed.

    my deployment at a glance:
    DHCP server is a separate box
    PXE server is Windows 2008R2 as a VM (2 CPUs and 2048RAM)

    Thank you!

  10. Hi, just wanted to say nice document. I’ve been playing around on the linux side, (ideally I’d love to build a super PXElinux boot server system..) and its an expansive subject. I’ve chosen a simpler route on the GFX. The pxelinux (syslinux as well) has support for two commands –
    MENU BACKGROUND name of pic (example MENU BACKGROUND linux.png)
    This sets the size of menu screen and places a picture there.

    One of the observations I have is reading through the docs and deployments just how wide an array of ‘how to’ has been reached, often by different ways and methods.

    Thanks for your article!

  11. Can anyone help me with a Zorin install. I have everything working up to my boot menu. I have Zorin ISO images. 5.1, 5.2, and 6 lite. I can not find the linux kernel.

  12. I am having trouble getting the to launch when booting from PXE. When I boot, I get
    TFTP Download boot\x64\
    over and over and then eventually the download fails. I am missing something here but am not quite sure what it is. I am running WDS on 2008R2. Is there a separate pxelinux.0 for x64 architecture?

  13. I stumbled upon this article today after doing some research on PXE, WDS, Linux etc. and I have to say your solution is great. For me certain things are working and others aren’t and being a Linux newbie, i’ll probably have to work at it longer to get things fully functional.

    I’m running WIndows Server 2008 R2 x64 with WDS which enables me to deploy all versions of Windows, but I was looking for something to enable me to run utilities such as memtest, acronis recovery, ghost, burnin software etc.thru PXE instead of having to create CDs, DVDs and USB keys. So far I have the basics setup and functional. With the default menu I can launch WDS, install UBUNTU (from a repository) and launch memtest86 4.0a.

    I could not get your memtest86+ 4.20 to work, so I searched for something else and found memtest86 4.0a worked. I’m still trying to figure out how to get Clonezilla to work as everything boots fine but near the end it is unable to load a file system. So I imagine that the “filesystem.squashfs” is not configured properly in my append section.

    Thanks for posting this as it has been a real help for something that I have wanted to do for a long time.

  14. Also having issues with the squashfs and fetching http requests. I setup iis and set a meme type for the squashfs so that I can download the squashfs file from a web browser but that didn’t seem help.

  15. after doing the all steps when i click on WDS menu on clinet pc then error shows up “file \boot\bcd an error occurred while attempting to read boot configuration data”
    even my linux distributions is booting sucessfully
    any need full idea

  16. hi, nice guide 🙂
    it’s too bad that is not work on isolinux 5 there is error
    if you know how to fix the error i be heppy..

    I have a question:
    It is possible to look option in the menu or the menu is self with password?
    thank you

  17. I’ve had a PXELINUX/WDS setup running for some time now, and looking at add Clonezilla to it. I noticed that the way thommck has it set up is to load Clonezilla via HTTP. Rather than have to step up HTTP services on the WDS box, I’d like to use TFTP as Clonezilla’s own documentation uses. That’s where things get a bit hairy. Still working on it, but it’s not as straightforward as I’d like it to be.

  18. First of all Thanks for the wonderful article, it helps me lot.
    i want to fully automate the Linux installation process like i have used kickstart file for the redhat6 installation but currently i have to select the redhat6 OS from the PXE menu at boot time. i want to automate this step also, is there any way to achieve this?
    I am using WDS with Windows server 2008 R2. for windows OS there is a way like we can set the default client unattended file for the prestaged machine using below command:
    WDSUTIL /Set-Device /Device:Computer1 /WDSClientUnattend:WDSClientUnattend\Unattend.xml

    1. You should be able to select an item on the PXE menu as the default timeout option. Normally it is set to boot to the hard drive but you should be able to set it to any menu item.
      Would that help?

      1. Thanks for your quick reply, but in case of multiple linux os like redhat 5, 6 and some others, can i select required OS at runtime through any external command?

  19. Nice Walk through..
    I’ve been trying to set this up with syslinux-4.06 (5.0) doesn’t work. I had to repeat the default commands for server 2012 for the x64 arch also. Hopefully this will safe someone the couple hours it took me to figure it out. so ……..repeat..rinse…
    wdsutil /set-server /bootprogram:boot\x86\ /architecture:x64
    wdsutil /set-server /N12bootprogram:boot\x86\ /architecture:x64
    Thanks for the post made this a relative breeze

  20. Cool blog! Is your theme custom made or did you download it from somewhere?
    A theme like yours with a few simple adjustements would
    really make my blog stand out. Please let me know where you got your design.
    Bless you

  21. My submenus are not working. When i select them in the PXE boot screen it loads to a screen with a boot: prompt

    1. I had a similar problem at first.
      I think it is caused by the pxelinux.cfg files in the menu’s not linking correctly after you change them from the defaults. Have a look through them and make sure they actually contain usable commands

      1. Thanks for the assistance. I double checked my default file and noticed that I left something out.

  22. Hey dude, great post!
    Unfortunally i get the Windows Boot Loader again and again and again… do I have to do some changes in WDS? I don’t think so…


    1. works 😉 but i can’t include a .iso file like acronis…is there any chance to get acronis into the syslinux boot loader?

      1. Yes it is possible for Acronis. Simply copy the kernel.dat and ramdisk.dat from the Acronis ISO in \linux\acronis folder of your pxe server.

      2. …and something like that in your

        LABEL acronisdeploy
        Menu label Acronis true image 2013(Clone,ghost,restore,etc.)
        kernel \Linux\Acronis\kernel.dat
        append initrd=\Linux\Acronis\ramdisk.dat vga=791 ramdisk_size=32768 acpi=off quiet noapic

  23. I have checked everything but am getting an error when testing with a vm during PXE boot. It contacts the server, starts the TFTP download of, shows the copyright message and then says failed to load ldlinux.c32 Boot failed… Not sure where to go, help anyone???

      1. Well the problem i have is, that with Syslinux 4.x i get “error loading kernel image or corrupt image”.

        but with 5.0 syslinux it won’t load the Files. I’m trying to get my IBM BomC PXE Files loaded up…

        This is the original File which is made by IBM:
        prompt 0
        default toolscenter
        timeout 100
        label toolscenter
        display bsb.msg
        kernel img2a
        append initrd=img3a vga=0x317 root=/dev/ram0 rw ramdisk_size=100000 tftp_server= tftp_tcrootfs=tcrootfs debug_level=1 silent_boot=no boot_src=4 iommu=soft

        and i have shortened it to and included it in the default-file which is in \x64\pxelinux.cfg\default
        label toolscenter
        display bsb.msg
        kernel img2a
        append initrd=img3a vga=0x317 root=/dev/ram0 rw ramdisk_size=100000 tftp_server= tftp_tcrootfs=tcrootfs debug_level=1 silent_boot=no boot_src=4 iommu=soft

        Can anybody tell me why syslinux 5 hates this?

  24. Very good instruction, I need to find out from you if I need to have both the wds service and linux pxe service running or do I need to stop the linux pxe serivce runing

    1. I’m not 100% if I follow your question but you should only need the WDS service.
      You don’t install a Linux PXE service, you just add the SysLinux PXE files to your existing WDS Server

  25. Hello and thanks for this wonderful guide.

    Here I am done till Step 3, boot option appears, but nothing happend.

    My purpose was to boot Ubuntu for Ubuntu deployment over WDS
    Add Clone Zila so I can deploy clonzila images from WDS

    ——— I would be thankful if you can assist me after step 3, ….. in my case, when I click on custom boot menu of Ubuntu, nothing happend.

    1. It’s most likely an incorrect setting in your default file that you created in Step 2

      I haven’t used Ubuntu but for debian I’ve got this entry
      LABEL debian6.0-amd64-Netinstall
      menu label ^Debian 6-0 amd64-Net-install:
      kernel /Linux/Debian-Net-Install-amd64/Linux
      append priority=low vga=normal initrd=/Linux/Debian-Net-Install-amd64/initrd.gz

      and for CloneZilla I’ve got
      LABEL Clonezilla Live
      MENU LABEL ^Clonezilla Live
      kernel \Linux\Clonezilla\vmlinuz
      append initrd=\Linux\Clonezilla\initrd.img boot=live live-config noswap nolocales edd=on nomodeset ocs_live_run="ocs-live-general" ocs_live_extra_param="" ocs_live_keymap="" ocs_live_batch="no" ocs_lang="" vga=788 nosplash fetch=

      I don’t fully understand the APPEND line myself but that is the key to get them to load. Try searching online, that’s what I did for both the entries above

  26. I have to tell ya I cant get this to work for nothing, I am not a programmer and though it may be easy to you guys that know programming it is not to guys ho don’t.
    Because this tutorial was made in a simple fashion I was able to get my custom pxe screen loaded by now I am stuck as I don’t know how to get any Linux distro to boot via pxe.
    I have tried you premade stuff no luck. can we get a step by step of how to do this like you did above with the screen loader

    1. I’m no programmer either!
      Have you completed step 3 but you are stuck on step 4?
      Can you give me a few more details on what exactly isn’t working and what distro you are trying to boot to

      1. ok so here is my setup:

        kernel Images/Ubuntu/ubuntu/casper/vmlinuz.efi
        APPEND boot=nfs NETBOOT=nfs NFSROOT= initrd=/Images/Ubuntu/ubuntu/casper/initrd.lz

        1 other thing to note i am using the full install cd which also acts as a live disc, i have the full image extracted here on my server – C:\RemoteInstall\Boot\x64\Images\Ubuntu\ubuntu

        it all appears to be going well then I get this – Begin: Running /scripts/nfs-premount … Done
        followed by – nfsmount needs a path

        the nfs mount needs a path message repeats over and over again . so at some point it all just seems to crash and never recover. the nfs is accessible i know cause i can from other machines. so i wonder what im doing wrong?

  27. Another setup that I had in place for about a year now.

    DEFAULT vesamenu.c32
    PROMPT 0
    MENU TITLE Gens PXE Boot Menu
    MENU INCLUDE pxelinux.cfg/graphics.conf
    MENU AUTOBOOT Starting Local System in 20 seconds

    # Option 1 – Exit PXE Linux & boot normally
    LABEL bootlocal
    menu label ^Boot Normally
    menu default
    localboot 0
    timeout 200

    # Option 2 – Run WDS
    LABEL wds
    MENU LABEL ^Windows Deployment Services
    KERNEL pxeboot.0

    # Option 3 – Parted
    label Parted
    MENU LABEL Parted – another Clonezilla
    kernel images/pmagic-pxe-4.5/pmagic/bzImage
    append initrd=images/pmagic-pxe-4.5/pmagic/initramfs load_ramdisk=1 prompt_ramdisk=0 rw sleep=10 livemedia

    # Option 4 – IPcop
    LABEL IPCOP Regular
    KERNEL images/ipcop/2.0.2/i486/vmlinuz
    APPEND mode=install initrd=images/ipcop/2.0.2/i486/instroot.img loglevel=4 ipcopboot=net

    # Option 5 – Ubuntu 10.10
    LABEL Ubuntu 10.10
    MENU LABEL Ubuntu 10.10 Old version
    KERNEL images/ubuntu/ubuntu-installer/amd64/linux
    append mode=install initrd=images/ubuntu/ubuntu-installer/amd64/initrd

    # Option 6 – memtest
    LABEL Memtest
    MENU LABEL MemTest All Versions
    KERNEL images/ipcop/2.0.2/i486/memtest
    APPEND –

    # Option 7 – Password hack
    label win-password-reset
    MENU LABEL Windows Password Reset
    KERNEL images/cd110511/vmlinuz
    append rw vga=1 initrd=images/cd110511/initrd.cgz,images/cd110511/scsi.cgz

    # Option 8 – Full Blown Clonezilla
    Label Clonezilla
    MENU LABEL Clonezilla the one and only!
    kernel /images/clonezilla/vmlinuz
    append initrd=images/clonezilla/initrd.img boot=live live-config noswap nolocales edd=on nomodeset ocs_live_run=”ocs-live-general” ocs_live_extra_param=”” ocs_live_keymap=”” ocs_live_batch=”no” ocs_lang=”” vga=788 nosplash fetch=ftp://Administrator:Table1spoon@

    # Option 9 – Acronis
    LABEL acronistrue
    MENU LABEL Acronis Data Restore
    kernel images/acronis/kernel.dat
    append initrd=images/acronis/ramdisk.dat vga=791 ramdisk_size=32768 acpi=off quiet noapic

    # Option 10 – Hirens
    LABEL Hirens
    MENU LABEL Hiren’s Boot CD
    kernel /images/hirens/memdisk
    append iso initrd=/images/hirens/Hirens.iso raw

    # Option 11 – Ubuntu 12.10
    LABEL Ubuntu 12.10
    MENU LABEL Ubuntu 12.10 November 2012
    KERNEL images/ubuntu-new/casper/vmlinuz
    append mode=install initrd=images/ubuntu-new/casper/initrd.lz

    # Option 13 – Openelec Acer Revo
    KERNEL images/openelec/KERNEL
    #APPEND ip=dhcp boot=CIFS=//,user=xbmcrevo,password:xbmc disk=CIFS=//,user=xbmcrevo,password=xbmc
    #APPEND ip= boot=NFS= disk=NFS= overlay
    #APPEND ip=dhcp boot=NFS= disk=NFS= overlay
    APPEND ip=dhcp boot=NFS= disk=NFS=

    # Option 14 – Exit PXE Linux
    LABEL Abort
    KERNEL abortpxe.0

  28. Thank you for the great guide, worked flawlesly! One question allthough, could you be so kind and share the background image, old memorys, i just love it 🙂

  29. I am trying to set this up to work with WDS (2012 R2) and Hyper-V so that I can deploy O/S’s other than Windows to the VM’s hosted. I have followed this exactly but have had no luck in getting the PXELinux to be the boot. What I did notice is that the VM’s are being detected as x64uefi, not x64 and I tried to copy the configuration to the x64uefi and that didn’t work. I then pointed the /architecture:x64uefi to the x64 folder but once again not luck!

    Has anyone got this to work for Windows Server 2012 R2? If so please provide some insight as I need this to work!

    Thank you! in advance…
    Bill S.

    1. HI Bill, I wanted to know if you got this working on WDS 2012 R2? I have this working on WDS 2008 R2 and wanted to know before I try it myself.

  30. Dear Bill,

    main change in Hyper-V 2012 R2 is the gen 2 VM which is EFI based. The gen 1 is non efi. I have such a deployment and will test out this tutorial and come back with feedback.


  31. Working configuration for PING (Partimage Is Not Ghost):

    First download the PING iso image (for example PING-3.02.iso) and extract the content to your \RemoteInstall\Boot\x86\Linux\PING\ (you can use 7zip to do that)

    Then add the following menu entry to your pxelinux.cfg\default

    menu label ^PING – Partimage Is Not Ghost
    kernel /Linux/PING/kernel
    append initrd=/Linux/PING/initrd.gz vga=normal devfs=nomount pxe ramdisk_size=70000 load_ramdisk=1 init=/linuxrc prompt_ramdisk=0 initrd=initrd.gz root=/dev/ram0 rw noacpi noapm pci=noacpi lba acpi=off apm=off

  32. Thanks for this writeup! I’m going to attempt to implement this so I can (hopefully) boot SpinRite and MemTest via my WDS server. I’ve seen people mention that syslinux 5.x does not work, but I don’t see anywhere in the guide or comments exactly WHICH version of syslinux should be used for best success. Can you clarify this?


    1. Hi DragonRand. It’s been a while since I used this set up (it was at a previous job) so I’m not 100% confident what version I was using. I believe it was 4.03 but I see now there is a version 6 too.

      If I was you I’d try the latest version and see how that goes first. It would be great to hear back whether you are successful or not.

      1. Thanks Thom!

        I did in fact get this working nicely. Judging by the date of your post, I selected syslinux 4.07 as being in the neighborhood of the version you must have used, and because it’s working perfectly I don’t plan to change it.

        I found another helpful post I wanted to share here. One of my main goals was to PXE boot SpinRite 6.0, and I saw others above mention the same. So check this out:

        TheMacOne’s approach of using memdisk has proven very flexible. I used his original method to boot SpinRite from floppy .img file, and it worked. I then saw his slightly altered approach to the same thing in the comments. What I love about the new variant is that allows you to mount and boot from an ISO image. I’m now successfully booting WDS, SpinRite 6, MemTest86+ 5.01, and four versions of Acronis. All but WDS and MemTest use ISOs as the boot source, and the largest Acronis ISO is over 600MB, and still works (though it takes a couple of minutes to be loaded by memdisk).

        So far I’ve only tested on one workstation so I can’t speak to whether I’ll hit problems as I throw different hardware at it, but it’s proven to do everything I want and more. Thanks for a fantastic guide! I’d never have managed it without you.

        I’ll post my config files below for reference – hopefully it’ll prove useful to others.

        I decided to disable the submenu, so I’ve got it in a single flat menu for now. By the way, I don’t have the default and timeout options working properly yet, so don’t use me as a guide for those items.

        DEFAULT vesamenu.c32
        PROMPT 0

        MENU TITLE PXE Boot Menu (x64)
        MENU INCLUDE pxelinux.cfg/graphics.conf
        MENU AUTOBOOT Starting Local System in 30 seconds

        # Start Windows Deployment Services
        LABEL wds
        MENU LABEL Windows Deployment Services
        menu default
        TOTALTIMEOUT 9000
        KERNEL pxeboot.0
        TEXT HELP
        Use Windows Deployment Services to install Windows on a computer.
        Choose WinPE4 in most cases. If deployment fails to proceed or complete
        succesfully, try using WinPE3.1. (WinPE4 is built on the Windows 8
        kernel, while WinPE3.1 is built on the Windows 7 kernel.)
        # Run Memtest
        LABEL memtest
        menu label Memory Test: Memtest86+ v5.01
        kernel \Linux\Memtest\memtest501
        TEXT HELP
        Memtest86+ v.5.01 will automatically run after loading and begin
        scanning for memory errors.
        # Run SpinRite
        LABEL SpinRite 6.0
        menu label SpinRite 6.0
        kernel memdisk
        initrd Linux\Spinrite\SpinRite.iso
        append iso raw
        TEXT HELP
        Run SpinRite on Level 2 to perform emergency data recovery, or to scan
        the drive for errors. Use Level 4 only for more intensive testing. It’s
        best to avoid using Level 4 entirely on SSDs unless absolutely necessary.

        NOTE: It may be necessary to enter the BIOS and switch from AHCI to SATA
        or “Legacy” mode for SpinRite to see and work with the drive. If you do,
        you MUST change it back upon completion before trying to start Windows.
        # Run Acronis Server 1
        LABEL AcronisEcho
        menu label Acronis True Image Echo Enterprise Server
        kernel memdisk
        initrd Linux\Acronis\AcronisBootCD8398.iso
        append iso raw
        TEXT HELP
        Acronis True Image Echo Enterprise Server (with Universal Restore)
        – build 8398
        # Run Acronis Server 2
        LABEL AcronisBR
        menu label Acronis Backup & Recovery Advanced Server
        kernel memdisk
        initrd Linux\Acronis\ABRAS-UR-13762.iso
        append iso raw
        TEXT HELP
        Acronis Backup & Recovery Advanced Server (with Universal Restore)
        – Build 13762
        # Run Acronis Server 3
        LABEL AcronisBR11
        menu label Acronis Backup & Recovery 11 Advanced Server
        kernel memdisk
        initrd Linux\Acronis\ABR11ASUR-17440.iso
        append iso raw
        TEXT HELP
        Acronis Backup & Recovery 11 Advanced Server (with Universal Restore)
        – Build 17440
        # Run Acronis Server 4
        LABEL AcronisBR115
        menu label Acronis Backup & Recovery 11.5 Advanced Server
        kernel memdisk
        initrd Linux\Acronis\ABR11.5ASUR-38350.iso
        append iso raw
        TEXT HELP
        Acronis Backup & Recovery 11.5 Advanced Server (with Universal Restore)
        – Build 38350
        # Exit and Boot Normally
        LABEL bootlocal
        menu label ^Exit menu and boot normally
        localboot 0
        # Go to Tools sub-menu
        # LABEL tools
        # MENU LABEL ^Tools
        # KERNEL vesamenu.c32
        # APPEND pxelinux.cfg/graphics.conf pxelinux.cfg/
        # Exit PXE Linux
        LABEL Abort
        MENU LABEL E^xit
        KERNEL abortpxe.0

  33. Just an update. I posted another comment with a question for everyone, but it appears to have gone into the ether. At this point the question is somewhat moot, but I’m still interested if anyone has an answer to it.

    I wanted to avoid setting up a web server just for the purposes of fetching filesystem.squashfs to support things like Gparted Live and Clonezilla. It looks like tftp *should* be able to fetch filesystem.squashfs, and I even found a few example configs online from people who said it worked for them. Never did work for me, however, so I finally broke down and used http,which worked immediately. I didn’t add IIS to my WDS server, partly because it’s also a DC and I want to avoid adding services/roles without good reason, and partly because I realized one of my existing internal web servers would work fine (and although it’s across a WAN link to another site, it does).

    I’m still curious though – does anyone know why tftp might work in some cases but not others? I understand the tftp server implemented by WDS is nonstandard – it’s read only so it won’t execute write/put commands – but that should still be fine for our purposes. I saw talk online of needing to edit initrd.img to change the default options passed to the command for fetching via tftp, but I felt I was getting way out of my depth there.

    In any case, this page is a great resource – thanks again to Thom and to all “commenters” for the many examples and suggestions.

  34. Hello, I apologize for my bad English but I have a question. I want to know if it is possible to boot via an ISO image?

    I tried this but nothing happens.

    # Option 5 – Hirens
    LABEL Hirens
    MENU LABEL Hirens Boot CD
    kernel / images / Hirens / memdisk
    append iso initrd = / Iso / Hirens / Hirens.iso

    PS: Otherwise, congratulations for this excelent tutorial and very interested.

    1. You should be able too, its just a case of getting the syntax right. I’m not sure what to use for Hiren, try googling for example menu configs.
      let me know if you get it working!

      1. Thank you for the interest you door to my question, the concern is that I want to keep the / pxe WDS Linux with the method described here and I feel that fog is not an alternative to wds.

      1. Hello, and thank you for the fast and efficient comments .
        Thus retracing all comments on this pages , I finally arrived to boot from an ISO image
        Simply use the folder syslinux memdisk .

        Here is an example of my fault :

        PROMPT 0
        MENU TITLE PXE Linux
        MENU INCLUDE pxelinux.cfg \ graphics.conf
        MENU AUTOBOOT Starting Local System in 8 seconds
        # Option 1 – Exit PXE boot Linux & Normally
        LABEL bootlocal
              menu label ^ Start Normally
              default menu
              localboot 0
              timeout 80
              TOTALTIMEOUT 9000
              TEXT HELP
                Leave the service of Linux deployment

        # Option 2 – Run WDS
        LABEL wds
             LABEL ^ Windows Deployment Services MENU
             KERNEL pxeboot.0
             TEXT HELP
                Leave the service of Linux deployment and
                start the Windows service deployment

        # Option 3 – Hirens
        LABEL Hirens
            MENU LABEL Hirens Boot CD
            kernel \ Linux \ Hirens \ memdisk \ memdisk
            append iso initrd = \ Iso \ Hirens \ Hirens.iso raw
            TEXT HELP
                Hirens Boot CD Version : 10.6

        # Option 4 – Clonezilla
        LABEL Hirens
            MENU LABEL Clonezilla (x86)
            kernel \ Linux \ clonezilla \ memdisk \ memdisk
            append iso initrd = \ Iso \ clonezilla \ clonezilla.iso raw
            TEXT HELP
                Conezilla Version : 1.2.12-67

        # Option 5 – Exit PXE Linux
        LABEL Abort
            Exit MENU LABEL ^
            KERNEL abortpxe.0
        TEXT HELP
                Boot from hard disk

        By against the background image does not appear when I met the resolution 640/480. Do you have an idea about it?

      2. Congratulations on getting it working, and thanks for sharing the solution 🙂

        In regards of the background image problem, does the filename on the MENU BACKGROUND line in graphics.conf match the actual filename exactly?
        Do other settings in the graphics.conf file work, e.g. MENU COLOR?
        The image should be stored in \\WDS\REMINST\Boot\x86 but the graphics.conf file should be in \\WDS\REMINST\Boot\x86\pxelinux.cfg

  35. Hi Thommck, So I come to you just to tell you that my problem was solved. The reason apparently was because my image was. Syslinux JPG and do not necessarily support depending on the version used. So I put an image. PNG and it works. In any case thank you very much for your participation and I must admit that your blog has helped me enormously in my project. Thank you to you and all stakeholders.

    1. Hi Johnny, I’m trying to understand what you mean by “Simply use the folder syslinux memdisk”. As you have done, I want to boot from an iso image using WDS and I’m trying your example to boot the Hirens boot CD, but have no luck with this so far. I downloaded the syslinux package and decompressed to see the contents and see that there is a “memdisk” folder. Can you provide more details on what you did? Thanks for the help

      1. Hi Gilles, sorry to respond so late but I only just saw your post. So with regard to your request, you must copy the folder “memdisk” syslinux on your server and call it in your default file.

        I give you the example I used.

        I created a Linux folder and paste the file memdisk which gives this:
        \ Boot \ x86 \ Linux \ memdisk
        Then I created an iso file in which I will place my iso in a folder
        \ Boot \ x86 \ ISO \ Hirens \ hirens.iso

        and in my default

        # Option 3 – Hirens
        LABEL Hirens
        MENU LABEL Hirens Boot CD
        kernel \ Linux \ Hirens \ memdisk \ memdisk
        append iso initrd = \ Iso \ Hirens \ Hirens.iso raw
        TEXT HELP
        Hirens Boot CD Version : 10.6

        Well, I hope this will help you.

        good day

      2. Hi Johnny, I can’t seem to get this to work.. You reference a folder “memdisk” and then you reference a file “memdisk”, so I’m confused not knowing do I need a file or a folder named “memdisk”. If you could clarify please.. Thanks for your help. Gilles

  36. This is a very excellent post. I would like to ad I am in the middle of doing this myself. Not fully done but wanted to point out that when I downloaded the latest syslinux zip of 6.2 there is no pxelinux.0 file located in the zip directory. So I have gone ahead and downloaded syslinux 4.07 as mentioned previously and I will be using that instead. Again great write up and I can’t not wait to get this working.

  37. Hello Everybody,
    I try configure this boot, but no way,

    After extract the disk, see this files and folders:


    My desfault file is:

    LABEL vmware-client
    menu label ^Vmware Client
    # Load the correct kernel
    kernel /Linux/Vmware/boot/vmlinuz
    # Boot options
    append initrd=/Linux/Vmware/boot/core.gz

    But wont work.

    Any to help?

  38. I setup this solution on Win 2012 R2.

    I have Hiren`s CD and WDS on menu. Hiren`s works fine but WDS stucks when i choose it…
    Anybody helps ? Thanks

    DEFAULT vesamenu.c32
    PROMPT 0

    MENU TITLE PXE Boot Menu (x86)
    MENU INCLUDE pxelinux.cfg/graphics.conf
    MENU AUTOBOOT Starting Local System in 8 seconds

    LABEL wds
    MENU LABEL ^Windows Deployment Services
    KERNEL ..\x64\pxeboot.0
    LABEL Hirens CD
    MENU LABEL ^Hirens CD
    KERNEL \Images\HBCD\memdisk
    APPEND initrd=\Images\HBCD\boot.gz

  39. Oh forget it.

    My mistake I made a copy pxeboot.0 from, but in manual need to make a copy of pxeboot.n12

    Thanks for great manual !

  40. I would just like to say that this tutorial is absolutely great. I have this working on W2K8R2 to deploy ubuntu 13.10 as I’m new to Linux and was looking for a method to deploy using WDS.

    I have Hyper-V running on my W2K8R2 domain controller and can deploy Linux to a VM without any problems,

    The question I have is, can linux be deployed locally using an ISO file instead of having to use a linux mirror for each install? Basically have it do exactly what WDS does to deploy Windows. I’m sure someone has thought of this and knows how to do this.

    thanks for any help.

  41. Just FYI, the files have relocated since some version, they are now:


  42. How would I setup IIS on my WDS server to install ISOs via HTTP? I have syslinux working on my WDS server but don’t want to use netboot files and access mirrors. I rather use full ISOs.

  43. Hello! Great post! Very usefull.
    In a Windows Server 2008 R2, I tryed with sysliux-6.02 and after addin this additional files:

    But with not success.

    So, then, i tried with syslinux-5.10, and after add this files:

    but I only get the “boot:” prompt 😦

    So, revert to syslinux-4.07 and works great!
    But, i have this “problem?” when I select the WDS menu, if i do not press the F12 Key within 2 seconds, WDS is aborted.
    Someone have any “solution” to this (i do not want that the WDS ask me for the F12 key to start)


    1. Well done for getting it working. Very annoying that none of the newer versions seem to work.

      The F12 setting depends as whatever you set as the bit option in the WDS server properties. You normally have a couple of options, one with an .n12 extension. I can’t really remember but I may be able to have a look tomorrow if you can’t figure out out

  44. I can say this does work with Server 2012 R2 and Hyper-V. You have to create Gen 1 with Legacy Network adaptors if you use Hyper-V. Everything else is fully functional.

  45. Hi,
    thanks for the great post. Almost everything is working well for me…almost. I tried to boot a Linux Ubuntu System (Desinfect) with WDS under Windows Server 2012 R2. My configuration:

    SysLinux v4.07 (newer versions did not work for me)
    NFS Share: \\WDS\REMINST\
    System files: \\WDS\REMINST\Boot\x64\Desinfect

    I created the pxelinux.cfg folder under \\WDS\REMINST\Boot\x64\ and the default file. The part I am having problems with seems to be the following:

    APPEND boot=casper initrd=Desinfect/casper/initrd.lz netboot=nfs nfsroot= quiet splash — debian installer/language=de console-setup/layoutcode?=de

    The client is a VM with a configured legacy adapter. The client gets an IP from the DHCP Server and is able to access the WDS server but the boot freezes showing the “Ubuntu 12.04” loading screen. While troubleshooting I deleted the “quiet and splash” options. Now the system tells me that it is trying to netboot, but does not find a source:

    domain: pxeboot.local
    rootpath: empty
    filename: empty
    Begin: Trying netboot from …
    Begin: Trying nfsmount -o noclock -o ro /cdrom …
    connect: Connection timed out
    NFS over TCP not available from

    I tried to move the Ubuntu source files to the root but that did not solve the problem.

    Does anybody know where Syslinux is searching for the source files or what I could change to successfully boot the Ubuntu system?

    Many thanks in advance! If I happen to solve the problem by myself I will let you know and post it here.


  46. Hi,
    Iam trying Rhel 6U5 image,
    from the client ,it starts the install and i reach the menu where it ask for What type of media contains the installation image. Iam not able to proceed from here
    can you please help on this

    all config files u have shown above are the same except for

    MENU TITLE Install a Linux Distro

    LABEL Rhel65-Install
    menu label Rhel 6-5 64bit install:
    kernel /Linux/RHEL65/vmlinuz
    APPEND ks initrd=Linux/RHEL65/initrd.img ramdisk_size=100000

    LABEL Main Menu
    MENU LABEL Back to Main Menu
    KERNEL vesamenu.c32
    APPEND pxelinux.cfg/default

    1. Hi

      I found that this worked for me when trying to install CentOS.
      I use a local NFS server to share a mounted ISO
      All the WDS directories and setting are as per the original instructions.

      LABEL CentOS6.4
      MENU LABEL Install CentOS6.4
      KERNEL Linux/CentOS6/vmlinuz
      append vga-normal initrd=Linux/CentOS6/initrd.img method=nfs:

  47. I can confirm this is still working like a charm on WDS 2012 R2.
    this is what mine looks like. I can boot Hirens using memdisk.
    Unfortunatly It only works in VM’s (and brilliantly at that), but on a physical machine booting hirens curently stops halfway saying the machine is out memory and i’m unsure why.

    DEFAULT vesamenu.c32
    PROMPT 0

    MENU TITLE PXE Boot Menu (x86)
    MENU INCLUDE pxelinux.cfg/graphics.conf

    # Option 1 – Deploy Windows
    LABEL wds
    MENU LABEL Windows Deployment Services
    KERNEL pxeboot.0

    # Option 2 – Debian
    LABEL debian Netinstall
    menu label Debian Net-install
    # Load the correct kernel
    kernel /Linux/Debian/Linux
    # Boot options
    append priority=low vga=normal initrd=/Linux/Debian/initrd.gz

    # Option 3 – Run Hirens
    LABEL – Hirens BootCD
    MENU LABEL Hirens BootCD v15.2 (Currently not always working properly)
    LINUX memdisk
    INITRD Hirens/Hiren’s.BootCD.15.2.iso
    APPEND iso raw

    # Option 4 – Exit PXE Linux & boot normally
    LABEL bootlocal
    menu label Exit PXE and Boot Normally (Default)
    menu default
    localboot 0
    timeout 300

    Either way great guide, very clear and actually explains WHY and not just HOW.

  48. Excellent Post Thom!!…Configured a deployment/imaging server (SRVR2K8R2) w/ repository consisting of combination iSCSI/FCAL/ESATA/SCSI (integration tests). Thus far everything from an application (Linux/Tools, etc..) has been working like a charm. Unfortunately recently encountered a roadblock when trying to test some Tablets (Lenovo Tablet 10). With UEFI PXE IPv4 stack enabled (only option available) I attempt to boot to network. IP address is allocated and everything seems to look OK initially (by comparison) but it never launches the PXE menu. Process abnormally ends and goes back into startup UEFI menu. Has anyone had success using these methods w/ UEFI PXE? or do I need to modify WDS options to support. Thx in advance

  49. don’t work for me. I restart the computer and this boot on Windows Boot Manager.
    I followed at step two, the 3rd step (test) doesn’t work
    i use WS 2012 R2 and WDS work fine with windows booting.

    1. I have put the following in the folder \boot\x64 –

      Also made sub folders called-


      In pxelinux.cfg i put two files


      Last but least i wrote 2 cmd commands –

      wdsutil /set-server /bootprogram:boot\x64\ /architecture:x64

      And also the other one but just added N12 prefix to the bootprogram and both returned succesfully

      When i boot up pc using F12 i get the error i posted above

  50. i get this when i try to boot from network –

    PXELINUX 5.11 5.11-pre9 copyright (c) 1994-2013 h. peter anvin et al

    failed to load ldlinux.c32
    boot failed: press a key to retry, or wait for reset…

  51. i get this error –

    PXELINUX 5.11 5.11-pre9 copyright (c) 1994-2013 h. peter anvin et al

    failed to load ldlinux.c32
    boot failed: press a key to retry, or wait for reset

    any help please


  52. I am trying to get this to work with the WDS that is installed on Server 2012 R2. I’ve copied everything from syslinux over to x86 folder but when I go to select the default boot image I’m only able to select the boot images that I already have loaded into WDS which are .wim files.

    I’ve tried using the wdsutil commands from above that are for server 2008 and they execute fine according to the output but when I try to PXE boot a machine I just get the default WDS select boot image screen.

    So I guess my question is how do I select the custom boot image,, on WDS from windows server 2012 R2.

    1. Hello Darkarrow

      I am also in the same situation as u mentioned.
      Did you figured out the solution. If yes please Share

  53. I’ve had this working for years on a 2008 server. Recently setup a new 2012 sever and can’t get it to work. I can get the pxelinux menu with my options. The first option to load WDS Images works fine but when I choose any other options nothing happens. No error just stays on pxelinux menu. Any ideas?

    1. Trick is the correct naming for the pxelinux.0 file. Don’t change it to, change it to pxeboot.n12 *AFTER* you’ve renamed the default pxeboot.n12 to pxeboot.0

  54. Hey I followed this but when using:

    wdsutil /set-server /bootprogram:Boot\x86\ /architecture:x86

    it says that it sets it successfully but when trying to boot to the menu it uses boot\x86\ instead. Which causes a TFTP connection timed out error. Any help?

What do you think?

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s