CentOS7.4がXenのPVモードで起動失敗する問題への対処
でCentOS7の64bit(x86_64,あるいはamd64)版がXenのPV(準仮想化)のDomUとして起動できないと書いたのですが、その後色々調べた結果、起動に成功しました。
関連情報を整理すると以下の通り。
- CentOS及びRedhat7.4のKernelにはPV modeで動作しない制約がある
Reference 1)https://docs.oracle.com/cd/E50245_01/E63729/html/vmrns-bugs-vm-ol7-rhel7-pv.html
- この制約に対するパッチは作成されており、CentOSの場合centosplusのリポジトリから入手できる
Reference 2)https://bugs.centos.org/view.php?id=14347
Reference 3)https://kevandrews.uk/centos-7-xen-pv-guests-failing-boot-kernel-3100-693171el7
- CentOS7.2.1511のKernelであればPVモードで起動できる
Reference 4)https://www.systutorials.com/239895/install-paravirtualized-centos-7-domu-xen/
これらの情報を見て、以下の手順でCentOS7.4のPVモード用イメージを作成しました。
- CentOS7.2.1511のKernel,ramdiskイメージ及びMinimalISOを使って、XenのPVモードでCentOS7.2をインストール
Reference 4)を参考に作業しましたが、Reference 4)では# wget http://vault.centos.org/7.2.1511/os/x86_64/images/pxeboot/vmlinuz # wget http://vault.centos.org/7.2.1511/os/x86_64/images/pxeboot/initrd.img
で7.2.1511のkernel,ramdiskイメージを取得し、ネットワークインストールを指定するのですが、自分の環境ではネットワークインストーラが立ち上がらず、
http://archive.kernel.org/centos-vault/7.2.1511/isos/x86_64/
からMinimalインストール用のISOイメージを取得してインストールしました。xl.cfgは以下の様な感じです。name = "centos7-x86_64" kernel = "/home/foo/xen-work/centos7-x86_64/vmlinuz" ramdisk = "/home/foo/xen-work/centos7-x86_64/initrd.img" memory = 512 vcpu = 1 disk = [ 'file:/home/foo/xen-work/centos7-x86_64.img,xvda,w','file:/home/foo/xen-work/CentOS-7-x86_64-Minimal-1511.iso,xvdb:cdrom,r' ] vif = [ 'mac=00:16:3e:xx:xx:xx,bridge=xenbr0'] extra="inst.repo=cdrom:xvdb"
注)MACアドレスのxx:xx:xxの部分は適当な値を入れてください。
00:00:01とか。OUIの00:16:3eがXen用らしいので、複数DomUを立ち上げる時に下位3オクテットが重複しなければなんでも良いです。
- インストールが終わったら、xl.cfgを書き換えて再起動
ここで自分の場合、インストール済みのイメージをqemu-imgを使ってqcow2フォーマットにしています。
そして前回の記事(http://d.hatena.ne.jp/RC30-popo/20180322/1521723727)で紹介したとおり、Xen用のgrub2イメージを作成しています。これを使う前提でxl.cfgを書き換えます。name = "centos7-x86_64" # grub-mkimage作成したboot loaderイメージをkernelとして指定 kernel = "/home/foo/xen-work/grub-x86_64-xen-centos7.bin" # 最小構成だとメモリ256MBで起動します。潤沢にメモリある方は # インストール時と同じで可 memory = 256 vcpu = 1 # qcow2フォーマットに変換したイメージファイルをdisk(/dev/xvda)として指定 disk = ['tap:qcow2:/home/toy/xen-work/centos7-x86_64.qcow2,xvda,w'] vif = [ 'mac=00:16:3e:xx:xx:xx,bridge=xenbr0']
ちなみにReference 4)にある通り、bootloaderとしてpygrubを指定し、RAWイメージのまま起動でも7.2.1511をインストールした場合は問題なく起動しました。RAWイメージで起動する場合は、下記の様なcfgになります。
name = "centos7-x86_64" memory = 256 vcpu = 1 disk = [ 'file:/home/foo/xen-work/centos7-x86_64.img,xvda,w'] vif = [ 'mac=00:16:3e:xx:xx:xx,bridge=xenbr0'] bootloader = "/usr/lib/xen-4.6/bin/pygrub"
起動は通常どおり。
sudo xl create -c <cfgファイル名>
- CentOSを最新版にupdate
DomUとして起動したCentOS内で# sudo yum check-update # sudo yum update
これでKernelが最新版上がるはずですが、ここではrebootしてはいけません。
rebootすると起動しなくなります。
(ただしgrubのメニュー画面で7.2.1511のkernelを選択すれば起動はできます。)
- centosplusの修正版Kernelを適用
rebootせずにReference 3)を参照して修正版Kernelの適用と、yumのupdate対象からKernelを除外する措置を取ります。
終わったらRebootします。今度はgrub画面のデフォルトKernelで起動するはずです。
CentOS7.4としていつ正式版のKernelでPVモードが使える様になるか分かりませんが、
とりあえずこれでCentOS7.4をXen+PVで使える様になります。
追記:上記の対処後にyum updateかけるとkernelがupdateされてしまいました。
/etc/yum.confに
exclude=kernel*
を追加した方が良さそうです。
下記ページにもCentOS7.4がPVモードで起動しない問題に対する対処方法について情報が有ります。
(基本的にcentosplusを使うという同じ話)
Reference 5)https://prgmr.com/blog/2017/09/14/centos-7-pv-unsupported.html