自宅の環境ではKVM上でいくつかの仮想サーバが動いている。
仮想サーバのOSはCentOS7.8で、yum-cronを動かして放置していた。
先日、久しぶりにOS再起動をしたところ、OSが起動できなくなってしまった。
起動時のログを見ていると、以下のログが出ていた。
[ 1.013801] List of all partitions:
[ 1.015108] No filesystem could mount root, tried:
[ 1.016734] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
[ 1.019481] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 3.10.0-1127.18.2.el7.x86_64 #1
[ 1.022194] Hardware name: Red Hat KVM, BIOS 0.5.1 01/01/2011
[ 1.023881] Call Trace:
[ 1.025034] [<ffffffffb577ffa5>] dump_stack+0x19/0x1b
[ 1.026803] [<ffffffffb5779541>] panic+0xe8/0x21f
[ 1.028402] [<ffffffffb5d8b794>] mount_block_root+0x291/0x2a0
[ 1.030085] [<ffffffffb5d8b7f6>] mount_root+0x53/0x56
[ 1.031749] [<ffffffffb5d8b935>] prepare_namespace+0x13c/0x174
[ 1.034253] [<ffffffffb5d8b412>] kernel_init_freeable+0x222/0x249
[ 1.036027] [<ffffffffb5d8ab28>] ? initcall_blacklist+0xb0/0xb0
[ 1.037817] [<ffffffffb576e6b0>] ? rest_init+0x80/0x80
[ 1.039407] [<ffffffffb576e6be>] kernel_init+0xe/0x100
[ 1.040978] [<ffffffffb5792d37>] ret_from_fork_nospec_begin+0x21/0x21
[ 1.042843] [<ffffffffb576e6b0>] ? rest_init+0x80/0x80
[ 1.044603] Kernel Offset: 0x34000000 from 0xffffffff81000000 (relocation range: 0xffffffff80000000-0xffffffffbfffffff)
rootのファイルシステムがマウントできず、カーネルパニックを起こしているらしい。
調べてみた結果、yumとかで新しいカーネルバージョンにアップデートされると、
上記のエラーメッセージが出て、できなくなることがあるらしい。
対処としては、OS起動時にカーネルバージョン選択画面が出てくるので、
古いカーネルバージョンを指定して起動してあげれば起動できるようにはなるらしい。
さて、それはわかったが、KVMだとそれをどうやればいいんだろうということだ。
GUI環境がまったくなく、起動時にカーネルバージョンを指定することができない。
KVMのコマンドでカーネルバージョンの指定をする方法等調べてみたが、
その方法は見つけることができなかった。
直接bootの設定ファイルを書き換えて対処できないかと思考錯誤してみて、対処できたので、その方法をまとめる。