ローリングコンバットピッチなう!

AIとか仮想化とかペーパークラフトとか

CentOS7.4がXenのPVモードで起動失敗する問題への対処

rc30-popo.hatenablog.com

でCentOS7の64bit(x86_64,あるいはamd64)版がXenのPV(準仮想化)のDomUとして起動できないと書いたのですが、その後色々調べた結果、起動に成功しました。

関連情報を整理すると以下の通り。

これらの情報を見て、以下の手順でCentOS7.4のPVモード用イメージを作成しました。

  1. 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オクテットが重複しなければなんでも良いです。

  2. インストールが終わったら、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ファイル名>

  3. CentOS最新版にupdate

    DomUとして起動したCentOS内で

    # sudo yum check-update
    # sudo yum update

    これでKernelが最新版上がるはずですが、ここではrebootしてはいけません
    rebootすると起動しなくなります。
    (ただしgrubのメニュー画面で7.2.1511のkernelを選択すれば起動はできます。)

  4. 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