⏱この記事を読むのに必要な時間は約 9 分です。
Nutanix CE 2.0の特長として、AOS/AHVが商用版と共通化されたこと、そしてそれに伴いLCM(Life Cycle Manager)で商用ビルドのソフトウェアを用いた更新ができるようになったことが挙げられます。
ただし、実際にAHVを更新した際には共通化されたが故の問題が起きましたので、その原因と解決方法について解説します。
前置き: CE 2.0のソフトウェア更新方法
CE 2.0では商用版と同じくLCMを利用したソフトウェア更新が可能です。
LCMは自動で新しいバージョンのソフトウェアを検出・ダウンロードする機能がありますが、実はNutanix Support Portalに掲載される全てのバージョンが対象となっているわけではなく、“One click download enabled”というフラグが有効化されているバージョンだけが対象となっています。それ以外のバージョンは、サポートポータルのダウンロードページ(パートナーや商用版ユーザー向けで、CEのみのユーザーはアクセス不可)から手動でダウンロードし、LCMに手動でアップロードすることでアップデート可能となっています。つまり、CEのみのユーザーは基本的にOne click download enabledなバージョンだけが利用可能です。
なお、One click download enabledフラグはAOS, Prism Central, Filesに対しては存在しますが、AHVに対しては存在せず、アップデート対象として選択可能なAOSおよび現在のAOSで利用可能なAHVが自動で表示されるようになっています。実際のどのAHVバージョンを選択するかは、Compatibility and Interoperability MatrixでRecommended Hypervisor Version 確認するのが望ましいです。
CE 2.0にはデフォルトでAOS 6.5.2/AHV 20220304.342がバンドルされており、本稿執筆時点ではLCMにはより新しいAHVが表示されていません(AOS 6.5.2.5は表示されますが、Recommended Hypervisor VersionはAHV 20220304.342のままのため本件には関係なし)。しかし、将来的にOne click download enabledかつより新しいバージョンのAHVに対応するAOSが登場した場合には、AHVもアップグレード可能となるはずです。
本稿執筆時点でサポートポータルには、AOS 6.5.2からアップデート可能、かつより新しいバージョンのAHVに対応しているのはAOS 6.5.2.6(Recommended Hypervisor VersionはAHV 20220304.385)が存在しますが、こちらはOne click download enabledではないため、AOSと AHVのLCM Bundle(更新用パッケージ)を手動でダウンロードし、手動でLCMにアップロードしない限りは表示されません。
今回は、あえて手動で、サポートポータルからAOS 6.5.2.6とAHV 20220304.385をダウンロードし、CE 2.0初期状態のクラスタに適用し、何が起きるかを確認しました。
問題が発生した環境
- HW: Lenovo ThinkCentre M75q Tiny Gen2
- Hypervisor Boot Drive: USB Flash Drive
- CVM Boot Drive: M.2 NVMe SSD
- Data Drive:: SATA SSD(AHCI)
発生した問題
AHVのソフトウェア更新は、大まかにまとめると以下の順序で処理が行われます。
- 新バージョンのAHVソフトウェアパッケージが展開される
- 再起動
- AHVが新バージョンとなった状態で起動し、更新完了
今回、この流れの2番から3番にかけて問題が発生しました。具体的には、2の再起動後、3でAHVが新バージョンとなった状態で起動してくるはずのところで途中で止まってしまいました。画面には、ブートシーケンスがしばらくの間
[ OK ] Reached target Basic System.
と表示された状態で止まります。
その後、
[ <数字> ]dracut-initqueue[682]: Warning: dracut-initqueue timeout - starting timeout scripts
という表示が連続で大量に出力され、最終的にはDracut Emegency Shell(darcut:/# というプロンプト)が表示された状態で止まってしまいました。
問題の原因
Dracut Emegency Shellが起動される際に表示された
Warning :/dev/disk/by-uuid/<UUID> does not exist
というメッセージが重要なヒントで、このメッセージから分かるとおり、このディスクにアクセスできなかったことでAHVの起動に必要なデータが読み出せていない状況です。
lsコマンドで/devディレクトリの中身を確認すると、 再起動前には/dev/sdX(Xは実際にはaやbなど)として認識されていたディスクのデバイスファイルが存在しませんでした。しかも、Hypervisor Boot Drive(USB Flash Drive)だけでなく、Data Drive(SATA SSD(AHCI))のデバイスファイルも存在していません。
このことから、疑われる問題は「ディスクへのアクセスに必要なカーネルモジュール(デバイスドライバ)がロードされていない」という状態であると推測できます。そして、ここで思い出して頂きたいポイントが、CE 2.0では「AHVが商用版と共通化された」ことです。
商用版のNutanix HCI(Nutanix NX、各社OEM、3rd partyの認定機種)には、USB Flash DriveやAHCIによるSATA接続のディスクを使用するモデルはありません。そのため商用版AHVでは、USB Flash Driveへのアクセスに必要なusb_storageモジュールや、AHCIモジュールが無効化されています。
CE 2.0のAHVでは、商用版と共通化されたビルドを使っているものの、CE専用インストーラーでインストールする際に一部設定を書き換えることで、USB Flash DiskやAHCIを利用可能にし、自宅ラボのハードウェアでも利用しやすいようにしています。その設定がアップデートのタイミングで書き換わってしまったことがこの事象の原因でした。
解決方法
AHVの起動に必要なカーネルモジュールを手動でロードする
まずDracut Emergency Shellから、どうにかしてAHVを起動する必要があります。
AHVの起動にはHypervisor Boot Driveへのアクセスが必要ですので、そのために必要となるカーネルモジュールを手動でロードします。
a. USBメモリを使用している場合
dracut:/# insmod /lib/modules/5.10.139-2.el7.nutanix.20220304.385.x86_64/kernel/drivers/usb/storage/usb-storage.ko
※後述の設定による影響で modprobe usb_storage コマンドではロードされません。
b. SATA接続(AHCI)のドライブを使用している場合
dracut:/# modprobe ahci
ロードに成功し、ドライブの認識が可能になると、 ドライブのデバイスファイル(/dev/sdX)が自動的に出現します。dmesg コマンドの末尾にも、デバイスが認識されたことを表すメッセージが表示されます。
Dracut Emergency Shellから抜けてAHVの起動を開始するには exit コマンドを実行します。
dracut:/# exit
CEには不要な設定を無効化する
アップデートの際に上書きされてしまったCE用の設定を復元しましょう。
復元とはいっても、不要な部分をコメントアウトするだけです(CE 2.0インストール直後には存在しないファイルのため、ファイル自体をまるっと削除してもいいと思いますが念のため残しています)。
対象は以下の2つのファイルのみです。
① /etc/modprobe.d/pci-passthru-nx2k.conf の設定をコメントアウト
# Intel SATA AHCI (NX-2000)
#blacklist ahci
#blacklist lpc_ich
#blacklist i2c_i801
# Allow AHCI controller of the multifunction device to be passed through.
#options vfio_iommu_type1 allow_unsafe_interrupts=1
② /etc/modprobe.d/stig-reqs-usbstorage.conf の設定をコメントアウト
#install usb-storage /bin/true
#blacklist usb-storage
修正を反映したinitramfsを作成する
念のため、元のinitramfsファイルをバックアップします。
# cd /boot
# cp initramfs-5.10.139-2.el7.nutanix.20220304.385.x86_64.img initramfs-5.10.139-2.el7.nutanix.20220304.385.x86_64.img.bak
modprobe.d 配下の変更を反映したinitramfsを作成します(元のファイルに上書きされます)。
# dracut -f
再起動
AHVを再起動します。
ここでは省略しますが、安全のためにはCVM側でcluster stopおよびCVMのシャットダウンを先にしておきましょう。
# reboot
これで再起動後、AHVが正しく起動し、CVMも自動的に起動されるはずです。
クラスタのサービスを開始したら、PrismからLCMにアクセスし、バージョンアップが完了したことを確認しましょう。
以上です。