CentOS 5 (Xen)でdomUのVG名をdom0から変更する

virt-installCentOS 5をテキストモードでインストールすると、LVMのVG名がVolGroup00に固定されてしまいます。VGが同じだと後で悲しい状況になることが多いので、インストール後に変更しておいた方が無難です。変更する方法はいくつかあると思うのですが、今回は全てをdom0側から実施する方法を調べてみました。

最初にdomUがインストールされているパーティションを kpartx で認識させ、vgrenameでVG名を変更します。

# kpartx -a /dev/VG_xen00_00/vm00
# vgrename VolGroup00 new_VG_name

VG名の変更自体はこれで完了です。ただこのままでは、VolGroup00を参照している部分があるためdomUを起動することができません。そこでdomUの領域をdom0側でマウントしてVolGroup00を参照している部分を書き変えます。

# vgchange -ay new_VG_name
# mount /dev/mapper/VG_xen00_00-root /mnt
# mount /dev/mapper/vm00p1 /mnt/boot

設定ファイルでVolGroup00となっている部分を new_VG_name に書き変えます。私の手元の環境では下記の3か所を書きかえれば大丈夫でした。

# sed -i 's/VolGroup00/new_VG_name/' /mnt/boot/grub/grub.conf
# sed -i 's/VolGroup00/new_VG_name/' /mnt/etc/fstab
# sed -i 's/VolGroup00/new_VG_name/' /mnt/etc/mtab

もう一か所、initrdの内部でもVolGroup00を参照している部分がありますのでそれを変更します。一度initrdの中身を展開し、initファイルの修正を行ってから固めます。

# mkdir /var/tmp/initrd
# cd /var/tmp/initrd
# zcat /mnt/boot/initrd-2.6.18-92.1.22.el5xen.img | cpio -i -c
# sed -i 's/VolGroup00/new_VG_name/' init
# find . | cpio --quiet -c -o | gzip -c > /mnt/boot/initrd-2.6.18-92.1.22.el5xen.img
# cd ..
# rm -rf initrd

後片付けをして終了です。

# umount /mnt/boot
# umount /mnt
# vgchange -an new_VG_name

本来はこれだけで動くはずなのですが、残念ながらこのままでは変更が反映されずdomUが起動しません。原因は良く分かっていないのですが、どうやらXenが起動時に使っているpygrubが古い情報を見てしまっているようです。

マシン自体を再起動すれば変更後の情報が反映されるのですが、せっかくの仮想マシンでその方法はちょっと悲しいものがあります。そこで色々と検索してみたところ、同じ症状の人を見つけることが出来ました(http://cormander.com/blog/2008/09/weird-pygrub-fs-cache-issue/)。

ここに書かれていたように、下記のようなコマンドを実行するとキャッシュが破棄されて変更後の情報がpygrubからも参照できるようです。

# sync && echo 1 > /proc/sys/vm/drop_caches

これでマシンを再起動することなく、domUのVG名変更が可能になります。