Creating a VM on AHV, installing a guest OS on it and then enabling Nutanix Guest Tools is one of those end-to-end tasks that comes up on nearly every engagement. It’s straightforward once you’ve done it a few times, but there are a couple of places where the order of operations matters — particularly attaching the installation media before first boot, and getting NGT onto the guest afterwards. This post walks through the whole sequence on a Linux VM, with screenshots from the actual project (customer identifiers, host names and IP addresses have been redacted throughout).

Step 1 — Create the VM

Everything starts from Prism Element’s VM view, where “+ Create VM” opens the configuration form. The General Configuration section covers the basics: a name and description, and a timezone. It’s worth pausing on the timezone note Prism shows here — use UTC for Linux VMs and local time for Windows VMs. Below that, Compute Details sets the vCPU count and cores per vCPU; this VM was built as a small web server, so two vCPUs was plenty.

Prism Element Create VM dialog showing the General Configuration section with name, description, timezone and vCPU fields
Creating the VM — name, timezone and compute sizing in one form.

Step 2 — Attach the installation media

Scrolling further down the same form reaches the Disks section. A new VM comes with an empty IDE CD-ROM already attached, which is exactly what the OS installer needs to boot from.

Create VM form showing the Disks section with an empty IDE CD-ROM attached by default
The default empty CD-ROM — this is what gets pointed at the installer ISO.

Editing that CD-ROM opens the Update Disk dialog. Setting the operation to “Clone from Image Service” and picking the Ubuntu Server image from the dropdown mounts the ISO to the VM. This assumes the ISO has already been uploaded to the cluster’s Image Service — if it hasn’t, that’s a prerequisite to sort out before creating the VM.

Update Disk dialog set to Clone from Image Service with an Ubuntu Server image selected on the IDE bus
Pointing the CD-ROM at the Ubuntu Server image held in the Image Service.

Step 3 — Add the data disk

Next, “Add New Disk” creates the actual virtual disk the OS will install onto. The type is DISK, the operation is “Allocate on Storage Container”, and the bus type is SCSI — which is the right choice for a Linux guest on AHV, since the VirtIO SCSI driver is built into modern kernels. After choosing the storage container and setting the size (500 GiB here), the index can be left on “Next Available”.

Add Disk dialog allocating a 500 GiB SCSI disk on a storage container
Allocating the 500 GiB SCSI disk the guest OS will be installed on.

With both in place, the Disks list shows the two entries side by side: the CD-ROM now holding the installer ISO, and the empty 500 GiB SCSI disk.

Disks list showing a populated CD-ROM on ide.0 and a 500 GiB disk on scsi.0
Both disks attached — installer media on IDE, the target disk on SCSI.

Step 4 — Add a network adapter

The last piece of the VM definition is the NIC. “Add New NIC” asks for a subnet, and once one is picked Prism displays its VLAN ID, IPAM mode and the virtual switch backing it. With the network left unmanaged, no address is handed out by Prism and the guest is responsible for its own IP configuration — which is why Private IP Assignment shows NONE here.

Create NIC dialog showing subnet selection with VLAN ID, IPAM mode, virtual switch and connection state
Adding the NIC — on an unmanaged subnet, addressing is left to the guest.

Step 5 — Install the OS from the console

Saving the VM and powering it on, then launching the console, boots straight into the Ubuntu Server installer. The first prompt is the keyboard layout — worth setting correctly rather than accepting the default, because it’s the layout you’ll be typing the root password with a few screens later.

Ubuntu installer keyboard configuration screen with a layout selected
Keyboard layout — set this properly, you’ll be typing a password with it shortly.

The installer then offers a choice between the full Ubuntu Server install and the minimized variant. The minimized build strips out tooling that isn’t needed on machines people don’t log into interactively; for a general-purpose server the full install is the more comfortable option. There’s also a checkbox here for searching third-party drivers, which isn’t needed on AHV since the VirtIO drivers are already in the kernel.

Ubuntu installer screen choosing between Ubuntu Server and Ubuntu Server minimized
Choosing the full Ubuntu Server install over the minimized variant.

Network configuration comes next. The VirtIO NIC shows up as ens3, correctly identified as a Red Hat Virtio network device. On an unmanaged subnet with no DHCP there’s nothing for the installer to pick up automatically, so this environment continued without network and had addressing configured after the install.

