UEFIネイティブな NutanixComunityEdition
このブログはNutanix Advent Calender 2019 (4枚目) 23日目 として作成しました。
はじまり
新しいサーバー(富士通PrimergyTX1320M4)を購入したので
NutanixCEでクラスタ組んで遊んでみようと ウキウキで準備進めるが、どうにも上手くいかない。
過去NVMeのSSD(※非サポート) を組み込んで、インストール時の構成チェックでエラーが出て失敗したため
Nutanix CEのGETTING STARTEDは確認したが、問題点は思いつかない。
そもそも、インストールで失敗する以前の問題で
Nutanixのインストーラーが全く見えない。嫌な予感がしてきた。
問題点
調べてみると、いけてない状況が分かった。
- NutanixCEのイメージファイルは、どうやらMBR形式のみ提供されているらしい。(GPT形式はない)
BIOS | UEFI |
---|---|
古い | 新しい |
MBR形式が使用可能 | GPT形式が使用可能 |
PRIMERGY RX1330 M4 / TX1320 M4 / TX1330 M4 ご使用上の留意・注意事項
あれ、、、これ詰みでは?
解決策
何とかする方法が きっとあるはず…
…ありました!
GitHub - abbbi/nutanix_uefi: how to make nutanix community installation image bootable from uefi
CentOSのメディアからEFIのファイルをまるっと移植する、外科手術的な解決方法。
昔LPICの勉強をしたときにちらっと見かけた程度のコマンドが並んでいる。
よくわからないけど 何とかなりそう。
この記事でやること
実際にやってみて、日本語の情報を作る。
ついでに最新のNutanixCEへ対応する。*2
実際にやってみた結果
<準備物>
作業環境は適当なCentOS7、上記isoから作成したサーバーで実施した。(minimalインストール)
NutanixのAHVがCentOSの7系のようなので、使用するISOもCentOS 7系のものが良いと思われる。
1. NutanixCEのイメージファイルを40MBほど拡張する。
# fallocate -o 7444889600 -l 40m ce-2019.11.22-stable.img
-o でオフセットを指定して、NutanixCEのイメージのおしりに40MBの領域を拡張する。
念のためcfdiskでディスクサイズを確認したが、以前のバージョンとサイズは同様の7444889600だった。
cfdisk (util-linux 2.23.2)
Disk Drive: ./ce-2019.11.22-stable.img
★Size: 7444889600 bytes, 7444 MB
2. 拡張した領域に新規パーティションを作成する。
# cfdisk ./ce-2019.11.22-stable.img
fallocateで拡張した40MBの領域を選択して、
[ New ] ⇒ [ Write ] ⇒ [ Quit ] で新規パーティション作成。
3. ディスクとしてマウントできるようにループバックデバイスを作成する。
# kpartx -av ./ce-2019.11.22-stable.img
add map loop0p1 (253:2): 0 14538752 linear /dev/loop0 2048
add map loop0p2 (253:3): 0 81920 linear /dev/loop0 14540800
kpartxはディスクイメージのパーティション情報を読み取って、
何がうれしいかというと、/dev/mapper/loop0p1、loop0p2といったデバイスとして扱えるようになるので
この後の手順でマウントする作業が簡単になる。
4. 拡張したパーティションをvfatでフォーマットする。
# mkfs.vfat /dev/mapper/loop0p2
*5
フォーマットを行うのは今回拡張したloop0p2。
5. ここまで準備したNutanixCEのイメージと、CentOSのISOをマウントする。
# mkdir /tmp/nutanix_vfat
# mkdir /tmp/nutanix_root
# mkdir /tmp/centos
# mount /dev/mapper/loop0p1 /tmp/nutanix_root
# mount /dev/mapper/loop0p2 /tmp/nutanix_vfat
# mount -o loop CentOS-7-x86_64-DVD-1908.iso /tmp/centos
適当にマウント用のディレクトリを作成して、マウントします。
6. CentOSのメディアから、NutanixCEのイメージに EFIを移植
# cp -r /tmp/centos/EFI /tmp/nutanix_vfat/
⇒移植先はNutanixCEに拡張した40MBのパーティションです。
7. grub.cfgをNutanix用に書き換える。
# vi /nutanix_vfat/EFI/BOOT/grub.cfg
単に移植しただけでは、CentOSを起動する設定のため
NutanixCEの構成に合わせてConfigファイルを書き換える。
元あったファイルの中の中段のmenuentry 以下はCentOS用なのですべて削除する。
参考情報をもとに以下のように書き換える。
set default="0"
function load_video {
insmod efi_gop
insmod video_bochs
insmod video_cirrus
insmod all_video
}
set timeout=60
menuentry 'Nutanix Community Edition AHV (4.4.77-1.el7.nutanix.20191030.415.x86_64) 7 (Core)' --class nutanix --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-4.4.77-1.el7.nutanix.20191030.415.x86_64-advanced-6e28729c-5954-44c8-87a9-70efa532e7d2' {
load_video
set gfxpayload=keep
insmod gzio
insmod part_msdos
insmod ext2
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root 6e28729c-5954-44c8-87a9-70efa532e7d2
else
search --no-floppy --fs-uuid --set=root 6e28729c-5954-44c8-87a9-70efa532e7d2
fi
linuxefi /boot/vmlinuz-4.4.77-1.el7.nutanix.20191030.415.x86_64 root=UUID=6e28729c-5954-44c8-87a9-70efa532e7d2 ro crashkernel=128M rhgb quiet hugepages=0 intel_iommu=on,igfx_off iommu=pt elevator=noop vga=791 vfio_iommu_type1.allow_unsafe_interrupts=1
initrdefi /boot/initramfs-4.4.77-1.el7.nutanix.20191030.415.x86_64.img
}
NutanixCEが参考情報より新しいバージョンなので、一部情報は実機を見て書き換えた。
- ディスクのUUIDを更新
# blkid
/dev/mapper/loop0p1: UUID="6e28729c-5954-44c8-87a9-70efa532e7d2" TYPE="ext4" ★UUIDの値を更新
/dev/mapper/loop0p2: SEC_TYPE="msdos" UUID="5947-925F" TYPE="vfat"
- 初期RAMイメージのファイル名を更新
# /tmp/nutanix_root/boot
# ls
initramfs-4.4.77-1.el7.nutanix.20191030.415.x86_64.img ★初期RAMイメージのファイル名を更新
vmlinuz-4.4.77-1.el7.nutanix.20191030.415.x86_64
- set defaultの値を更新
NutanixCEのバージョンによる変更点ではないが、
menuentryは0から数えるのでset default=1で指定されているものがない。
このままでは、サーバーの電源ON時に自動的に起動せずにメニュー選択画面で止まってしまう。
今回書き換えて追加している0番目のmenuentryの項目を指定しておくのが良さそう。