KLOGD(8) | Linux System Administration | KLOGD(8) |
名前
klogd -カーネルログデーモン書式
klogd [ -c n ] [ -d ] [ -f fname ] [ -iI ] [ -n ] [ -o ] [ -p ] [ -s ] [ -k fname ] [ -v ] [ -x ] [ -2 ]説明
klogd は Linux のカーネルメッセージを捕え記録するシステムデーモンである。オプション
- -c n
- コンソールに出力するログのレベルの既定値を n にする。
- -d
- デバッグモード。これは 大量に stderr に出力する。
- -f file
- syslog の facility ではなくて指定した名前のファイルにメッセージを記録する。
- -i -I
- 現在実行されている klogd デーモンにシグナルを送る。どちらのオプションもシンボル情報を(再)読み込みするように指示する。-iオプションはカーネルモジュールシンボルを再読み込みさせる。-Iオプションは静的カーネルシンボルとカーネルモジュールシンボルの両方を再読み込みさせる。
- -n
- 自動的なバックグラウンドへの移行を抑止する。これは klogd が init(8) により起動および制御される場合にのみ必要である。
- -o
- `ワンショット'モードで実行する。 klogd はカーネルメッセージバッファに存在する全てのメッセージを読み出し記録する。一回の読み出しと記録ののちデーモンは終了する。
- -p
- パラノイアモード。klog がいつカーネルモジュールシンボルを読み込むかを指定する。このオプションを設定すると、カーネルメッセージストリームに "Oops"の文字列が流れる毎にカーネルモジュールシンボルの情報を読み込む。
- -s
- klogd はカーネルメッセージバッファとのインターフェイスにシステムコールの使用を強行する。
- -k file
- カーネルシンボル情報を指定した名前のファイルから取得する。
- -v
- バージョンを出力し、終了する。
- -x
- EIP 変換を抑制し、 System.map を読み込まない。
- -2
- シンボルが展開された時、アドレスをシンボルに変換したものと生テキストの 2 回表示する。これにより、ksymoops のような外部プログラムが変換される前のデータを使って処理を行えるようになる。
概説
klogd の機能はよく他の版の syslogd に編入されてしまいがちであるが、それはあまり良い方法とは思われない。最近の Linux カーネルにおいては、情報源の特定、順位付け、カーネルアドレスの解決など多くのメッセージに関する問題を扱わなければならない。カーネルロギングを個別のプロセスとすることは、各種サービスの分割を明確なものにする。- <[0-7]>カーネルからの出力
カーネルメッセージの優先順位は <>括弧に閉じられた一桁の数字に変換される。この数値はカーネルの include ファイル kernel.h で定義されている。カーネルからメッセージを受けると klogd デーモンはこの優先順位を読み取り、適切な syslog のメッセージレベルに割り付ける。 ( -f) によってファイルへの出力が指示されている場合には、カーネルメッセージに優先順位番号が残される。
klogd デーモンはカーネルメッセージの出力先をシステムコンソールへ変更することもできる。カーネルによって優先順位が付けられる結果として、メッセージはそれぞれデフォルトの既定のカーネルへのメッセージレベルが割り当てられている。手を加えていないカーネルのデフォルトのコンソールへのメッセージレベルは 7 に設定されている。7 よりも小さい(つまり高い)優先順位レベルを持つメッセージはコンソールに出力される。
レベル 7 の優先順位を持つメッセージは `debug' メッセージとみなされ、コンソールには出力されない。特にマルチユーザ環境における、多くのシステム管理者は全てのカーネルメッセージを klogd により管理させ、ファイルか syslogd デーモンに渡したいと思うだろう。そうすれば、プリンタの用紙切れとかディスクの交換検出のような`わずらわしい'メッセージのコンソールへの出力を避けることができる。
-c オプションが指定されると、 klogd デーモンはコンソールに表示される全てのカーネルメッセージを抑制するシステムコールを実行する。以前のバージョンでは常にこのシステムコールが実行され、そのデフォルトは panic を除くすべてのカーネルメッセージであった。最近のバージョンでは少し違う扱いをしており、もはやこのオプション値を設定する必要はない。 -c オプションの引数にはコンソールへ出力すべきメッセージの優先順位レベルを指定する。指示される数字「よりも小さい」優先順位値を持つメッセージがコンソールへ出力される、という点に注意すること。
- たとえば、優先順位値が 3 ( KERN_ERR) かそれよりも重要なすべてのメッセージをコンソールに出力するためには、次のコマンドを実行する:
-
klogd -c 4
カーネルメッセージの(優先順位の)数値は、カーネルのソースコードがインストールされているのであれば、 /usr/include/linux にある kernel.h ファイルで定義されている。これらの数値は /usr/include/sys サブディレクトリにある syslog.h ファイルでの優先順位値の定義に対応している。
klogd デーモンはカーネルメッセージを読み出す 'ワンショット' モードも利用可能である。ワンショットモードはコマンドラインの -o オプションで指示される。その出力は syslogd デーモンに渡されるか -f スイッチが指定されていれば代りのファイルに書き出される。
- たとえば、システムがブートした際のカーネルメッセージを全て読み出して、それを krnl.msg という名前のファイルに記録するには次のコマンドを実行する。
-
klogd -o -f ./krnl.msg
カーネルアドレスの解決
カーネルが内部エラー状態を検出すると、一般保護違反 (General Protection Fault) が発生する。 GPF 処理手続きの一部として、カーネルは違反が発生した時点でのプロセッサの状態を示すステータス報告を表示する。この表示にはプロセッサのレジスタの内容、カーネルスタックの内容、違反が発生した時にどの関数が実行されていたかのトレースが含まれる。-i
シグナルの処理
klogd は以下の 8 種類のシグナルに反応する: SIGHUP, SIGINT, SIGKILL, SIGTERM, SIGTSTP, SIGUSR1, SIGUSR2, SIGCONT 。このうち SIGINT, SIGKILL, SIGTERM, SIGHUP の各シグナルはデーモンにカーネルログの生成源を閉じさせ、適切に終了させる。
- # kill -TSTP pid
- # umount /proc
- # kill -CONT pid
LOG_INFO 優先順位を持つシステムログがその停止/再開を記録する。
SIGUSR1 と SIGUSR2 はカーネルシンボル情報を(再)読み込みさせるために用いる。 SIGUSR1 はカーネルモジュールシンボルを再読み込みさせる。 SIGUSR2 は静的カーネルシンボルとカーネルモジュールシンボルの両方を再読み込みさせる。
System.map ファイルが適切な位置に置かれているなら、最も有効なシグナルは一般に SIGUSR1 である。このシグナルはカーネルモジュールが(再)読み込みされた時のために用意されている。カーネルモジュールの状態が変わった後にこのシグナルをデーモンに送れば、カーネルモジュールが占めているアドレス空間で保護違反が起きた時に適切にシンボルを解決できることが保証される。
ファイル
- /proc/kmsg
- klogd の記録するカーネルメッセージ源の一つ
- /var/run/klogd.pid
- klogd のプロセス id が記録されているファイル
- /boot/System.map, /System.map, /usr/src/linux/System.map
- カーネルシステムマップのデフォルト位置
バグ
多分、沢山。整理されたコンテキスト diff を送ってくれれば歓迎します。著者
klogd のオリジナルは Steve Lord (lord@crya.com)によって書かれ、Greg Wettstein が多くの改善を施した。- Dr. Greg Wettstein (greg@wind.enjellic.com)
- Enjellic Systems Development
- Oncology Research Divsion Computing Facility
- Roger Maris Cancer Center
- Fargo, ND 58122
21 August, 1999 | Version 1.4 |