Trouble Shooting Record (Xen 関連)


1. Xen Domain 0 でシリアルコンソールが使えない [解決]

環境

Red Hat Enterprise Linux ES 4 Update 2 (Kernel 2.6.9-42.0.2.ELsmp)
Xen 3.0.2 (2.6.16-xen3_86.1_rhel4.1) - RPM パッケージ版

現象

Xen をインストールし、次のような grub エントリを追加してブートすると、 ブート自体は問題ないが、シリアルコンソールが使えなくなる。
title Red Hat Enterprise Linux ES (Xen 3.0.2)(Serial)
        root (hd0,0)
        kernel /xen-3.gz
        module /vmlinuz-2.6.16-xen3_86.1_rhel4.1 ro root=/dev/vg/root console=ttyS0,9600 console=ttyS0
        module /initrd-2.6.16-xen3_86.1_rhel4.1.img

解決方法

ちゃんと Installation Note (HTML) に書いてあった (微妙に変更しているが) 。
次のように変更すれば OK 。
title Red Hat Enterprise Linux ES (Xen 3.0.2)(Serial)
        root (hd0,0)
        kernel /xen-3.gz com1=9600
        module /vmlinuz-2.6.16-xen3_86.1_rhel4.1 ro root=/dev/vg/root console=tty1 console=ttyS0,9600
        module /initrd-2.6.16-xen3_86.1_rhel4.1.img
[ 先頭 | 末尾 | 戻る | トップページに戻る ]

2. 仮想マシン起動時に "Error: int argument required" [解決]

環境

Red Hat Enterprise Linux ES 4 Update 2 (Kernel 2.6.9-42.0.2.ELsmp)
Xen 3.0.2 (2.6.16-xen3_86.1_rhel4.1) - RPM パッケージ版

現象

Xen 仮想マシンを起動すると "Error: int argument required" というエラーが 表示され仮想マシンを起動できない。
# xm create -c ./xen-vm.conf
Using config file "./xen-vm.conf".
Error: int argument required

この時、用いた xen-vm.conf の内容は次の通り。
kernel  = "/boot/vmlinuz-2.6-xen"
ramdisk = "/boot/initrd-2.6-xen.img"
memory  = 128
name    = "xen-test"
vif     = [ '' ]
disk    = [ 'phy:vg/xen, hda1, w' ]
root    = "/dev/hda1 ro"

解決方法

xen-vm.conf の disk エントリのパラメータ区切りに余分な空白があるのが原因。 次のように修正すれば OK.
# どこが int argument やねん、ですが...。
disk    = [ 'phy:vg/xen,hda1,w' ]
[ 先頭 | 末尾 | 戻る | トップページに戻る ]

3. 仮想マシン起動時に "Volume group "VolGroup00" not found" [解決]

環境

Red Hat Enterprise Linux ES 4 Update 2 (Kernel 2.6.9-42.0.2.ELsmp)
Xen 3.0.2 (2.6.16-xen3_86.1_rhel4.1) - RPM パッケージ版

現象

XenSource の RHEL 4.1 用パッケージをインストールし、仮想マシン (Domain U) を起動すると、ブートログに次のようなログが表示される。 logical volume? Domain 0 側は LVM 環境であり VolGroup00 という VG が設定されているが、 仮想マシン側では LVM なんか設定していないし、Domain 0 側のが見えるはず もないんだが...。
Loading scsi_mod.ko module
scsi_mod: no version for "struct_module" found: kernel tainted.
SCSI subsystem initialized
(snip)
Scanning logical volumes
  Reading all physical volumes.  This may take a while...
  No volume groups found
Activating logical volumes
  Volume group "VolGroup00" not found
ERROR: /bin/lvm exited abnormally! (pid 701)
(snip)
INIT: Entering runlevel: 3
Entering non-interactive startup
Applying Intel Microcode update: FATAL: Module microcode not found.

仮想マシン側で vgscan してみるが、やはり VG は認識されない。
# vgscan
  Reading all physical volumes.  This may take a while...
  No volume groups found

仮想マシン側で /etc/lvm を __lvm にリネームしても同じ。
その他、仮想マシン側で次のようなコマンドを実行してみるが、現象変わらず。
# vgscan --mknodes
  Reading all physical volumes.  This may take a while...
  No volume groups found
  No volume groups found

# dmsetup mknodes
# dmsetup remove_all

解決方法

