NTNX>日記

個人的な趣味による Nutanix Community Edition 日記。Japanese のみですみません。

AHV の Image Service 登録で Linux DISK イメージが起動できない場合の対処例。

今回は、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 を起動できるようにしてみます。

f:id:gowatana:20190724082248p:plain

これは、下記のような状態になっているようです。

  • 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 に追加します。

f:id:gowatana:20190724085527p:plain

initramfs ファイルの再作成

OL7 インストーラ IOS でブートして、レスキューモードで initramfs ファイルを再作成します。

VM への ISO マウント

OL7 インストーラの ISO ファイルをマウントして、

f:id:gowatana:20190724083735p:plain

VM を再起動(またはリセット)します。

f:id:gowatana:20190724083805p:plain

OL7 レスキューモードで起動

インストーラが起動するので「Troubleshooting」を選択します。

f:id:gowatana:20190724083943p:plain

「Rescue a Oracle Linux system」を選択します。

f:id:gowatana:20190724084051p:plain

「Continue」を選択するため「1」を入力して Enter キーを押すと、レスキューモードでシェルが起動します。

f:id:gowatana:20190724084201p:plain

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 ディレクトリ配下のディレクトリ名が参考になります。

f:id:gowatana:20190724085155p:plain

dracut で initramfs ファイルを再作成します。

# dracut --kver 4.14.35-1818.3.3.el7uek.x86_64 --force

VM の再起動

Prism で VM から ISO イメージを取り出したうえで、VM を再起動(またはリセット)します。

f:id:gowatana:20190724085717p:plain

これで、OL7 のゲスト OS が UEK で起動できるようになるはずです。ちなみに、この VM パワーオンのプロセスでは、いちどゲスト OS が自動再起動されます。

f:id:gowatana:20190724213658p:plain

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

以上。

©2019 gowatana
クリエイティブ・コモンズ・ライセンスこの 作品 は クリエイティブ・コモンズ 表示 4.0 国際 ライセンスの下に提供されています。