2012-07-10 3 views
7

私はkvmモジュールを変更していますが、カーネルコードでprintk文を追加しました。仮想マシンを実行した後、printkは私に障害のあるアドレスとゲストに関する他の情報を与えますOS。dmesgと/var/log/kern.logの相違点

私はdmesgを使用して統計情報を生成する必要があります。障害のあるアドレス がカーネルスペースにあることがわかります。つまり、そのアドレスが0XC0000000を超えています(VMEXITが起きたときにアドレスが必要です。ホストモード)

kern.logで同じ統計情報が表示されるとき、私はまた、ユーザスペース(0XC0000000以下)からフォールディングアドレスを取得します。 dmesgの容量は限られていて、与えられた情報はkern.logのサブセットのようです。
kern.logファイルが大きすぎます。kern.logから古いデータを消去しても問題ありません。これは、grep、join、awkなどのテキスト処理コマンドがファイルを実行するのに時間がかかりすぎるためです。

私の質問は:
dmesgとkern.logの違いは何ですか?
kern.logファイルのサイズをcronジョブとして減らす方法(過去24時間以内に追加されたすべてのデータを消去する)
カーネルからprintf kindof機能を取得する方法はありますか?

答えて

5

/var/log/kern.logとその回転ログ(/var/log/kern.log.1/var/log/kern.log.2 ....)には、カーネルによって生成されたログが含まれ、syslogで処理されます。

dmesgの検査またはカーネルのリングバッファを制御するために使用された:manページで説明したように

dmesgがためです。

実際には、最後のブート以降に/var/log/kern.logの最後の16392オクテットが表示されます。

+0

kern.logとkern.log.1の内容を消去しても大丈夫です。kern.log.1は非常に大きいので、viは読み込みに5分かかってしまいます...ファイルが長すぎると処理できません私は 'cat/dev/null> kern.log'と' cat/dev/null> kern.log.1'をやってみようと考えていました...ログデータを消去しても問題ありませんか? – Deepthought

+2

@Deepthoughtはいそれらのファイルを消去することはできますが、syslogは最後の5つのファイルだけを保持します。 –

+0

私のUbuntu 16.04では 'dmesg'の出力は'/var/log/kern.log'( 'tail -c 16392'で取得)の最後の16392オクテットとほとんど相関がありません。いくつかの(いくつかの)行は似ていますが、出力形式、表示されるフィールドの違いを考慮する必要があります。また、どのようなフラグや 'awk'後処理が出力を生成しても、 'diff'を使って。 –

関連する問題