カーネルアップデート後に init が見つからないため、起動に失敗する問題について(ML8)
本ドキュメントの対象となる製品
・MIRACLE LINUX 8 Asianux Inside for x86_64 (64bit)
概要
MIRACLE LINUX 8 Asianux Insideにおいてカーネルをアップデートすると、再起動時に画面上に下記のようなメッセージが表示され、システムが起動しないことがございます。
[ 2.511242] Failed to execute /init (error -2) [ 2.513506] Kernel panic - not syncing: No working init found. Try passing init= option to kernel. See Linux Documentation/admin-guide/init.rst for guidance. [ 2.521529] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 4.18.0-147.5.1.el8_1.x86_64 #1 [ 2.526958] Hardware name: Red Hat KVM, BIOS 1.11.0-2.el7 04/01/2014 [ 2.529764] Call Trace: [ 2.531206] dump_stack+0x5c/0x80 [ 2.533120] ? rest_init+0x79/0xaa [ 2.535099] panic+0xe7/0x247 [ 2.537051] ? __do_execve_file.isra.38+0xb8/0x910 [ 2.539591] ? rest_init+0xaa/0xaa [ 2.544050] kernel_init+0xf7/0xff [ 2.546105] ret_from_fork+0x35/0x40 [ 2.547940] Kernel Offset: 0x18400000 from 0xffffffff81000000 (relocation range: 0xffffffff80000000-0xffffffffbfffffff) [ 2.553057] ---[ end Kernel panic - not syncing: No working init found. Try passing init= option to kernel. See Linux Documentation/admin-guide/init.rst for guidance. ]---
問題の原因
fapolicydというプログラムが、システム起動に必要なプログラムが呼び出すライブラリの呼び出しを制限してしまっているためです。
調査方法
システムが起動せず、画面上に前述のメッセージが表示されていても、fapolicydが原因かどうか判りませんので、下記の手順を実施してください。
手順1.アップデート前のカーネルでシステムを起動してください。(リリース番号が古いカーネルで起動してください)
手順2.システムが起動しましたらログインしてください。ログイン後、rootユーザーに切り替えてください。
手順3.fapolicydが有効になっているか、下記のコマンドを実行して確認してください。
# systemctl is-active fapolicyd
コマンドを実行した結果、”active”と表示されたら有効になっています。
active
手順4.次に、下記のようにlddコマンドを実行してください。
# ldd /bin/bash
lddコマンドの実行結果が下記のように表示されたら、fapolicydが原因で起動に失敗しています。(※括弧内のアドレスは異なる場合があります)
linux-vdso.so.1 (0x00007ffd2dbd1000) libtinfo.so.6 => not found libdl.so.2 => not found libc.so.6 => not found
または
not a dynamic executable
対策方法
調査の結果、fapolicydが原因だと判りましたら、下記の手順を実施してください。なお、下記手順はrootユーザーで実施してください。
手順1.下記コマンドを実行し、fapolicydサービスを停止してください。
# systemctl disable fapolicyd.service --now
手順2.次に、下記のようにlddコマンドを実行し、必要なライブラリが呼び出されていることを確認してください。
# ldd /bin/bash
lddコマンドの実行結果が下記のように表示されたら、必要なライブラリが呼び出せています。(※括弧内のアドレスは異なる場合があります)
linux-vdso.so.1 (0x00007fff81189000) libtinfo.so.6 => /lib64/libtinfo.so.6 (0x00007f4b53c4d000) libdl.so.2 => /lib64/libdl.so.2 (0x00007f4b53a49000) libc.so.6 => /lib64/libc.so.6 (0x00007f4b53686000) /lib64/ld-linux-x86-64.so.2 (0x00007f4b54198000)
手順3.下記のコマンドを実行し、一時的なinitramfsを作成してください。
# dracut -f /tmp/initramfs.img $(uname -r)
手順4.一時的なinitramfsを作成したら下記のコマンドを実行し、initramfsの中にlibc.soが含まれていることを確認してください。
# lsinitrd /tmp/initramfs.img | grep libc.so
上記コマンドの結果、下記のように表示されていれば問題ありません。(※ファイルのサイズと日付は異なる場合があります)
-rw-r--r-- 1 root root 253 Jan 15 2019 usr/lib64/libc.so lrwxrwxrwx 1 root root 12 Jan 15 2019 usr/lib64/libc.so.6 -> libc-2.28.so
手順5.手順4までの操作でエラーが出ていなければ、下記のコマンドを実行してinitramfsを再構築してください。
# dracut -f --regenerate-all
手順6.システムを再起動し、アップデートしたカーネルで起動できることを確認してください。
注意事項
本ドキュメントは、各ソフトウェア開発元の情報およびマニュアル等を元にした参考情報です。
本ドキュメントの内容は、予告なしに変更される場合があります。
本ドキュメントは、限られた評価環境における検証結果をもとに作成しており、全ての環境での動作を保証するものではありません。
本ドキュメントの内容に基づき、導入、設定、運用を行なったことにより損害が生じた場合でも、弊社はその損害についての責任を負いません。あくまでお客様のご判断にてご使用ください。
パッケージの更新により、パフォーマンスに影響を生じる可能性があります。業務への影響についてはお客様で検証いただきますようお願いします。
更新履歴
2021年 5月10日 新規作成