泣く泣く XenServer をダウングレード

先日、XenServer を 5.0 から 5.5 にアップグレードしたが、何故か再起動を繰り返すという意味不明な動作をするようになってしまった。
この XenServer 上にバックアップをとっていないゲスト OS を動かしていたので、急いでまともに動くようにしなくてはならない。
そのため、仕方ないが XenServer をダウングレードすることにした。

XenServer をアップグレードするときに、それまで動作していた XenServer のシステムや管理情報 (メタデータ) はきちんとバックアップされる。
このため、アップグレードに失敗したとしても、アップグレード前の状態に簡単に戻すことができる。
XenServer のインストール CD から起動して、バックアップのメニューを選ぶだけで良い。

しかしながら、XenServer 5.5 で再起動を繰り返すという不具合を解消するために、もう一度重ねてアップグレード作業をしてしまったために、折角のバックアップを上書きしてしまっていた。
このため、XenServer のダウングレードに少し苦労した。

XenServer がダウングレードできない

自分の不手際の所為ではあるが、バックアップを使って以前のバージョンに戻すという手段が使えないため、通常のアップグレードの手順で以前のバージョンをインストールできないか、試してみる。

旧バージョンである XenServer 5.0 のインストール CD を用意して、まずはこれを使って起動する。
キーボードの種類を選択し、「Welcome to XenServer」ダイアログで「Install or upgrade XenServer Host」を選択して先に進めていくと、「XenServer 5.5 が入っているためにアップグレードできない」といった内容のメッセージが表示される。
それはまあ、XenServer 5.5 にアップグレードしてあるのだから、当たり前のメッセージなのではあるが、この先はインストールを諦めるか、クリーンインストールするかの二択しかできない。
インストールを諦めれば今の状態のまま再起動を繰り返すだけだし、かといってクリーンインストールでは今までにインストールしたゲスト OS が全て無くなってしまう。

やむなくインストールを諦め、別の方法を探るとしよう。

XenServer を無理矢理 ダウングレード

先ほどの XenServer のインストーラーの動作からみて、インストールされているシステムのバージョンをチェックしてアップグレードできるかどうかを判定している可能性が推測できる。
XenServer は CentOS をベースに構築されていると聞いた覚えがあるので、どこかのファイルにバージョン情報が入っているだろうとあたりをつけて、調べてみよう。

CD ブートの OS、具体的には ubuntu 9.04 desktop edition  を使って CD からブートさせる。
ハードディスクのパーティションがどうなってるかを知るために fdisk -l を実行。

これを見ると、ハードディスクは sda1、sda2、sda3 の三つのパーティションに分けられて居ることが分かる。
途中どのように調べたかの詳細は省くが、sda1 に XenServer のシステム部分と管理情報 (メタデータ) が保存されており、sda2 にバックアップが保存されている。
そして、sda3 にはゲスト OS などのデータが保存されている。
そこで sda1 の中を編集できるように、mount /dev/sda1 /mnt を実行して /mnt に sda1 をマウントした。

先ほど XenServer 5.0 のインストール CD を使って 5.5 から 5.0 にアップグレード(?)しようとしたときに表示された「バージョンダウンになるため、アップグレードできない」という旨のメッセージの中にあった「5.5.0-15119p」というバージョン情報を頼りに、sd1 をマウントした /mnt ディレクトリを検索してみることにする。
find /mnt -print0 | xargs -0 grep ‘15119’ を実行してみたところ、/mnt/etc/issue ファイルと /mnt/etc/redhat-release ファイルのどちらか、もしくは両方を編集すればインストーラを誤魔化せそうな雰囲気だ。

まずは cat /mnt/etc/issue として内容を確認したが、XenServer のバージョン以外に IP アドレスや SSL の指紋なども記述されている。
何となくこれは関係なさそうな雰囲気だ。

続いて cat /mnt/etc/redhat-release を実行すると、XenServer のバージョンが 1行だけ書かれている。
どうやらこれを編集すれば、インストーラを誤魔化せそうな気がする。
早速、このファイルに記述されていた「5.5.0-15119p」の部分を「5.0.0-1p」に書き換える。
ハイフンの後ろの「10000p」の数値に深い意味はない。
先に控えた 15119 がビルド番号であろうと予想し、思いっきり小さい値にしただけのことだ。

編集した /mnt/etc/redhat-release ファイルを保存したら、unmount /mnt を実行して sda1 をアンマウントする。
そして、XenServer 5.0 のインストール CD を挿れて PC を再起動する。

キーボードの種類を選択し、「Welcome to XenServer」ダイアログで「Install or upgrade XenServer Host」を選択して先に進めていくと、… よしっ!
無事にアップグレードが開始された。

これで何とか、XenServer を以前の 5.0 にダウングレードすることができた。
再起動の無限ループも無くなり一安心、と言いたかったが残念なことにまだ問題が残っている。
それは、XenServer のデーモンが立ち上がらないという問題だ。

XenServer のデーモンを起動

XenServer の起動時の画面を注視していると、どうやら xapi デーモンがエラーになっているらしい。
更に、詳しくは /var/log/messages ファイルを見ろ、となっているように見える。
そこで XenServer 自身ののコンソールで /var/log/messages ファイルの内容を調べてみると、スキーマの読み込みに失敗したと記録されている。

ここから先、何処をどう調べたかは省略するが、とにかくググってみたり、Citorix の XenServer のフォーラムを読みあさったり、かなり苦労したことだけを記しておく。

とにかく最終的に、/var/xapi/state.db ファイルを作り直せば良さそうだということが分かった。

まずは試しに、/var/xapi/state.db ファイルを別の名前に変えて、xe-toolstack-restart を実行すると xapi デーモンが起動される。
これに併せて /var/xapi/state.db ファイルが新規に作成される。

続いて /etc/init.d/xapi stop を実行して強制的に xapi デーモンを止め、別の名前にしておいた /var/xapi/state.db ファイルを戻して、xe-toolstack-restart を実行してみる。
今度はエラーが発生して xapi のデーモンは起動しない。

それではということで、もう一度 /var/xapi/state.db ファイルを別の名前に変えてから、xe-toolstack-restart を実行して、新しい /var/xapi/state.db ファイルを作成させる。
新しい /var/xapi/state.db ファイルを作成したら、とりあえず /etc/init.d/xapi stop を実行して強制的に xapi デーモンを止めておく。

新しく作成された /var/xapi/state.db ファイルと、別の名前にしておいた /var/xapi/state.db ファイルを比較して、バージョンに関係しそうな箇所を洗い出し、別の名前にしておいた /var/xapi/state.db ファイルを修正する。

この結果を使って、元々の /var/xapi/state.db ファイルを修正する。

修正前の /etc/xapi/state.db ファイル

 

修正後の /etc/xapi/state.db ファイル

 

別の名前にしておいた /var/xapi/state.db を修正したら、もう一度このファイルを元の名前に戻して、xe-toolstack-restart を実行しする。

無事に xapi デーモンが起動したので、別の PC から XenCenter で接続して確認する。
これも巧く動作しているように見える。

念のため、最後に XenServer を再起動して確認してみると、ひとつのエラーが出ることもなく、無事に XenServer 5.0 が起動した。

関連記事

コメントを残す