{"id":525,"date":"2026-09-07T22:53:16","date_gmt":"2026-09-07T20:53:16","guid":{"rendered":"https:\/\/nutanix.ma\/index.php\/2026\/09\/07\/restore-node-stuck-in-phoenix-lcm-firmware-upgrade-failure\/"},"modified":"2026-09-07T22:53:16","modified_gmt":"2026-09-07T20:53:16","slug":"restore-node-stuck-in-phoenix-lcm-firmware-upgrade-failure","status":"publish","type":"post","link":"https:\/\/nutanix.ma\/index.php\/2026\/09\/07\/restore-node-stuck-in-phoenix-lcm-firmware-upgrade-failure\/","title":{"rendered":"How to Restore a Node Stuck in Phoenix After an LCM Firmware Upgrade Failure"},"content":{"rendered":"<p>Every so often an LCM firmware upgrade doesn&#8217;t come back. The node was booted into Phoenix \u2014 the small Linux environment LCM uses to flash firmware \u2014 the update failed or stalled partway, and now the node is sitting at a Phoenix prompt with its CVM and hypervisor both in maintenance mode. Prism shows a host down, the cluster is running on one fewer node than it should be, and the temptation is to start clicking things.<\/p>\n<p>Don&#8217;t. The recovery is well-defined and mostly a matter of doing four things in the right order:<\/p>\n<ol>\n<li>Reboot the node out of Phoenix and back into the hypervisor.<\/li>\n<li>Take the CVM out of maintenance mode.<\/li>\n<li>Take the hypervisor host out of maintenance mode.<\/li>\n<li>Confirm cluster services are back and metadata has settled.<\/li>\n<\/ol>\n<p>This is the sequence from a recent case on a six-node AHV cluster, with screenshots. Customer identifiers, addresses and serials are redacted throughout.<\/p>\n<h2>Step 1 \u2014 Make sure nothing is still running<\/h2>\n<p>Before touching the node, confirm LCM isn&#8217;t still mid-operation. Rebooting a node while LCM believes it owns it makes the situation worse, not better. From any healthy CVM in the cluster:<\/p>\n<pre><code>nutanix@CVM~$ lcm_upgrade_status<\/code><\/pre>\n<p>You want to see <code>No task found for kLcmUpdateOperation<\/code>. Then check for an inventory task as well:<\/p>\n<pre><code>nutanix@CVM~$ ecli task.list include_completed=false operation_type_list=kLcmInventoryOperation<\/code><\/pre>\n<p>That should return no tasks either. If either command shows something in progress, wait \u2014 or if it&#8217;s genuinely wedged, that&#8217;s the point to involve Nutanix Support rather than force it.<\/p>\n<p>In Prism, the Hardware table will show the affected host flagged. In this case NODE1 was carrying the critical alert while the other five were up.<\/p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/nutanix.ma\/wp-content\/uploads\/2026\/09\/phoenix-node-recovery-01.webp\" alt=\"Prism Element Hardware table showing six AHV hosts with NODE1 flagged with a critical alert\"\/><figcaption>Hardware table \u2014 one host flagged, five healthy.<\/figcaption><\/figure>\n<h2>Step 2 \u2014 Confirm the node is actually in Phoenix<\/h2>\n<p>A node that isn&#8217;t responding on the network could be in Phoenix, or it could be hung, powered off, or stuck in BIOS. They need different fixes, so look before you act. Open the KVM console from the node&#8217;s IPMI web interface. A node in Phoenix looks exactly like this \u2014 a bare <code>[root@phoenix ~]#<\/code> prompt and nothing else:<\/p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/nutanix.ma\/wp-content\/uploads\/2026\/09\/phoenix-node-recovery-02.webp\" alt=\"IPMI KVM console showing the node sitting at a root@phoenix prompt\"\/><figcaption>The Phoenix prompt in the IPMI console. This is the state we&#8217;re recovering from.<\/figcaption><\/figure>\n<p>If you see this, the node isn&#8217;t broken \u2014 it&#8217;s parked. If you see something else, stop and diagnose that first.<\/p>\n<h2>Step 3 \u2014 Boot back into the hypervisor<\/h2>\n<p>From the Phoenix prompt in the console, run the reboot script that Phoenix ships with:<\/p>\n<pre><code>phoenix \/ # python phoenix\/reboot_to_host.py<\/code><\/pre>\n<p>The node reboots normally, through the Nutanix BIOS splash and into AHV. Give it time \u2014 a full boot with a CVM starting up is several minutes, and the host won&#8217;t appear healthy in Prism until the CVM is fully up.<\/p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/nutanix.ma\/wp-content\/uploads\/2026\/09\/phoenix-node-recovery-03.webp\" alt=\"IPMI console showing the node rebooting through the Nutanix BIOS splash screen back into the hypervisor\"\/><figcaption>Back through BIOS and into the hypervisor.<\/figcaption><\/figure>\n<h2>Step 4 \u2014 Take the host out of maintenance mode<\/h2>\n<p>LCM put the CVM and the host into maintenance mode before it started, and because the operation failed, it never took them out. You do that manually. First find the host ID:<\/p>\n<pre><code>nutanix@CVM~$ ncli host list<\/code><\/pre>\n<p>Then, <strong>from a healthy CVM \u2014 not the one on the node you&#8217;re recovering<\/strong>, clear maintenance mode:<\/p>\n<pre><code>nutanix@CVM~$ ncli host edit id=&lt;host-ID&gt; enable-maintenance-mode=false<\/code><\/pre>\n<p>Verify it took:<\/p>\n<pre><code>nutanix@CVM~$ acli host.get &lt;hypervisor-IP-address&gt;\nnutanix@CVM~$ cluster status | grep -v UP<\/code><\/pre>\n<p>The <code>acli<\/code> output should show the host no longer in maintenance mode, and the second command should return nothing \u2014 meaning every service on every CVM reports UP. Anything it does print is a service that hasn&#8217;t come back, and worth a second look before moving on.<\/p>\n<h2>Step 5 \u2014 Re-enable the metadata store if the node was out for long<\/h2>\n<p>Here&#8217;s the part that catches people out. If the node was in maintenance mode for more than about 30 minutes, the cluster will have detached it from the Cassandra metadata ring to protect itself. Bringing the host back doesn&#8217;t automatically re-attach it \u2014 you have to enable the metadata store on that host explicitly.<\/p>\n<p>In Prism, open the host&#8217;s details from the Hardware table and use <strong>Enable Metadata Store<\/strong>:<\/p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/nutanix.ma\/wp-content\/uploads\/2026\/09\/phoenix-node-recovery-04.webp\" alt=\"Prism Element host details for NODE1 with the Enable Metadata Store action highlighted\"\/><figcaption>Enable Metadata Store on the recovered host.<\/figcaption><\/figure>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/nutanix.ma\/wp-content\/uploads\/2026\/09\/phoenix-node-recovery-05.webp\" alt=\"Prism Element confirmation that the metadata store was successfully enabled on the host\"\/><figcaption>Prism confirms the metadata store is enabled on the host.<\/figcaption><\/figure>\n<p>Then watch the ring rebuild. From any CVM:<\/p>\n<pre><code>nutanix@CVM~$ nodetool -h 0 ring<\/code><\/pre>\n<p>Immediately after enabling, the recovered node shows as <strong>Forwarding<\/strong> while the others are <strong>Normal<\/strong>. That&#8217;s expected \u2014 metadata is being redistributed back onto it.<\/p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/nutanix.ma\/wp-content\/uploads\/2026\/09\/phoenix-node-recovery-06.webp\" alt=\"nodetool -h 0 ring output showing one node in Forwarding state while the others are Normal\"\/><figcaption>One node in Forwarding \u2014 the ring is rebalancing.<\/figcaption><\/figure>\n<p>Keep re-running <code>nodetool -h 0 ring<\/code> until every node reads Normal. Don&#8217;t start the next maintenance task, and don&#8217;t retry the LCM upgrade, until it does. Depending on cluster size and metadata volume this can take a while; on this cluster it was a few minutes.<\/p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/nutanix.ma\/wp-content\/uploads\/2026\/09\/phoenix-node-recovery-07.webp\" alt=\"nodetool -h 0 ring output with all nodes back in Normal state\"\/><figcaption>All nodes Normal \u2014 the metadata ring is whole again.<\/figcaption><\/figure>\n<h2>Step 6 \u2014 Confirm the cluster is healthy<\/h2>\n<p>Back in Prism, the home dashboard should show Cluster Resiliency OK and &#8220;Data resilient as per configuration.&#8221; Expect warnings to linger for a while \u2014 in this case, incompatible-AHV-version alerts from the interrupted upgrade \u2014 but no critical alerts, and hosts, VMs and disks all green.<\/p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/nutanix.ma\/wp-content\/uploads\/2026\/09\/phoenix-node-recovery-08.webp\" alt=\"Prism Element home dashboard showing cluster resiliency OK and data resilient as per configuration\"\/><figcaption>Resiliency OK. The cluster is back to a normal state.<\/figcaption><\/figure>\n<p>Only now should you go back and look at <em>why<\/em> the firmware upgrade failed, and whether to retry it.<\/p>\n<h2>Two rules worth repeating<\/h2>\n<p>First: <strong>always run the maintenance-mode commands from a healthy CVM<\/strong>, not from the one on the node you&#8217;re recovering. Its services may not be fully up, and you want the cluster&#8217;s view of the host, not the host&#8217;s view of itself.<\/p>\n<p>Second: <strong>if any step produces something you don&#8217;t expect, stop and contact Nutanix Support.<\/strong> This procedure is for the clean case \u2014 a node parked in Phoenix after a failed firmware flash. If the node won&#8217;t boot, the ring won&#8217;t converge, or <code>cluster status<\/code> keeps showing services down, that&#8217;s a different problem and pushing through it on your own is how a one-node outage becomes a data problem.<\/p>\n<p>If you&#8217;ve hit this and want a second pair of eyes before you act, <a href=\"https:\/\/nutanix.ma\/index.php\/contact-me\/\">get in touch<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Every so often an LCM firmware upgrade doesn&#8217;t come back. The node was booted into Phoenix \u2014 the small Linux environment LCM uses to flash firmware \u2014 the update failed or stalled partway, and now the node is sitting at a Phoenix prompt with its CVM and hypervisor both in maintenance mode. Prism shows a [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-525","post","type-post","status-publish","format-standard","hentry","category-nutanix"],"_links":{"self":[{"href":"https:\/\/nutanix.ma\/index.php\/wp-json\/wp\/v2\/posts\/525","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nutanix.ma\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nutanix.ma\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nutanix.ma\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/nutanix.ma\/index.php\/wp-json\/wp\/v2\/comments?post=525"}],"version-history":[{"count":0,"href":"https:\/\/nutanix.ma\/index.php\/wp-json\/wp\/v2\/posts\/525\/revisions"}],"wp:attachment":[{"href":"https:\/\/nutanix.ma\/index.php\/wp-json\/wp\/v2\/media?parent=525"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nutanix.ma\/index.php\/wp-json\/wp\/v2\/categories?post=525"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nutanix.ma\/index.php\/wp-json\/wp\/v2\/tags?post=525"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}