{"id":2221,"date":"2025-03-31T22:30:00","date_gmt":"2025-04-01T02:30:00","guid":{"rendered":"https:\/\/enterpriseadmins.org\/blog\/?p=2221"},"modified":"2025-03-31T15:32:43","modified_gmt":"2025-03-31T19:32:43","slug":"reviving-an-old-esxi-host-usb-to-local-disk-migration","status":"publish","type":"post","link":"https:\/\/enterpriseadmins.org\/blog\/virtualization\/reviving-an-old-esxi-host-usb-to-local-disk-migration\/","title":{"rendered":"Reviving an Old ESXi Host: USB to Local Disk Migration"},"content":{"rendered":"\n<p>I have an older Intel NUC in my lab, and although its aging, it still serves a purpose, and I plan to hang on to it for a little while longer.  This post will outline some issues I encountered while recently migrating from a USB boot device to a more permanent option.  As described extensively in this knowledge base article: <a href=\"https:\/\/knowledge.broadcom.com\/external\/article\/317631\/sd-cardusb-boot-device-revised-guidance.html\">https:\/\/knowledge.broadcom.com\/external\/article\/317631\/sd-cardusb-boot-device-revised-guidance.html<\/a>, using USB devices is no longer a recommended boot media due to the endurance of the media.  In addition, this host recently started throwing an error message:<\/p>\n\n\n\n<p><code>Lost connectivity to the device mpx.vmhba32:C0:T0:L0 backing the boot filesystem \/vmfs\/devices\/disks\/mpx.vmhba32:C0:T0:L0. As a result, host configuration changes will not be saved to persistent storage.<\/code> <\/p>\n\n\n\n<p>This message appeared on the host object in vCenter Server. I decided this would be a good time to move the boot device to a more durable media. The host had a local disk, which contained a single VMFS volume where I stored a VM containing some backups.  I moved this VM to a shared datastore for safe keeping and proceeded to delete the VMFS volume. I wanted to re-install ESXi and specify this device, and not having a VMFS volume makes me more confident when selecting the disk during the ESXi install.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Creating the boot media<\/h1>\n\n\n\n<p>For this ESXi host, I knew that I would need the latest ESXi base image (8.0u3d), the Synology NFS Plug-in for VAAI, and the USB NIC Fling Driver.  Instead of just installing ESXi and then adding packages, or using <code>New-ImageBundle<\/code>, I decided to turn to vCenter Server Lifecycle Manager for help.  I first created a new, empty cluster object.   I then selected the updates tab and selected &#8216;manage with a single image&#8217;, and then &#8216;setup image manually&#8217;.  I selected the required ESXi version and additional components, save, and finally &#8216;finish image setup&#8217;.  Once complete, I was able to select the &#8216;&#8230;&#8217; and &#8216;Export&#8217; options, pictured below. <\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/03\/image-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"645\" height=\"178\" src=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/03\/image-1.png\" alt=\"\" class=\"wp-image-2222\" srcset=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/03\/image-1.png 645w, https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/03\/image-1-300x83.png 300w\" sizes=\"auto, (max-width: 645px) 100vw, 645px\" \/><\/a><\/figure>\n\n\n\n<p>This allowed me to export the image as an ISO image, pictured below:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/03\/image-2.png\"><img loading=\"lazy\" decoding=\"async\" width=\"554\" height=\"361\" src=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/03\/image-2.png\" alt=\"\" class=\"wp-image-2223\" srcset=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/03\/image-2.png 554w, https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/03\/image-2-300x195.png 300w\" sizes=\"auto, (max-width: 554px) 100vw, 554px\" \/><\/a><\/figure>\n\n\n\n<p>With the ISO image in hand, I used Rufus to write the ISO image to a USB drive to use as the installation media.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Installing ESXi<\/h1>\n\n\n\n<p>Since I only needed to install ESXi on a single host, I decided to do so manually \/ interactively.  Knowing that this was an old host, and the installed CPU was no longer supported on the HCL, I pressed <code>SHIFT<\/code>+<code>o<\/code> (the letter o, not the number zero) during bootup to add a couple of boot options:<\/p>\n\n\n\n<p><code>systemMediaSize=min allowLegacyCPU=true<\/code><\/p>\n\n\n\n<p>The <code>systemMediaSize<\/code> option limits the amount of space used on the boot media to 32GB (min) instead of 128GB (default).  This is described more here: <a href=\"https:\/\/knowledge.broadcom.com\/external\/article\/345195\/boot-option-to-configure-the-size-of-esx.html\">https:\/\/knowledge.broadcom.com\/external\/article\/345195\/boot-option-to-configure-the-size-of-esx.html<\/a>.  The <code>allowLegacyCPU<\/code> option allows ESXi installs to continue on unsupported CPUs.  This is documented various places, including here: <a href=\"https:\/\/williamlam.com\/2022\/10\/quick-tip-automating-esxi-8-0-install-using-allowlegacycputrue.html\">https:\/\/williamlam.com\/2022\/10\/quick-tip-automating-esxi-8-0-install-using-allowlegacycputrue.html<\/a>.  <\/p>\n\n\n\n<p>The install went well, I was able to select my empty local disk to use as an installation target and the system booted up fine afterwards.  I noticed I now had a <code>datastore1<\/code> on this host which was 32GB smaller than the original VMFS volume.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Configuring USB NIC Fling Driver<\/h1>\n\n\n\n<p>My USB NIC was recognized immediately as well, since I had included the driver in the custom image. I added the host to a distributed virtual switch, and mapped uplinks to the appropriate physical NICs, but on reboot the vusb0 device was no longer in use by Uplink 2.<\/p>\n\n\n\n<p>Some of my notes mentioned that I had previously added some lines to the <code>\/etc\/rrc.local.d\/local.sh<\/code> script to handle this, although I didn&#8217;t list <em>which<\/em> commands.  Thankfully I was able to get the system to boot from the failing USB device and review this file.  I&#8217;ve included the code added below:  <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>vusb0_status=$(esxcli network nic get -n vusb0 | grep 'Link Status' | awk '{print $NF}')\ncount=0\nwhile &#91;&#91; $count -lt 20 &amp;&amp; \"${vusb0_status}\" != \"Up\" ]]\ndo\n    sleep 10\n    count=$(( $count + 1 ))\n    vusb0_status=$(esxcli network nic get -n vusb0 | grep 'Link Status' | awk '{print $NF}')\ndone\n\nesxcfg-vswitch -P vusb0 -V 308 30-Greenfield-DVS\n\/bin\/vim-cmd internalsvc\/refresh_network<\/code><\/pre>\n\n\n\n<p>The <code>esxcfg-vswitch<\/code> help states that the <code>-P<\/code> and <code>-V<\/code> options are used as follows:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code> -V|--dvp=dvport             Specify a DVPort Id for the operation.\n -P|--add-dvp-uplink=uplink  Add an uplink to a DVPort on a DVSwitch.\n                              Must specify DVPort Id.<\/code><\/pre>\n\n\n\n<p> The Physical uplink I wanted to add was <code>vusb0<\/code> and the DV Port Id for the operation was <code>308<\/code>, which could be found on the distributed switch > ports tab > when filtering he &#8216;connectee&#8217; column for the specific host in question, pictured below:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/03\/image-3.png\"><img loading=\"lazy\" decoding=\"async\" width=\"601\" height=\"413\" src=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/03\/image-3.png\" alt=\"\" class=\"wp-image-2225\" srcset=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/03\/image-3.png 601w, https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/03\/image-3-300x206.png 300w\" sizes=\"auto, (max-width: 601px) 100vw, 601px\" \/><\/a><\/figure>\n\n\n\n<p>Now on system reboot, the <code>vusb0<\/code> uplink correctly connects to the expected distributed switch.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Lifecycle Manager &#8211; Host is not compatible with the image<\/h1>\n\n\n\n<p>Once I had the host networking situated, I wanted to verify that vCenter Lifecycle Manager agreed that my host was up to date with the latest image.  I was surprised to see that the system said <code>The CPU on the host is not supported by the image. Please refer to KB 82794 for more details.<\/code> <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/03\/image-4.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"348\" src=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/03\/image-4-1024x348.png\" alt=\"\" class=\"wp-image-2226\" srcset=\"https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/03\/image-4-1024x348.png 1024w, https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/03\/image-4-300x102.png 300w, https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/03\/image-4-768x261.png 768w, https:\/\/enterpriseadmins.org\/blog\/wp-content\/uploads\/2025\/03\/image-4.png 1267w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p>I knew these CPUs were unsupported, but had expected a less significant <code>The CPU on this host may not be supported in future ESXi releases<\/code>, which is what I had observed prior to the host rebuild.  After some searching, I found this thread: <a href=\"https:\/\/community.broadcom.com\/vmware-cloud-foundation\/discussion\/syntax-for-an-upgrade-cmd-to-ignore-cpu-requirements\">https:\/\/community.broadcom.com\/vmware-cloud-foundation\/discussion\/syntax-for-an-upgrade-cmd-to-ignore-cpu-requirements<\/a>, which proposed edits to the <code>\/bootbank\/boot.cfg<\/code>, specifically adding the <code>allowLegacyCPU=true<\/code> flag to be added to the end of the <code>kernelopt=<\/code> line.  This resolved my issue and allows me to continue functioning with this older system.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Conclusion<\/h1>\n\n\n\n<p>This migration process highlights the challenges of maintaining older ESXi hosts while ensuring compatibility. Moving from USB-based boot devices to more durable storage is a critical step, especially as support is phased out for USB\/SD boot devices. Leveraging vCenter Lifecycle Manager simplifies image management, though workarounds (such as <code>allowLegacyCPU=true<\/code>) may be needed for legacy hardware.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I have an older Intel NUC in my lab, and although its aging, it still serves a purpose, and I plan to hang on to it for a little while longer. This post will outline some issues I encountered while &hellip; <a href=\"https:\/\/enterpriseadmins.org\/blog\/virtualization\/reviving-an-old-esxi-host-usb-to-local-disk-migration\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":6,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[9,4],"tags":[],"class_list":["post-2221","post","type-post","status-publish","format-standard","hentry","category-lab-infrastructure","category-virtualization"],"_links":{"self":[{"href":"https:\/\/enterpriseadmins.org\/blog\/wp-json\/wp\/v2\/posts\/2221","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/enterpriseadmins.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/enterpriseadmins.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/enterpriseadmins.org\/blog\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/enterpriseadmins.org\/blog\/wp-json\/wp\/v2\/comments?post=2221"}],"version-history":[{"count":3,"href":"https:\/\/enterpriseadmins.org\/blog\/wp-json\/wp\/v2\/posts\/2221\/revisions"}],"predecessor-version":[{"id":2228,"href":"https:\/\/enterpriseadmins.org\/blog\/wp-json\/wp\/v2\/posts\/2221\/revisions\/2228"}],"wp:attachment":[{"href":"https:\/\/enterpriseadmins.org\/blog\/wp-json\/wp\/v2\/media?parent=2221"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/enterpriseadmins.org\/blog\/wp-json\/wp\/v2\/categories?post=2221"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/enterpriseadmins.org\/blog\/wp-json\/wp\/v2\/tags?post=2221"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}