Linux システムからのカーネルパニックメッセージ
Oracle VM VirtualBox上のUbuntu 13.04 (Linux 3.8) でのカーネルパニック
カーネルパニック (kernel panic; KPとも呼ばれる[ 1] ) とは、コンピュータのオペレーティングシステム のカーネル が内部の致命的なエラー (英語版 ) を検出したときに取る安全対策である。このエラーでは、安全に回復できないか、システムを実行し続けることができず、大規模なデータ損失のリスクが大幅に高くなる。この用語は主にUnix およびUnixライク なシステムに特有のものである。Microsoft Windows オペレーティングシステムの場合、これに相当する用語は「ストップエラー」であり、Windowsの初期バージョンでは青背景でバグチェック画面が表示され[ 2] 、バグチェックコードが表示される(口語的には「ブルースクリーン 」またはBSoD /Blue Screen of Deathとして知られている)。Xbox Oneプラットフォームでは緑背景で表示され、Windows 10プレビュービルドでも表示される[ 3] 。
AT&T に由来するBSD Unixソースコードでは、panic()
として知られる、panic()
を処理するカーネルルーチンは、一般的にコンソールにエラーメッセージを出力し、事後デバッグ のためにカーネルメモリのイメージをディスクにダンプし、その後、システムが手動で再起動 されるのを待つか、自動再起動を開始するように設計されている[ 4] 。提供される情報は高度に技術的なものであり、システム管理者 やソフトウェア開発者 が問題を診断するのを支援することを目的としている。カーネルパニックは、カーネル空間の外部で発生したエラーによって引き起こされることもある。例えば、多くのUnixオペレーティングシステムは、ユーザ空間 で実行されるinit プロセスが終了するとパニックになる[ 5] 。
歴史
Unix カーネルは、障害検出メカニズム (英語版 ) としてアサーション を用いて、内部の一貫性と実行時の正確性を維持する。基本的な前提は、ハードウェアとソフトウェアが正しく動作し、アサーションが失敗するとパニックが発生する、つまりシステムの全ての活動が自発的に停止することである[ 6] 。カーネルパニックはUnixの初期バージョンで導入され、Unixとその前身であるMultics の設計思想の間に大きな違いを示した。Multicsの開発者のトム・ヴァン・ヴレック (英語版 ) は、Unixの開発者のデニス・リッチー とこの変更について議論したことを思い出している。
私はデニスに、私がMulticsで書いていたコードの半分はエラー回復コードだと言った。彼は言った「全てを省略した。エラーが発生した場合、パニックと呼ばれるルーチンがあり、それが呼ばれるとマシンがクラッシュし、『おい、再起動しろ』と廊下で大声で叫ぶ。」[ 7] 。
元々のpanic()
関数は、UNIX第5版からVAX ベースのUNIX 32Vまで基本的には変更されておらず、エラーメッセージだけを出力してそれ以外の情報を何も表示せず、システムを無限のアイドルループに落とした。
V6 UNIX のpanic()
関数のソースコード:[ 8]
/*
* In case console is off,
* panicstr contains argument to last
* call to panic.
*/
char * panicstr ;
/*
* Panic is called on unresolvable
* fatal errors.
* It syncs, prints "panic: mesg" and
* then loops.
*/
panic ( s )
char * s ;
{
panicstr = s ;
update ();
printf ( "panic: %s \n " , s );
for (;;)
idle ();
}
Unixのコードベース が強化されたので、panic()
関数も拡張され、さまざまな形式のデバッグ情報がコンソールにダンプされる。
原因
オペレーティングシステムのハードウェア障害やソフトウェアバグ の結果として、パニックが発生する場合がある。多くの場合、オペレーティングシステムは、エラーが発生した後も動作を継続することができる。ただし、システムは不安定な状態にあり、セキュリティ侵害やデータ破損のリスクを冒すよりも、オペレーティングシステムが停止することで、さらなる損傷を防ぎ、エラーの診断を容易にし、通常は再起動する[ 9] 。
ソースコード からカーネルのバイナリイメージ を再コンパイルした後、カーネルが正しく構成、コンパイル、またはインストールされていない場合、結果のカーネルを起動 中にカーネルパニックが発生することは一般的な問題である[ 10] 。追加されたハードウェアやRAM の誤動作も、OSとの非互換性やデバイスドライバ の欠落により、起動時に致命的なカーネルエラーの原因となる可能性がある[ 11] 。ルートファイルシステム を見つけることができない場合、カーネルはpanic()
を実行する可能性もある[ 12] 。カーネルユーザ空間 の初期化の最終段階では、通常、init プロセスの生成が失敗するとパニックが発生する。initプロセス が終了すると、システムが使用不能になるため、パニックが発生する可能性もある[ 13] 。
以下は、kernel_init()
におけるLinuxカーネルの最終初期化の実装である[ 14] 。
static int __ref kernel_init ( void * unused )
{
...
/*
* We try each of these until one succeeds.
*
* The Bourne shell can be used instead of init if we are
* trying to recover a really broken machine.
*/
if ( execute_command ) {
if ( ! run_init_process ( execute_command ))
return 0 ;
pr_err ( "Failed to execute %s. Attempting defaults... \n " ,
execute_command );
}
if ( ! run_init_process ( "/sbin/init" ) ||
! run_init_process ( "/etc/init" ) ||
! run_init_process ( "/bin/init" ) ||
! run_init_process ( "/bin/sh" ))
return 0 ;
panic ( "No init found. Try passing init= option to kernel. "
"See Linux Documentation/init.txt for guidance." );
}
オペレーティングシステムの詳細
Linux
iKVMコンソールで見られるカーネルパニック
カーネルパニックは、他のUnixライク なシステムと同様にLinux でも発生するが、kernel oops として知られている別の種類のエラー状態を生成することもある[ 15] 。この場合、カーネルは通常、問題のあるプロセス を終了 させた後も実行を継続する。oopsにより、いくつかのサブシステムやリソースが利用できなくなる原因となるため、後で完全なカーネルパニックを引き起こす可能性がある。
Linuxでは、カーネルパニックが発生すると、キーボードのLEDが点滅して危機的な状態を視覚的に示す[ 16] 。
macOS
Mac OS X 10.2~10.7でカーネルパニックが発生すると、コンピュータは、システムを再起動する必要があることをユーザに通知する多言語メッセージを表示する[ 17] 。10.2以前は、より伝統的なUnixスタイルのパニックメッセージが表示されていたが、10.8以降では、コンピュータは自動的に再起動し、再起動後にメッセージが表示されるようになった。メッセージの形式はバージョンによって異なる[ 18] 。
Mac OS X 10.0から–カーネルパニック
Mac OS X10.2カーネルパニック
Mac OS X –から10.5カーネルパニック
Mac OS X10.6 および10.7カーネルパニック
OS X 10.8 以降のバージョンでカーネルパニックが発生したため、コンピューターを再起動した後に表示されるメッセージ
関連項目
脚注
^ “KP - Kernel Panic (Linux) | AcronymFinder ”. www.acronymfinder.com . 2016年1月6日閲覧。
^ “Bug Checks (Blue Screens) ”. Hardware Dev Center - Microsoft . 2020年11月4日閲覧。
^ Hoffman. “Did You Know Windows 10 Has a Green Screen of Death? ” (英語). How-To Geek . 2020年6月4日閲覧。
^ “FreeBSD 11.0 - man page for panic (freebsd section 9) - Unix & Linux Commands ”. www.unix.com . 2020年11月16日閲覧。
^ “boot failure-init died - Unix Linux Forums - HP-UX ”. www.unix.com . 2020年11月16日閲覧。
^ Daniel P. Siewiorek; Robert S. Swarz (1998). Reliable computer systems: design and evaluation . A K Peters, Ltd.. p. 622. ISBN 978-1-56881-092-8 . https://books.google.com/books?id=o15pmRSdQIIC&pg=PA622 2011年5月6日閲覧。
^ “Unix and Multics ”. www.multicians.org . 2020年11月16日閲覧。
^ Source code /usr/sys/ken/prf.c from V6 UNIX
^ Steven M. Hancock (November 22, 2002). Tru64 UNIX troubleshooting: diagnosing and correcting system problemsHP Technologies SeriesITPro collection . Digital Press. pp. 119–126. ISBN 978-1-55558-274-6 . https://books.google.com/books?id=wh438GgIJtEC&pg=PA119 2011年5月3日閲覧。
^ Michael Jang (2006). Linux annoyances for geeks . O'Reilly Media, Inc.. pp. 267–274. ISBN 978-0-596-00801-7 . https://books.google.com/books?id=cNGbObmg6IwC&pg=PA267 2011年4月29日閲覧。
^ David Pogue (December 17, 2009). Switching to the Mac: The Missing Manual, Snow Leopard Edition . O'Reilly Media, Inc.. p. 589. ISBN 978-0-596-80425-1 . https://books.google.com/books?id=SjuiTv7DepEC&pg=PA589 2011年5月4日閲覧。
^ Greg Kroah-Hartman (2007). Linux kernel in a nutshell . O'Reilly Media, Inc.. p. 59. ISBN 978-0-596-10079-7 . https://books.google.com/books?id=1rFLGKO0dywC&pg=PA59 2011年5月3日閲覧。
^ Wolfgang Mauerer (September 26, 2008). Professional Linux Kernel Architecture . John Wiley and Sons. pp. 1238–1239. ISBN 978-0-470-34343-2 . https://books.google.com/books?id=e8BbHxVhzFAC&pg=PA1238 2011年5月3日閲覧。
^ linux/init/main.c , LXR Cross Referencer
^ “Linux Device Drivers , Chapter 4 ”. 2020年11月16日閲覧。
^ James Kirkland; David Carmichael; Christopher L. Tinker; Gregory L. Tinker (May 2006). Linux Troubleshooting for System Administrators and Power Users . Prentice Hall . p. 62. ISBN 9780132797399 . https://books.google.com/books?id=FyRhZJ3h3VQC&q=linux+kernel+panic+keyboard+led+blinking&pg=PA62 2016年2月5日閲覧。
^ “OS X: About kernel panics - Apple Support ”. support.apple.com . 2023年1月1日時点のオリジナル よりアーカイブ。2020年11月16日閲覧。
^ “A New Screen of Death for Mac OS X ”. OSXBook.com . 2020年11月16日閲覧。 [リンク切れ ]