Since Provisioning Services became part of the Citrix product portfolio we have talked a lot about the various options to pass the PVS target devices the information required to download the bootstrap and connect to the PVS infrastructure. I’m not going to reiterate all options in this blog, so if you need to get up to speed check out eDocs – Getting the Bootstrap File.

One of the most popular options is to use DHCP option 66 (Boot Server Name) and option 67 (Boot File Name). The downside of this approach is that both DHCP options allow a single entry only. So for example if you specify PVS1 as the boot server and PVS1 goes down the target devices are not able to boot. Especially if you’re running a pooled desktop environment and you’re rebooting the virtual desktops automatically after user logoff, this can become a serious issue.

Now you may say, why not just use a load balancer to load balance the requests for the bootstraps among multiple servers? The problem is that the bootstrap is transferred by means of TFTP, which is quite hard to load balance. See “Load Balancing TFTP – Anything But Trivial” for more details.

When Dan Feller talked about PVS bootstrap delivery in one of last blogs “XenDesktop Fact: Provisioning Services does not require PXE” he got a very interesting comment form Justin Garrison. In short Justin mentioned that it is possible to deliver the bootstrap by means of HTTP and that he’s running that configuration without any problem for a while now.

Unbelievable! How can we have missed that for so long? Load balancing HTTP is a lot simpler than TFTP, so this would be a nice option to simplify a PVS infrastructure without relying on broadcasts (PXE) or using ISO files (BDM).

So what’s the story here?

After I saw that comment I reached out to the PVS development team immediately. Soon it became clear that transferring the bootstrap by means of HTTP is not defined in the formal PXE specification (, so we did not miss anything incredibly obvious. But we also realized that there are other PXE implementations, such as gPXE (, which add a lot more functionality (incl. HTTP transfer).  “By coincidence” XenServer-based virtual machines use gPXE, so a HTTP-based bootstrap transfer actually is a viable option.

But before you get overly exited about this, I’ve to tell you that we do not test HTTP-based bootstrap transfers as part of the standard release testing. So even though this may work –and I’ll show you that it works in a minute- this is not officially supported.

Nevertheless I thought it’s geeky enough to blog about it and to show you the configuration required. All you actually need to do is to specify the full HTTP path in option 67 (Boot File Name) on your DHCP server or scope but leave option 66 (Boot Server Name) empty. You configuration should look similar to this:

Then open XenCenter and power-on a suitable virtual machine. You should see something similar to this:

Unfortunately I do not have a vSphere or Hyper-V host to check if that works there too. So I’d be happy to get some feedback to understand if that is a XenServer only feature or a viable bootstrap delivery option for all virtualization platforms.

[Update] With the new 10.1 release of NetScaler TFTP Load Balancing became much simpler than it used to be in the past. More information can be found in eDocs – 10.1 Enhancements.