cat /proc/kmsg
は、カーネルメッセージを追跡するための便利な方法です。しかし、出力は信頼できません。例:
< eoyfl-o-ilF ilaltssI hwflssesJ a hwbctaealatv-psL hwmmr-sg()nc-l-TtssN oeOfso-eitr()so-l-iesQ na ycso-aksae()Umutfref()so-lce-ak()Wiet_e_yr upfrc-ufrZ <6>[640655.817496] SysRq : HELP : loglevel(0-9) reBoot Crash terminate-all-tasks(E) memory-full-oom-kill(F) kill-all-tasks(I) thaw-filesystems(J) saK show-backtrace-all-active-cpus(L) show-memory-usage(M) Nice-all-RT-tasks(N) powerOff show-registers(P) show-all-timers(Q) unRaw Sync show-task-states(T) Unmount force-fb(V) show-blocked-tasks(W) Write_to_dev_sysrq dump-ftrace-buffer(Z)
(Alt + Sysrq + hを3回押しました。1回目は改行なしで壊れたテキストを印刷しました。2回目は正しいテキストを印刷しました。3回目は終了したばかりです(EOF)。
私は何が間違っているのですか?カーネルメッセージを追跡する方法(さまざまなsysklogdファイルと構成ファイルおよびtail -f
に依存しない)。
または、klogdを使用して、syslogやcat /proc/kmsg
なしでメッセージ(klogd: Already running
のように正しい)を出力する方法は?
cat /proc/kmsg
の出力は、syslogdやfriendsなど、カーネルログデータの他のコンシューマーが存在する可能性があるため、文字化けしているようです。私の場合、出力文字はインターリーブでcatまたはsyslogdに送られます(Ubuntu 12.04で試してみました)。この回答も参照してください: https://stackoverflow.com/a/9477776/496009
cat /proc/kmsg
は、元のシステムで起動したときに確実に機能すると想像できます(たとえば、カーネルはinit=/bin/sh
引数で起動されます)。それ以外の場合は、dmesg
コマンドを使用してカーネルログを読み取る方が簡単です。
私は問題を抱えていましたcat /proc/kmsg
印刷できない文字を表示しようとしたため、途中で終了しました。
私はそれを見つけました:
cat -v /proc/kmsg
印刷できない文字をすべて出力から削除し、cat
が途中で終了するのを防ぎます。