Bei einem 3-Node-Deployment von Dell XC760-14 mit Nutanix AHV ist uns die CVM-Installation reproduzierbar, aber scheinbar zufällig um die Ohren geflogen: erst nur auf Node 3, nach einem Neustart plötzlich auch auf Node 2. Die Ursache war weder Hardware noch Firmware, sondern ein Timing-Problem zwischen dem Phoenix-Installer und udev. Ein einzeiliger Workaround hat das Deployment gerettet.
In diesem Beitrag zeigen wir, wie sich der Fehler äußert, wie wir ihn eingegrenzt haben und wie Sie ihn umgehen.
Die Umgebung
Drei identische Nodes, alle mit demselben Firmware-Stand. Das wird später noch wichtig.
| Komponente | Version / Modell |
|---|---|
| Plattform | Dell XC760-14 (16G) |
| Foundation | 5.11 (Foundation Platforms 2.20), auf macOS |
| AOS | 7.5.1.10 |
| AHV | 11.0.1.6 |
| Storage-Controller | Dell HBA355i, Firmware 24.15.14.00 |
| Datendisks | 4× Toshiba MG08SDA800EY 8 TB SAS (EL01), 2× 1,92 TB SATA-SSD (K003) |
| Hypervisor-Boot | BOSS-N1, 2× 480 GB NVMe |
| BIOS / iDRAC | 2.6.4 / 7.20.30.00 |
Das Fehlerbild
In der Foundation-GUI bleibt der betroffene Node bei „fatal: Running CVM Installer, Starting host installer“ stehen. Das Node-Log zeigt nur eine nichtssagende Meldung:
Imaging thread 'svm' failed with reason [None]
CRITICAL AOS installation failed. Reason: None
Die eigentliche Ursache steht weiter oben, in der Ausgabe von svm_rescue bzw. clean_disks:
INFO clean_disks:130 Formatting partition /dev/sda1 with ext4
... (sda1 wird erfolgreich formatiert, ca. 13 s)
INFO clean_disks:130 Formatting partition /dev/sdb1 with ext4
ERROR luks_util.py:143 Failed to check if the partition /dev/sdb1 is LUKS encrypted. ret: 2
ERROR disk.py:465 Failed to get size for partition /dev/sdb1 ... blockdev: cannot open /dev/sdb1: No such file or directory
CRITICAL clean_disks:345 Failed to clean partitions: [...]
Der Installer hat die Partition wenige Sekunden vorher selbst angelegt, findet sie beim Formatieren aber nicht. Im lsblk am Ende des Logs ist sie wieder da. Welche HDD es trifft, wechselt: mal sdb1, mal sda1.
Die übrigen Fehler im Log sind Rauschen und für das Problem irrelevant: fehlendes ipmitool auf dem Foundation-Rechner, ipmicfg -tp (TwinPro, ein Supermicro-Tool) sowie factory_config.json und release_version im Chroot.
Was es nicht war
Der naheliegende Verdacht ist eine defekte Disk. Diese Spuren haben wir nacheinander ausgeschlossen:
| Verdacht | Prüfung | Ergebnis |
|---|---|---|
| Altlasten früherer Versuche (md-RAID, LVM, Partitionen) | Alle Disks in Phoenix mit wipefs und sgdisk --zap-all geleert |
Fehler bleibt |
| Defekte HDD | smartctl, Grown Defects, dd-Lesetest am Anfang und Ende der Disk |
Unauffällig, identisch zu den anderen Disks |
| Controller- oder Link-Probleme | dmesg auf Resets und I/O-Fehler |
Nur die normalen Init-Resets beim Boot |
| Firmware-Unterschiede | Firmware-Bestandsaufnahme im iDRAC aller Nodes | Alles identisch |
| Slot-Belegung | iDRAC-Übersicht der physischen Disks | Identisch auf allen Nodes |
Der entscheidende Hinweis kam aus dem Wiederholen: Nach einem Kaltstart traf es eine andere Disk. Später scheiterten auch zwei Nodes, die vorher sauber durchgelaufen waren. Ein Hardware-Defekt wandert nicht, ein Timing-Problem schon.
Die Ursache: ein Wettlauf mit udev
Der Kernel-Log (dmesg) im laufenden Phoenix zeigt den Mechanismus:
[354.03] sdf: ← Installer löscht die alten Partitionstabellen
[355.65] sdc:
[357.16] sdd:
[358.53] sde:
[360.11] sda:
[361.70] sdb:
[363.49] sda: sda1 ← plötzlicher Komplett-Rescan von sda
→ unmittelbar danach: blockdev: cannot open /dev/sda1
So kommt es zum Fehler:
repartition_diskslegt die neue Partition perpartedan. Der Kernel trägt sie still ein, imdmesgerscheint dazu nichts.clean_disksprüft direkt vor dem Formatieren, ob die Disk ein Self-Encrypting Drive ist. Dafür öffnet es das Gerät und schließt es wieder.- udev überwacht Block-Devices per inotify. Wird eine Disk nach einem Schreib-Open geschlossen, stößt udev einen Rescan der Partitionstabelle an.
- Beim Rescan entfernt der Kernel alle Partitionen der Disk kurz und legt sie neu an. Das ist die Zeile
sda: sda1. - Fällt der nächste Zugriff von
clean_disks(cryptsetup,blockdev --getsize64) genau in diese Lücke, existiert/dev/sdX1nicht, und die Installation bricht ab.
Ob es knallt, entscheiden Millisekunden. Deshalb trifft es mal diesen, mal jenen Node und mal diese, mal jene Disk. Mit 8-TB-HDDs, deren Formatierung (mke2fs mit bigalloc) rund 13 Sekunden dauert, scheint das Zeitfenster ungünstig zu liegen.
Der Workaround: udev-Watch im Phoenix abschalten
Wir schalten für die Dauer der Installation die udev-Überwachung der Datendisks ab. Die Regel lebt nur im RAM des laufenden Phoenix und ist nach dem nächsten Reboot automatisch weg.
- Deployment in Foundation starten.
- Warten, bis im Node-Log
Rebooted into Phoenix successfullysteht. Bis zum Start des CVM-Installers bleiben dann etwa 2 bis 5 Minuten, je nachdem, wie schnell das AOS-Paket übertragen wird. - Per SSH auf die CVM-IP des Nodes verbinden. Phoenix-Standardlogin:
root/nutanix/4u. Da Phoenix bei jedem Boot einen neuen Host-Key erzeugt, lohnt sich hier die Option ohne Key-Prüfung:ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@<CVM-IP> - Regel setzen und anwenden:
echo 'SUBSYSTEM=="block", KERNEL=="sd*", OPTIONS+="nowatch"' > /etc/udev/rules.d/99-nowatch.rules udevadm control --reload udevadm trigger --action=change --subsystem-match=block udevadm settle - Optional prüfen, ob die Regel wirkt. Der Befehl öffnet und schließt
sdanur und schreibt nichts. Taucht danach keine neuesda:-Zeile imdmesgauf, ist die Überwachung aus:dmesg | tail -1; exec 3<>/dev/sda; exec 3>&-; sleep 2; dmesg | tail -1
Bei mehreren Nodes geht das vom Admin-Rechner aus in einer Schleife:
for ip in <CVM-IP-1> <CVM-IP-2> <CVM-IP-3>; do
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@$ip
'echo "SUBSYSTEM=="block", KERNEL=="sd*", OPTIONS+="nowatch"" > /etc/udev/rules.d/99-nowatch.rules && udevadm control --reload && udevadm trigger --action=change --subsystem-match=block && udevadm settle && echo "$(hostname -I) OK"'
done
Mit der Regel lief die CVM-Installation auf dem zuvor dreimal gescheiterten Node beim ersten Versuch durch.
Fazit
„AOS installation failed. Reason: None“ heißt nur, dass Foundation den Grund nicht kennt. Die Antwort steht fast immer weiter oben im Node-Log, in der Ausgabe von svm_rescue. Unsere Empfehlungen:
- Bei sporadischen
clean_disks-Fehlern mit „cannot open /dev/sdX1″ zuerst an das Timing denken, nicht an die Disk. dmesgim laufenden Phoenix ist der schnellste Weg zur Ursache: Ein Rescan wiesdX: sdX1direkt vor dem Fehler ist das Erkennungszeichen.- Der Workaround ist ein Eingriff in die Installationsumgebung und kein offizieller Fix. Melden Sie den Fall parallel beim Hersteller-Support. Bei Dell XC läuft auch der Nutanix-Support über Dell.
- Vor dem Deployment prüfen, ob eine neuere Foundation-Version verfügbar ist.
Wir haben den Fall an den Support gemeldet und ergänzen diesen Beitrag, sobald es eine offizielle Lösung gibt.
Sie planen ein Nutanix-Deployment oder hängen gerade selbst in Foundation fest? Sprechen Sie uns an, wir helfen gern.