{"id":4360,"date":"2012-08-24T15:41:27","date_gmt":"2012-08-24T13:41:27","guid":{"rendered":"https:\/\/ingmarverheij.com\/?p=4360"},"modified":"2013-11-30T12:49:29","modified_gmt":"2013-11-30T11:49:29","slug":"who-needs-pxe-for-citrix-provisioning-services","status":"publish","type":"post","link":"https:\/\/ingmarverheij.com\/en\/who-needs-pxe-for-citrix-provisioning-services\/","title":{"rendered":"Who needs PXE for Citrix Provisioning Services?"},"content":{"rendered":"<p>With Citrix Provisioning Services (PVS) the content of a disk can be streamed to a (virtual \/ physical) machine via the network. A (virtual) machine that boots needs a bootstrap to locate a PVS server (that has a vDisk available) and the ability to stream the disk to the machine.<\/p>\n<p>The bootstrap, the Boot Device Manager (BDM), needs to be delivered to the machine. It is common to deliver the BDM bootstrap via a Pre Execution Environment (PXE) network boot, but it\u2019s not required. Although the PXE method seems the most straight forward method (and most advocated), it it\u00a0 difficult to make it resilient.<\/p>\n<p><!--more--><\/p>\n<h1>The PXE method<\/h1>\n<p><a href=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2012\/08\/pxe.gif\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; margin: 0px 5px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; padding-top: 0px; border-width: 0px;\" title=\"PXE process\" alt=\"PXE process\" src=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2012\/08\/pxe_thumb.gif\" width=\"69\" height=\"104\" align=\"right\" border=\"0\" \/><\/a>The Pre Execution Environment (PXE) method depends on a DHCP request, a PXE and a Trivial File Transfer Protocol (TFTP) server. After the machine sends a DHCP request it receives a DHCP response that contains the PXE server to contact. The PXE server streams the Boot Device Manager (BDM) to the machine via TFTP. After the machine has loaded the Boot Device Manager (BDM) the actual streaming of the vDisk via PVS starts.<\/p>\n<p align=\"center\"><a href=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2012\/08\/pvs-vdisks-pxe-boot.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; margin: 0px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; padding-top: 0px; border-width: 0px;\" title=\"vDisk via PXE\" alt=\"vDisk via PXE\" src=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2012\/08\/pvs-vdisks-pxe-boot_thumb.png\" width=\"304\" height=\"116\" border=\"0\" \/><\/a><em>Image from Citrix eDocs<\/em><\/p>\n<p>Achieving resilience, making the PXE and TFTP server high available, is a rather complex task and requires additional components like a NetScaler (or other load balancer) and (optionally) a third party TFTP server (to prevent streaming the vDisk through the NetScaler) and as a result two additional virtual machines per site. As described in <a href=\"https:\/\/blogs.citrix.com\/2011\/05\/02\/load-balancing-tftp-anything-but-trivial\/\" target=\"_blank\">Load Balancing TFTP \u2013 Anything But Trivial<\/a><\/p>\n<h1><\/h1>\n<h1>Deliver directly<\/h1>\n<p>It is possible to deliver the Boot Device Manager (BDM) bootstrap directly to the machine, without using PXE and TFTP.<\/p>\n<p><a href=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2012\/08\/Boot-Device-Management.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; margin: 0px 5px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; padding-top: 0px; border-width: 0px;\" title=\"Boot Device Management\" alt=\"Boot Device Management\" src=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2012\/08\/Boot-Device-Management_thumb.png\" width=\"90\" height=\"104\" align=\"right\" border=\"0\" \/><\/a><a href=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2012\/08\/Provisioning-Services-Boot-Device-Manager.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; margin: 0px 5px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; padding-top: 0px; border-width: 0px;\" title=\"Provisioning Services Boot Device Manager\" alt=\"Provisioning Services Boot Device Manager\" src=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2012\/08\/Provisioning-Services-Boot-Device-Manager_thumb.png\" width=\"115\" height=\"17\" align=\"left\" border=\"0\" \/><\/a>With the \u2018Provisioning Services Boot Device Manager\u2019 tool you can easily create an ISO image (of 300K) which you can mount to your virtual machines. Especially in a virtual environment it is very easy to mount a ISO to a virtual machine. By mounting the ISO in the virtual machine template used in XenDesktop the correct boot image is always used. Alternatively the BDM bootstrap can be burned on a CD that you\u2019ll leave in a physical machine or store the bootstrap on the physical disk.<\/p>\n<p><em>It is even possible for OEMs to embed the bootstrap file on the target device, but I haven\u2019t seen a device that has it embedded yet.<\/em><a href=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2012\/08\/pvs-vdisks-boot-without-pxe.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; margin: 0px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; padding-top: 0px; border-width: 0px;\" title=\"vDisk withouth PXE\" alt=\"vDisk withouth PXE\" src=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2012\/08\/pvs-vdisks-boot-without-pxe_thumb.png\" width=\"304\" height=\"116\" border=\"0\" \/><\/a><\/p>\n<p align=\"center\"><em>Image from Citrix eDocs<\/em><\/p>\n<p>The best thing is that if there is an unforeseen circumstance and the machine is unable to boot, it can failover to the next boot device. This means you can use PXE as a failover method, where resiliency is less required. But to be honest, I don\u2019t think you should have to solutions in place \u2018just in case something goes wrong\u2019. Built it right and keep it right <img decoding=\"async\" class=\"wlEmoticon wlEmoticon-winkingsmile\" style=\"border-style: none;\" alt=\"Knipogende emoticon\" src=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2012\/08\/wlEmoticon-winkingsmile.png\" \/> <br clear=\"all\" \/><\/p>\n<p>&nbsp;<\/p>\n<h4>What are the benefits?<\/h4>\n<p>There are mainly two big benefits;<\/p>\n<ol>\n<li>The environment can be build with resiliency (or high available) with common off-the-shelf (COTS) products<\/li>\n<li>The complexity is reduced\n<ul>\n<li>There are no PXE and TFTP servers required<\/li>\n<li>DHCP scope configuration doesn\u2019t have to be changed<\/li>\n<li>IP helpers (for PXE boot across subnets) are not required<\/li>\n<li>Less broadcasts packages over the network<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<h4>Remarks<\/h4>\n<p>The BDM bootstrap is run in a limited environment and therefore has a limited support for Network Interface Cards (NIC). There are some compatibility issues with certain virtual adapters in common hypervisors (Hyper-V 2.0 requires legacy NIC adapter, vSphere requires VMXNet3, etc.).<\/p>\n<p>So mounting the BDM via an ISO, instead of providing via PXE, does not make it easier to use it on Hyper-V 2.0. Sorry Remko!<\/p>\n<p>&nbsp;<\/p>\n<h4 id=\"download\">Automation<\/h4>\n<p>After releasing this article a few people on Twitter suggested it would be very nice if a PowerShell script existed that could\u00a0 mount the ISO (containing the Boot Device Manager) to a virtual machine. The much appreciated and fellow blogger Andrew Morgan (<a href=\"https:\/\/ie.linkedin.com\/in\/andrewjmorgan\" target=\"_blank\">LinkedIn<\/a>, <a href=\"https:\/\/twitter.com\/andyjmorgan\" target=\"_blank\">Twitter<\/a>, <a href=\"https:\/\/andrewmorgan.ie\/\" target=\"_blank\">Website<\/a>) picked up the glove and accepted the challenge! Andrew wrote a PowerShell script that automatically mounts the ISO to a specified list of virtual machines. You can download the script here:\u00a0<a  data-e-disable-page-transition=\"true\" class=\"download-link\" title=\"\" href=\"https:\/\/ingmarverheij.com\/en\/download\/5829\/?tmstv=1776451456\" rel=\"nofollow\" id=\"download-link-5829\" data-redirect=\"false\" >\n\tVMWare- MountIsoToVMs.ps1<\/a>\n.<\/p>\n<p><em><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; margin: 0px 5px 0px 50px; padding-left: 0px; padding-right: 0px; display: inline; float: left; padding-top: 0px; border: 0px;\" title=\"\" alt=\"\" src=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2012\/08\/windows-update-shield3.png\" width=\"40\" height=\"50\" align=\"left\" border=\"0\" \/><a href=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2012\/08\/windows-update-shield4.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; margin: 0px 50px 0px 5px; padding-left: 0px; padding-right: 0px; display: inline; float: right; padding-top: 0px; border: 0px;\" title=\"windows-update-shield\" alt=\"windows-update-shield\" src=\"https:\/\/ingmarverheij.com\/wp-content\/uploads\/2012\/08\/windows-update-shield_thumb1.png\" width=\"40\" height=\"50\" align=\"right\" border=\"0\" \/><\/a>The use of this script is at your own risk. Nor the author (Ingmar Verheij) or the creator (Andrew Morgan) take any responsibility for the consequences if the script is run incorrectly.<\/em><\/p>\n<p>Before you can use the script you need to change the following settings:<\/p>\n<ul>\n<li>$vms \u2013 A list of virtual machines where you want to mount the ISO (typically the PVS target list)<\/li>\n<li>$viserver \u2013 The FQDN of the VMware Infrastructure server<\/li>\n<li>$datastorepath \u2013 The location of the ISO containing the Boot Device Manager (BDM) on the VMware datastore<\/li>\n<li>$silent \u2013 If set to $true the script will be run silently, no input is required<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>The decisional tree of the script<\/p>\n<ol>\n<li>Can i connect to the VMware Infrastructure server ($viserver)?\n<ul>\n<li>Yes &gt; Continue<\/li>\n<li>No &gt; Error out<\/li>\n<\/ul>\n<\/li>\n<li>Does the virtual machine ($vms) have cd drive?\n<ul>\n<li>Yes &gt; Continue<\/li>\n<li>No &gt; Offer to power off the virtual machine, add a cd drive and then boot again<\/li>\n<\/ul>\n<\/li>\n<li>Is the virtual machine ($vms) powered on?\n<ul>\n<li>Yes &gt; Continue<\/li>\n<li>No &gt; Offer to power on the virtual machine<\/li>\n<\/ul>\n<\/li>\n<li>Map the CD drive to the ISO on the datastore ($datastorepath)<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<p>Andrew wrote the script for a VMware Infrastructure (VI) environment. If you created a similar script for a different hypervisor (XenServer \/ Hyper-V) and want to share it here, <a href=\"mailto:\/\/info@ingmarverheij.com\">contact me<\/a>.<\/p>\n<p>&nbsp;<\/p>\n<p>.<\/p>","protected":false},"excerpt":{"rendered":"<p>With Citrix Provisioning Services (PVS) the content of a disk can be streamed to a (virtual \/ physical) machine via the network. A (virtual) machine that boots needs a bootstrap to locate a PVS server (that has a vDisk available) and the ability to stream the disk to the machine. The bootstrap, the Boot Device [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-container-style":"default","site-container-layout":"default","site-sidebar-layout":"default","disable-article-header":"default","disable-site-header":"default","disable-site-footer":"default","disable-content-area-spacing":"default","footnotes":""},"categories":[418],"tags":[509,667,506,505,507,508],"class_list":["post-4360","post","type-post","status-publish","format-standard","hentry","category-provisioning-server","tag-bdm","tag-citrix","tag-provisioning-services","tag-pvs","tag-pxe","tag-tftp"],"_links":{"self":[{"href":"https:\/\/ingmarverheij.com\/en\/wp-json\/wp\/v2\/posts\/4360","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ingmarverheij.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ingmarverheij.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ingmarverheij.com\/en\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/ingmarverheij.com\/en\/wp-json\/wp\/v2\/comments?post=4360"}],"version-history":[{"count":8,"href":"https:\/\/ingmarverheij.com\/en\/wp-json\/wp\/v2\/posts\/4360\/revisions"}],"predecessor-version":[{"id":5877,"href":"https:\/\/ingmarverheij.com\/en\/wp-json\/wp\/v2\/posts\/4360\/revisions\/5877"}],"wp:attachment":[{"href":"https:\/\/ingmarverheij.com\/en\/wp-json\/wp\/v2\/media?parent=4360"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ingmarverheij.com\/en\/wp-json\/wp\/v2\/categories?post=4360"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ingmarverheij.com\/en\/wp-json\/wp\/v2\/tags?post=4360"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}