Ubuntu installer network configuration screen showing the ens3 VirtIO interface disabled with an option to continue without network
The VirtIO NIC is detected as ens3 — with no DHCP on the subnet, the install continues offline.

Because there’s no network yet, the next two screens — proxy configuration and the Ubuntu archive mirror — are both left at their defaults. The installer even notes that it can’t validate the mirror, since it has no connectivity to test it with.

Ubuntu installer proxy configuration screen left blank
No proxy in this environment, so the field stays empty.
Ubuntu installer archive mirror configuration screen noting the mirror cannot be checked without a network
The mirror can’t be validated without connectivity — the default is fine.

Storage layout

The guided storage screen is where the 500 GiB SCSI disk finally gets used. “Use an entire disk” with “Set up this disk as an LVM group” ticked is the sensible default for a server — LVM makes it far easier to grow filesystems later without touching the partition table. LUKS encryption is offered here too, and was left off in this case.

Ubuntu guided storage configuration using an entire 500 GB disk set up as an LVM group
Guided storage on the full disk, with LVM enabled.

The resulting summary is worth reading carefully, because the installer’s default is easy to miss: it creates a volume group across the whole disk but only allocates 100 GiB to the root logical volume, leaving nearly 400 GiB unallocated. That’s not a mistake — it’s free headroom that can be handed to / or to new logical volumes later with lvextend. If you actually wanted the whole disk as root from day one, this is the screen to change it on.

Ubuntu storage configuration summary showing a 100 GiB root logical volume, a 2 GiB boot partition and free space remaining in the volume group
Root gets 100 GiB by default — the rest of the volume group stays free for later.

Confirming the layout triggers the usual destructive-action warning. Past this point the disk gets formatted and there’s no going back to previous screens.

Ubuntu installer confirm destructive action dialog warning that continuing will format the selected disks
The point of no return — everything after this writes to disk.

Profile, updates and remote access

Profile configuration sets the server’s hostname along with the first user account and its password. That password matters even on a key-based setup, since it’s what sudo will ask for.

Ubuntu installer profile configuration screen with fields for name, server name, username and password
Setting the hostname and the first user account.

The Ubuntu Pro screen follows. It needs an internet connection to enable, so on an offline install it’s skipped — it can always be attached later once the machine has connectivity.

Ubuntu Pro upgrade screen with the skip option selected
Ubuntu Pro needs connectivity, so it’s skipped at install time.

SSH is the one screen not to click past. Ticking “Install OpenSSH server” is what makes the VM reachable without the Prism console afterwards — and on a machine with no network configured yet, forgetting it means going back through the console to install it by hand.

Ubuntu installer SSH configuration screen with Install OpenSSH server selected
Installing OpenSSH server during setup saves a trip back through the console later.

Once the installation finishes and the VM reboots, the console lands on a normal login prompt and the usual Ubuntu message of the day — kernel version, resource usage and update status.

First boot of the installed Ubuntu 24.04 LTS server showing the login prompt and system information summary
First boot — Ubuntu 24.04 LTS installed and running on AHV.

Step 6 — Enabling Nutanix Guest Tools

With the OS up, the last job is NGT. It’s what gives the cluster in-guest visibility and enables application-consistent snapshots, guest-level VSS/quiescing, self-service file restore and in-place guest shutdown — so on a production VM it isn’t really optional. NGT is enabled for the VM from Prism, which attaches the NGT ISO to the VM’s CD-ROM; the console’s own “Mount ISO” control does the same job from the console window.

From there the rest happens inside the guest. The ISO is mounted (it may already be mounted automatically), and the installer lives under the installer/linux directory on it:

sudo mount /dev/sr0 /mnt
cd /mnt/installer/linux/
sudo ./install_ngt.py

Listing that directory first is a useful sanity check — install_ngt.py, install_ngt_core.py and the matching uninstall scripts should all be there. Running install_ngt.py with sudo then installs the guest agent and the self-service restore components.

Guest console showing the NGT ISO mounted and the install_ngt.py script being run from the installer linux directory
Mounting the NGT ISO inside the guest and running the installer.

That’s the full path from an empty cluster slot to a running, managed Linux VM: define the VM with its media, disk and NIC, install the OS through the console, then enable NGT so the cluster can actually see and protect what’s inside it. The only step that regularly gets skipped is the last one — and it’s the one that matters most the first time you try to take an application-consistent snapshot.

Leave a Reply

Your email address will not be published. Required fields are marked *

TOP