どこでやっているのか、ようやく分かった。(^^;
Xen の RPM パッケージインストール時に /boot/initrd-2.6.16-xen3_86.1_rhel4.1.img が生成され、 Domain0 の起動時に、この initrd を用いるのはいいとして、 仮想マシンの起動時にも、この initrd を用いていたのが原因。

RPM パッケージインストール時に生成された initrd は当然の如く、その時の Domain0 というか、Xen インストール前の OS 環境をベースに作成されている ため、その環境が LVM ならば、それが反映された initrd になっているのは当り前。
initrd の中身を覗いてみると...。
# mkdir tmp
# cd tmp
# gzip -dc /boot/initrd-2.6.16-xen3_86.1_rhel4.1.img | cpio -id
5984 blocks
# ls -aF
./  ../  bin/  dev/  etc/  init*  lib/  loopfs/  proc/  sbin@  sys/  sysroot/
# cat init
#!/bin/nash

mount -t proc /proc /proc
setquiet
echo Mounted /proc filesystem
echo Mounting sysfs
(snip)
echo Making device-mapper control node
mkdmnod
echo Scanning logical volumes                        <--- この辺
lvm vgscan --ignorelockingfailure                    <--- この辺
echo Activating logical volumes                      <--- この辺
lvm vgchange -ay --ignorelockingfailure VolGroup00   <--- この辺
echo Creating root device
mkrootdev /dev/root

という訳で、仮想マシン環境で initrd を作成し直し、仮想マシンの起動時には、 その仮想マシン用 initrd を用いて起動すれば OK.

仮想マシン用 initrd を再作成する具体的な手順は次の通り。
後は、ここで作った initrd を Domain 0 側にコピーすればよい。
(仮想マシン環境で...)
# cd /lib/modules
# ls -F
2.6.16-xen3_86.1_rhel4.1/  2.6.9-42.0.2.EL/  2.6.9-42.0.2.ELsmp/
# depmod 2.6.16-xen3_86.1_rhel4.1
# mkinitrd ./initrd-2.6.16-xen3_86.1_rhel4.1-domainU.img 2.6.16-xen3_86.1_rhel4.1
[ 先頭 | 末尾 | 戻る | トップページに戻る ]

4. RHEL 4.5 の 2.6.9-55.0.2.ELxenU カーネルで起動すると、 XenSource の 2.6.18-xen_3.1.0 カーネルで正常にブートしなくなる [解決]

環境

Red Hat Enterprise Linux ES 4 Update 5
Xen 3.1.0 (2.6.18-xen_3.1.0) - Xen Source RPM パッケージ版

現象

RHEL 4.5 に XenSource の RPM パッケージを用いて Domain 0 を構築。
同じく RHEL 4.5 を用いて Domain U を構築。 上記のような環境で同じ OS イメージ (Domain U) を用いて、
次の順序で Domain U を起動すると、何故か 3) で正常にブートしない。

  • 1) 2.6.18-xen_3.1.0 カーネルを用いる。
  • 2) 2.6.9-55.0.2.ELxenU カーネルを用いる。
  • 3) 2.6.18-xen_3.1.0 カーネルを用いる。

具体的には次の箇所で止まってしまい、正常に (Domain U の) login プロンプトが表示されない。
$ sudo xm create -c /etc/xen/vm.conf
(snip)
Starting anacron: [  OK  ]
Starting atd: [  OK  ]
Starting system message bus: [  OK  ]
Starting HAL daemon: [  OK  ]

INIT: Id "co" respawning too fast: disabled for 5 minutes
INIT: no more processes left in this runlevel

解決方法

実は、というか、2.6.9-55.0.2.ELxenU カーネルでブートすると、 kudzu が XenConsole というキーボードデバイスを認識し、 Configure を選択すると次の変更を求めてくるので、すべてに [Yes] と回答する。

  • /etc/inittab
  • /etc/securetty

この時の /etc/sysconfig/hwconf の変更内容は次の通り。
-                      <--- 追加
class: KEYBOARD        <--- 追加
bus: KEYBOARD          <--- 追加
detached: 0            <--- 追加
device: xvc0           <--- 追加
driver: ignore         <--- 追加
desc: "Xen Console"    <--- 追加

/etc/inittab の変更内容は次の通り。
# Run gettys in standard runlevels
co:2345:respawn:/sbin/agetty xvc0 9600 vt100-nav   <--- 追加
#1:2345:respawn:/sbin/mingetty tty1                <--- コメントアウト
#2:2345:respawn:/sbin/mingetty tty2                <--- コメントアウト
#3:2345:respawn:/sbin/mingetty tty3                <--- コメントアウト
#4:2345:respawn:/sbin/mingetty tty4                <--- コメントアウト
#5:2345:respawn:/sbin/mingetty tty5                <--- コメントアウト
#6:2345:respawn:/sbin/mingetty tty6                <--- コメントアウト

/etc/securetty の変更内容は次の通り。
xvc0           <--- 追加

結論から言うと、/etc/inittab に加えられた変更が原因。
変更を元に戻せば 2.6.18-xen_3.1.0 カーネルでも起動するようになる。
[ 先頭 | 末尾 | 戻る | トップページに戻る ]