今回は、Image Service で ESXi から Nutanix CE / AHV に移行した Oracle Linux 7 (OL7)のブート トラブルの対処をしてみます。
AHV では、vDisk として VirtIO デバイスを利用します。そのため、VM 移行では、移行元でゲスト OS に virtio デバイスのドライバをインストールしておく必要があります。
AHV でサポートされている Linux OS では Linux カーネルに VirtIO ドライバが含まれているので、あらためてドライバをインストールをする必要はありません。しかし RHEL7 / CentOS7 などでは OS ブートのなかで読み込まれる initramfs ファイルに VirtIO ドライバが含まれないため、下記のようにブートに失敗して「dracut:/#」プロンプトになってしまいます。
そこで、AHV でこの状態になった OL7 を起動できるようにしてみます。
これは、下記のような状態になっているようです。
- GRUB2 によるブート メニュー選択 ~ initramfs の読み込みはできた。
- initramfs に virtio ドライバが含まれず、ディスクにアクセスできないのでファイルシステムのマウントができない。
- Linux カーネル(今回は Oracle の UEK)には virtio ドライバが含まれるが、そこまでいけず。
移行元の VM
この VM の、移行前(ESXi で稼働していたとき)の状態を確認しておきます。
移行 VM のゲスト OS は、OL 7.6 です。
# cat /etc/oracle-release Oracle Linux Server release 7.6
本来であれば下記の KB にあるように、移行元 ESXi でゲスト OS が稼働しているうちに dracut / mkinitrd コマンドなどで initramfs ファイルを再作成しておくと、Prism の Image Service で AHV に移動した後も OS が起動できるようになります。
https://portal.nutanix.com/kb/2627
今回は、あえて initramfs の再作成をしないで、ただ AHV 環境に VMDK を移行してみました。ESXi 側での VMDK ファイルの取得には、vSphere Client での OVF エクスポートなどを利用します。そして、取得した VMDK ファイルを Prism の Image Service で「DISK」イメージとして登録しておきます。
Image Service で登録した VMDK の VM への追加
Image Service に登録した DISK イメージは、scsi ディスクとして VM に追加します。
initramfs ファイルの再作成
OL7 インストーラ IOS でブートして、レスキューモードで initramfs ファイルを再作成します。
VM への ISO マウント
OL7 インストーラの ISO ファイルをマウントして、
VM を再起動(またはリセット)します。
OL7 レスキューモードで起動
インストーラが起動するので「Troubleshooting」を選択します。
「Rescue a Oracle Linux system」を選択します。
「Continue」を選択するため「1」を入力して Enter キーを押すと、レスキューモードでシェルが起動します。
initramfs ファイルの再作成
vDisk がもつ OS イメージは /mnt/sysimage にマウントされるため、まず chroot でそのディレクトリを「/」に切り替えます。
# chroot /mnt/sysimage
OL7 のレスキューモードは、UEK ではなく Red Hat 互換カーネル(RHCK。initrd で起動するカーネルとは異なるもの)で起動されます。OL7.6 デフォルトでは、UEK カーネル バージョンは 4.14.35-1818 ~ ですが、RHCK は 3.10.0-957 ~ です。そのため、dracut では「--kver」オプションでカーネルバージョンを指定します。バージョンとして指定する文字列は /lib/modules ディレクトリ配下のディレクトリ名が参考になります。
dracut で initramfs ファイルを再作成します。
# dracut --kver 4.14.35-1818.3.3.el7uek.x86_64 --force
VM の再起動
Prism で VM から ISO イメージを取り出したうえで、VM を再起動(またはリセット)します。
これで、OL7 のゲスト OS が UEK で起動できるようになるはずです。ちなみに、この VM パワーオンのプロセスでは、いちどゲスト OS が自動再起動されます。
initramfs ファイルの比較
今回の OL7 は、UEK で起動しています。
# uname -r 4.14.35-1818.3.3.el7uek.x86_64
lsinitrd コマンドで、initramfs の内容を確認してみます。
ESXi での OL 7.6 の initramfs です。これは移行作業の前に確認したものです。
準仮想化 SCSI アダプタのディスクから起動できるように vmw_pvscsi.ko.xz が含まれています。一方で、virtio は含まれていません。
# lsinitrd | grep -e ^Image -e virtio_ -e vmw_ Image: /boot/initramfs-4.14.35-1818.3.3.el7uek.x86_64.img: 22M -rw-r--r-- 1 root root 11660 Sep 25 2018 usr/lib/modules/4.14.35-1818.3.3.el7uek.x86_64/kernel/drivers/scsi/vmw_pvscsi.ko.xz
今回、AHV で再作成した initramfs です。
virtio_scsi.ko.xz や virtio_pci.ko.xz が含まれ、VirtIO デバイスからでもブートができるようになっています。一方で、vmw_pvscsi.ko.xz などは含まれなくなりました。
# lsinitrd | grep -e ^Image -e virtio_ -e vmw_ Image: /boot/initramfs-4.14.35-1818.3.3.el7uek.x86_64.img: 21M -rw-r--r-- 1 root root 8208 Sep 25 2018 usr/lib/modules/4.14.35-1818.3.3.el7uek.x86_64/kernel/drivers/block/virtio_blk.ko.xz -rw-r--r-- 1 root root 14108 Sep 25 2018 usr/lib/modules/4.14.35-1818.3.3.el7uek.x86_64/kernel/drivers/char/virtio_console.ko.xz -rw-r--r-- 1 root root 7948 Sep 25 2018 usr/lib/modules/4.14.35-1818.3.3.el7uek.x86_64/kernel/drivers/scsi/virtio_scsi.ko.xz -rw-r--r-- 1 root root 10316 Sep 25 2018 usr/lib/modules/4.14.35-1818.3.3.el7uek.x86_64/kernel/drivers/virtio/virtio_pci.ko.xz -rw-r--r-- 1 root root 8756 Sep 25 2018 usr/lib/modules/4.14.35-1818.3.3.el7uek.x86_64/kernel/drivers/virtio/virtio_ring.ko.xz
以上。