#はじめに
OSが起動しなかった場合のトラブルシューティング
今回は起動時にinitramfsからエラーが出力された場合の対処方法です。
実施環境はESXi6.5のネステッド環境に、ゲストOSとしてCentOS7.5をインストールしています。ファームウェアはEFIで実施していますので、BIOSを使用している環境で試す場合はご注意ください。
#現象
以下のメッセージが出力し、OSが起動しない。
dracut-initqueue[xxx]: Warning: dracut-initqueue timeout
Warning: /dev/xxxxx/xxxx does not exist
/(ルート)をマウントする前にメモリ上に展開するinitramfsで問題が発生した場合に出力するメッセージです。
#エラー出力原因
原因としては以下が考えられます。
1.マウントするファイルシステムのパス指定が誤っている
2.マウントするために必要なドライバが不足、または誤っている
3.ファイルシステムに接続するための物理的な経路に問題がある
#対応方法
エラー時にDracut Emergency Shellで表示可能な/run/initramfs/rdsosreport.txt
を確認して原因を特定するのが正道と思いますが、特定方法が整理できていません。。。
そこでいくつかの原因パターンと対応方法を紹介します。
##1.GRUBのファイルシステム指定に誤り
GRUBのlinuxefi1でrootのファイルシステムを指定する箇所に誤りがある。
以下のように誤ったパスを探しに行き、エラーとなります。
この場合、レスキューモードで起動後、/boot配下のgrub.confを調査し、記載されたファイルシステムの指定に誤りが無いかを確認します。
誤りがあった場合は正しく修正を行ってください。2
##2.initramfsイメージ生成時の問題
例えば以下のようにinitramfsイメージ生成時にカーネルの指定を誤ってしまった場合です。
dracut -f initramfs-[カーネルのバージョン].img [誤ったカーネル名]
誤った例
[root@localhost]# dracut -f initramfs-3.10.0-862.el7.x86_64.img 3.141592
Kernel version 3.141592 has no module directory /lib/modules/3.141592
[root@localhost]#
この場合、initramfsからモジュールが呼び出せず、エラーとなってしまいます。
対応方法としては、レスキューモードで起動後、dracut
で正しいカーネルのバージョンを指定しなおす必要があります。
dracut -f initramfs-[カーネルのバージョン].img [カーネルのバージョン]
正しい例
[root@localhost]# dracut -f initramfs-3.10.0-862.el7.x86_64.img 3.10.0-862.el7.x86_64
##3.ドライバの問題
発生原因として一番多く、問題の切り分けに苦慮するパターンです。
インストールしたドライバに問題があったり、異なる機器用のドライバを誤って適用してしまった場合などに発生します。
対応方法としては問題となっているドライバを特定し、正しいドライバをインストールすることになりますが、その切り分けが難しいのですよね。。。
このあたりは調査不足なので整理できたら記事にしたいと思います。
#あとがき
今回は、私の把握している範囲での対処方法を紹介しました。
他にも切り分け方法や対応方法がありましたらご意見頂けますと嬉しいです。
以上