Linux dmesg コマンド完全ガイド|使い方・ログ解析・トラブルシューティングを徹底解説

最終更新日 2025年3月6日

スポンサーリンク
Contents
  1. 本記事の要点
  2. dmesgコマンドとは?Linuxでの役割と基本概要
  3. Linux dmesgコマンドの基本的な使い方
  4. dmesgのログ解析と応用テクニック
  5. システムトラブルの早期発見に役立つ活用例
  6. dmesgコマンドを活用したトラブルシューティング
  7. ネットワークトラブルをdmesgで解析する方法
  8. カーネルクラッシュ(Kernel Panic)のログを確認する方法
  9. dmesgログをSyslogやJournalctlと連携させる方法
  10. よくあるdmesg関連のエラーと対処法
  11. dmesgコマンドを使いこなすためのTIPS
  12. dmesgを活用した特殊事例

本記事の要点

dmesgコマンドの基本構文

dmesg [オプション]

dmesgでよく使用するオプション

オプション説明
dmesgカーネルメッセージバッファを表示
dmesg -Cメッセージバッファをクリア
dmesg -Tメッセージのタイムスタンプを人間が読みやすい形式で表示
dmesg -kカーネルメッセージのみ表示
dmesg -l errエラーメッセージのみ表示
dmesg -l warn警告メッセージのみ表示
dmesg -l info情報メッセージのみ表示
dmesg -n 1表示するログレベルを制限(ここでは1=KERN_EMERG)
dmesg -H出力を読みやすい形式にフォーマット
dmesg -x詳細なフォーマットで出力
dmesg -wリアルタイムでメッセージを監視
dmesg | tail -n 20最新の20行を表示
dmesg | grep 'error'エラーメッセージのみ抽出
dmesg -f kern特定のファシリティ(ここではkern)に絞って表示
dmesg --color=always色付き出力(サポートされている環境のみ)

dmesgの出力結果の意味

実行コマンド

dmesg | tail -n 5

出力結果

[  123.456789] usb 1-1: new high-speed USB device number 2 using xhci_hcd
[  124.123456] eth0: Link is Up - 1Gbps/Full - flow control rx/tx
[  125.987654] CPU1: Core temperature above threshold, CPU throttled
[  126.543210] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null)
[  127.678901] random: crng init done
項目意味
[ 123.456789]タイムスタンプ(システム起動からの経過時間、秒単位)
usb 1-1: new high-speed USB deviceUSBデバイスの接続情報
eth0: Link is Upネットワークインターフェースの状態
CPU1: Core temperature above thresholdCPU温度の警告
EXT4-fs (sda1): mounted filesystemファイルシステムのマウント情報
random: crng init done乱数生成の初期化完了

dmesgコマンドとは?Linuxでの役割と基本概要

本セクションでは以下の内容について解説します。

  1. dmesgの基本機能と役割
  2. なぜdmesgが重要なのか?(カーネルログの役割)
  3. dmesgを利用するメリット
  4. まとめ

dmesgの基本機能と役割

dmesg(display message)コマンドは、Linuxカーネルが出力するログメッセージを表示するためのコマンドです。
主にシステムの起動時の情報やハードウェアの状態、ドライバの動作ログを確認するために使用されます。これにより、システムの異常やエラーを検知しやすくなります。

新人エンジニア
新人エンジニア

先輩、dmesg ってどんなコマンドなんですか?

先輩エンジニア
先輩エンジニア

dmesg はカーネルが出力するログメッセージを表示するコマンドだよ。システムの起動時やデバイスの接続時、エラー発生時などにカーネルが出力する情報を取得できるんだ。

新人エンジニア
新人エンジニア

journalctldmesg って何が違うんですか?

先輩エンジニア
先輩エンジニア

dmesg はカーネルメッセージのみを出力するのに対し、journalctl はシステム全体のログを管理する。例えば、dmesg でデバイスのエラーメッセージを確認し、journalctl でシステムログ全体の流れを把握する、といった使い方ができるよ。

dmesgコマンドとは?

基本機能と役割

dmesg(display message)はLinuxカーネルが出力するログメッセージを表示するコマンドです。システム起動時の情報やハードウェアの状態を確認できます。

カーネルログの重要性

システムの異常やエラーを検知するための重要な情報源です。ハードウェアの認識状況やドライバの読み込み状態を確認できます。

利用するメリット

システムの異常を素早く検知し、ハードウェアの動作状況を簡単にチェックできます。シンプルなコマンドで扱いやすいのが特徴です。
dmesgコマンドとは?
スポンサーリンク

なぜdmesgが重要なのか?(カーネルログの役割)

dmesgはLinuxカーネルがリアルタイムで記録する重要な情報源であり、システム管理者や開発者がトラブルシューティングを行う際に欠かせないツールです。
特に以下のような場面で役立ちます。

  • システムの起動ログの確認(ブート時のエラーや遅延の原因調査)
  • ハードウェアの認識状況のチェック(USBやディスクの接続状況)
  • ドライバの読み込み状況の確認(モジュールのエラーやロード状態)
  • カーネルのエラーメッセージの確認(Kernel Panic、OOM Killerの発動など)
新人エンジニア
新人エンジニア

カーネルログって、システム運用でそんなに重要なんですか?

先輩エンジニア
先輩エンジニア

すごく重要だよ。例えば、USBメモリを挿しても認識しない時、dmesg を見れば原因がわかることがあるし、カーネルパニックの原因も確認できる。ハードウェアの問題を特定するのにも役立つんだ。

dmesgを利用するメリット

1. システムの異常を素早く検知できる
dmesg を使えば、カーネルが出力するエラーや警告をリアルタイムで確認できるため、問題の原因を素早く特定できます。

2. ハードウェアの動作状況を簡単にチェックできる
新しいデバイスを接続したとき、dmesg を実行することでデバイスが正しく認識されているか確認できます。特にUSBデバイスやSSD、メモリ関連の問題を特定するのに便利です。

3. シンプルなコマンドで扱いやすい
dmesg はコマンド一つでカーネルログを出力でき、grep などのコマンドと組み合わせて簡単にログをフィルタリングできます。

新人エンジニア
新人エンジニア

でも、システムログなら /var/log/messagesjournalctl を見ればいいんじゃないですか?

先輩エンジニア
先輩エンジニア

それもいいけど、dmesg はカーネルメッセージに特化しているから、特にハードウェアやドライバの問題を調査するのに向いているんだ。カーネルのエラーやドライバの読み込み状況を確認するなら、まず dmesg をチェックするのが定石だよ。

まとめ

  • dmesg はカーネルのログメッセージを表示するコマンド
  • システムの異常検知やハードウェアの状態確認に便利
  • journalctl とは用途が異なり、カーネルに特化した情報を取得できる
  • シンプルなコマンドで、トラブルシューティングに必須のツール
スポンサーリンク

Linux dmesgコマンドの基本的な使い方

本セクションでは以下の内容について解説します。

  1. dmesgコマンドの基本構文
  2. dmesgコマンドの使い方(カーネルログの表示)
  3. ログのフィルタリング方法(grepとの組み合わせ)
  4. 特定のデバイスのログを確認する方法
  5. 起動ログを確認する方法
  6. まとめ

dmesgコマンドの基本構文

dmesg コマンドは、Linuxカーネルが出力するログメッセージを表示するためのシンプルなコマンドです。基本的には dmesg を実行するだけで、最新のカーネルログを確認できます。

dmesg [オプション]

主なオプション

  • -T :ログのタイムスタンプを人間が読みやすい形式に変換
  • -c :現在のカーネルログを表示後にクリア
  • -H :ログをハイライト表示(色付き)
  • -l <レベル> :特定のログレベル(エラーや警告のみなど)を表示
  • --color=always :色付きで出力
新人エンジニア
新人エンジニア

dmesg を実行したら大量のログが出るんですが、どうやって必要な情報を探せばいいですか?

先輩エンジニア
先輩エンジニア

まずは dmesg | less でスクロールしながら見てみるといいよ。特定のキーワードで絞り込みたいなら grep を使うと便利だ。

dmesgコマンドの基本構文

基本的な使い方

dmesg [オプション]

主なオプション

-T:タイムスタンプを人間が読みやすい形式に変換

-c:現在のカーネルログを表示後にクリア

-H:ログをハイライト表示(色付き)

-l <レベル>:特定のログレベルを表示

基本コマンド例

dmesg -T(読みやすい時間形式で表示)
dmesgコマンドの基本構文
スポンサーリンク

dmesgコマンドの使い方(カーネルログの表示)

基本的な dmesg の使い方は、単にコマンドを実行することです。これでシステムのカーネルメッセージ全体を表示できます。

dmesg

ただし、デフォルトではUNIXタイム(秒数)で表示されるため、ログの時間が分かりにくい です。その場合は -T オプションを使います。

dmesg -T
新人エンジニア
新人エンジニア

ログの時間が 1643291345.123456 みたいに表示されるんですが、これってどう読むんですか?

先輩エンジニア
先輩エンジニア

それはUNIXタイムと呼ばれる形式だから、人間が読みやすい YYYY-MM-DD HH:MM:SS に変換するには dmesg -T を使うといいよ。

ログのフィルタリング方法(grepとの組み合わせ)

dmesg はそのままだと大量の情報が表示されるため、grep を使って特定の情報を絞り込むのが基本です。

例えば、エラーメッセージ(error)だけを表示 する場合

dmesg | grep -i "error"

また、警告(warning)メッセージを確認 するには:

dmesg | grep -i "warning"
新人エンジニア
新人エンジニア

デバイスのログだけを見たいんですが、どうやって絞り込めばいいですか?

先輩エンジニア
先輩エンジニア

USBなら dmesg | grep -i usb、ネットワークなら dmesg | grep -i eth のように、関連するキーワードを指定するといいよ。

ログのフィルタリング方法

エラーメッセージの抽出

dmesg | grep -i "error"

警告メッセージの確認

dmesg | grep -i "warning"

USBデバイスのログ確認

dmesg | grep -i usb

ネットワークデバイスのログ

dmesg | grep -i eth
ログのフィルタリング方法
スポンサーリンク

特定のデバイスのログを確認する方法

特定のハードウェアデバイスのログを確認するには、デバイス名やキーワードを指定して絞り込む のが効果的です。

USBデバイスのログを確認する

dmesg | grep -i usb

ネットワークデバイス(Ethernet)のログを確認する

dmesg | grep -i eth

ストレージデバイス(SSDやHDD)のログを確認する

dmesg | grep -i sd
新人エンジニア
新人エンジニア

新しくUSBデバイスを挿したんですが、認識されているか確認する方法はありますか?

先輩エンジニア
先輩エンジニア

まず dmesg | grep -i usb を実行して、新しいデバイスの接続メッセージが出ているか確認してみよう。次に lsblk でデバイス名をチェックすると、ちゃんと認識されているか分かるよ。

特定デバイスのログ確認方法

USBデバイス

dmesg | grep -i usb でUSBデバイスの接続状況やエラーを確認できます。

ネットワークデバイス

dmesg | grep -i eth でEthernetインターフェースの状態を確認できます。

ストレージデバイス

dmesg | grep -i sd でSSDやHDDの状態やエラーを確認できます。
特定デバイスのログ確認方法
スポンサーリンク

起動ログを確認する方法

システムの起動時のメッセージを確認するには、ブート時のログだけを抽出 するオプション -k を使います。

dmesg --level=err,warn

また、システム起動後のイベントも確認 するには、ログレベルを指定して重要なメッセージのみを表示すると便利です。

dmesg --level=crit,alert,emerg
新人エンジニア
新人エンジニア

システムが正常に起動したか確認したいんですが、どこを見ればいいですか?

先輩エンジニア
先輩エンジニア

dmesg | grep -i "error\|fail" でエラーを確認し、dmesg -T | less でブートシーケンスを確認するといいよ。特に systemd のメッセージも合わせて journalctl -b で見ると、より詳細な情報が分かる。

起動ログの確認方法

エラーと警告のみ表示

dmesg --level=err,warn でブート時の重要なエラーメッセージを確認できます。

重要なメッセージの確認

dmesg --level=crit,alert,emerg で致命的なエラーを確認できます。

エラーの絞り込み

dmesg | grep -i "error|fail" でエラーメッセージを抽出できます。
起動ログの確認方法

まとめ

  • dmesg はLinuxのカーネルログを取得するコマンド
  • 基本的な使い方は dmesg または dmesg -T
  • エラーやデバイスごとのログを grep で絞り込むのが実用的
  • USBやネットワーク、ストレージのログを確認する際に活用できる
  • 起動時のログは dmesg --level=err,warn でチェックできる
スポンサーリンク

dmesgのログ解析と応用テクニック

本セクションでは以下の内容について解説します。

  1. カーネルメッセージの見方と解釈
  2. ログの時刻情報を見やすくする方法(dmesg -T)
  3. エラーメッセージの種類と対処法
  4. よくあるエラーメッセージ
  5. ログをファイルに保存する方法
  6. ログを追記モードで保存

カーネルメッセージの見方と解釈

dmesg のログはカーネルが出力するシステム情報やエラーメッセージが含まれていますが、適切に解釈することが重要です。基本的なフォーマットを理解すれば、トラブルシューティングやパフォーマンス監視に役立ちます。

dmesg の出力は以下のような形式になっています。

[  123.456789] usb 1-1: new high-speed USB device number 3 using ehci-pci
  • [ 123.456789]カーネル起動後の時間(秒)
  • usb 1-1:対象となるデバイス(この場合はUSB)
  • new high-speed USB device number 3 using ehci-pciイベントの詳細
新人エンジニア
新人エンジニア

dmesg のログの時間って、リアルな時刻じゃないんですね?

先輩エンジニア
先輩エンジニア

そうだね。デフォルトではカーネルの起動時間からの経過秒数で表示されるから、リアルな時刻にしたいときは dmesg -T を使うといいよ。

カーネルメッセージの見方と解釈

時間情報

[ 123.456789] はカーネル起動後の経過時間(秒)を示します。

対象デバイス

usb 1-1: のように、メッセージが関連するデバイスやサブシステムが表示されます。

イベント詳細

new high-speed USB device number 3 using ehci-pci のように、具体的な情報が表示されます。
カーネルメッセージの見方と解釈
スポンサーリンク

ログの時刻情報を見やすくする方法(dmesg -T)

デフォルトの dmesg の時刻は、カーネル起動後の経過時間で表示されるため、人間が理解しやすい形式に変換するには -T オプションを使用します。

dmesg -T

実行結果

[Fri Mar  1 12:34:56 2024] usb 1-1: new high-speed USB device number 3 using ehci-pci
新人エンジニア
新人エンジニア

リアルタイムの時刻が表示されるのは便利ですね!でも、-T で変換された時間って正確なんですか?

先輩エンジニア
先輩エンジニア

基本的にはシステムクロックに基づいて変換されるけど、まれにズレが生じることもある。正確な時刻情報が必要なときは journalctl のほうが適しているよ。

ログの時刻情報を見やすくする方法

デフォルト表示

[ 123.456789] usb 1-1: new high-speed USB device number 3 using ehci-pci

カーネル起動後の経過時間(秒)で表示されます。

-T オプション使用時

[Fri Mar 1 12:34:56 2024] usb 1-1: new high-speed USB device number 3 using ehci-pci

人間が読みやすい日時形式に変換されます。
ログの時刻情報を見やすくする方法
スポンサーリンク

エラーメッセージの種類と対処法

dmesg のエラーメッセージは、システムの異常や障害を特定するために重要な情報です。特定のエラーだけを抽出するには --level オプションを使います。

dmesg --level=err,warn

よくあるエラーメッセージ

メッセージ内容対処方法
I/O errorデバイスの読み書きエラーデバイスの接続確認・fsckの実行
Out of memoryメモリ不足エラー使用中プロセスの確認・スワップ拡張
Kernel panicカーネルクラッシュエラーログ解析・ハードウェアチェック
Failed to mountマウント失敗fstab設定の確認・デバイスの状態チェック
新人エンジニア
新人エンジニア

Out of memory: Killed process というエラーが出てるんですが、これってどういう意味ですか?

先輩エンジニア
先輩エンジニア

これはシステムのメモリが不足して、カーネルが強制的にプロセスを終了させたことを意味しているよ。まず free -h でメモリ状況を確認して、不要なプロセスを kill したり、スワップ領域を増やしたりするといい。

よくあるエラーメッセージと対処法

メッセージ

内容

対処方法

I/O error

デバイスの読み書きエラー

デバイスの接続確認・fsckの実行

Out of memory

メモリ不足エラー

使用中プロセスの確認・スワップ拡張

Kernel panic

カーネルクラッシュ

エラーログ解析・ハードウェアチェック

Failed to mount

マウント失敗

fstab設定の確認・デバイスの状態チェック
よくあるエラーメッセージと対処法
スポンサーリンク

ログをファイルに保存する方法

dmesg の出力を後で分析したり、共有するためにファイルに保存する方法を知っておくと便利です。

ファイルにログを保存

dmesg > /var/log/dmesg.log

または、特定のエラーだけを保存する場合は以下です。

dmesg --level=err,warn > /var/log/dmesg_errors.log

ログを追記モードで保存

dmesg >> /var/log/dmesg.log
新人エンジニア
新人エンジニア

保存したログを後で簡単に確認する方法ってありますか?

先輩エンジニア
先輩エンジニア

less /var/log/dmesg.log を使うとスクロールしながら見られるよ。リアルタイムで監視するなら tail -f /var/log/dmesg.log もおすすめだ。

ログをファイルに保存する方法

基本的な保存

dmesg > /var/log/dmesg.log

エラーのみ保存

dmesg --level=err,warn > /var/log/dmesg_errors.log

追記モードで保存

dmesg >> /var/log/dmesg.log

保存したログの確認

less /var/log/dmesg.log または tail -f /var/log/dmesg.log
ログをファイルに保存する方法
スポンサーリンク

システムトラブルの早期発見に役立つ活用例

デバイスの異常検知

新しいデバイスを接続しても認識されない場合

dmesg | grep -i usb

メモリ不足の監視

OOM (Out of Memory) が発生していないか確認する

dmesg | grep -i "out of memory"

カーネルパニックの原因特定

システムがクラッシュした場合の原因を調査する

dmesg | grep -i "kernel panic"
新人エンジニア
新人エンジニア

システムが不安定なんですが、dmesg を使って何をチェックすればいいですか?

先輩エンジニア
先輩エンジニア

まず dmesg --level=err,warn でエラーを確認しよう。ハードウェア関連なら dmesg | grep -i usbdmesg | grep -i ata でデバイスの問題を調べるのが基本だね。

システムトラブルの早期発見に役立つ活用例

デバイスの異常検知

dmesg | grep -i usb で新しいデバイスが認識されない問題を確認できます。

メモリ不足の監視

dmesg | grep -i "out of memory" でOOMが発生していないか確認できます。

カーネルパニックの原因特定

dmesg | grep -i "kernel panic" でシステムクラッシュの原因を調査できます。
システムトラブルの早期発見に役立つ活用例

まとめ

  • dmesg のログはカーネルの動作を記録する重要な情報源
  • dmesg -T を使うと、ログの時刻を人間が読みやすい形式に変換できる
  • エラーメッセージを --level=err,warn で抽出し、トラブルシューティングに活用
  • ログをファイルに保存して分析したり、システム監視に役立てることができる
  • dmesg を活用することで、ハードウェアトラブルやカーネルクラッシュの原因を素早く特定できる
スポンサーリンク

dmesgコマンドを活用したトラブルシューティング

本セクションでは以下の内容について解説します。

  1. ハードウェアの問題を特定する方法(ディスク・メモリ・USBデバイス)
  2. メモリの問題を特定
  3. USBデバイスが認識されない場合

ハードウェアの問題を特定する方法(ディスク・メモリ・USBデバイス)

dmesg を使用すると、ハードウェアの問題(ディスク、メモリ、USBデバイス)のエラーや認識状況を素早く確認できます。特定のデバイスに関するログを抽出し、問題を特定することが重要です。

ディスク(HDD・SSD)のエラーを確認

ディスク関連のエラーを調べるには、以下のコマンドを実行します。

dmesg | grep -i "sd"

エラーメッセージ

[ 1234.56789] sd 0:0:0:0: [sda] Unhandled sense code
新人エンジニア
新人エンジニア

最近サーバーのディスクI/Oが遅いんですが、dmesgでチェックできますか?

先輩エンジニア
先輩エンジニア

まず dmesg | grep -i sd でディスク関連のエラーを確認しよう。特に I/O errorbad sector というメッセージが出ていたら、ディスクに異常がある可能性が高いね。

ディスク関連の問題を特定する方法

ディスクエラーの確認

dmesg | grep -i "sd" でディスク関連のエラーを調べられます。

エラーメッセージの例

[ 1234.56789] sd 0:0:0:0: [sda] Unhandled sense code

対処方法

smartctl -a /dev/sda でディスクの状態を確認し、fsck -y /dev/sda1 でファイルシステムを修復します。
ディスク関連の問題を特定する方法
スポンサーリンク

メモリの問題を特定

メモリ関連のエラーログを確認するには

dmesg | grep -i "memory"

また、OOM(Out of Memory)エラーの確認

dmesg | grep -i "oom"
新人エンジニア
新人エンジニア

プロセスが勝手に落ちるんですが、メモリ不足が原因かどうか調べられますか?

先輩エンジニア
先輩エンジニア

dmesg | grep -i oom を実行して、OOM Killer が発動していないか確認しよう。もしメモリ不足なら、スワップの増設や不要なプロセスの削除を検討するといいよ。

メモリとUSBデバイスの問題特定

メモリの問題

dmesg | grep -i "memory" または dmesg | grep -i "oom" でメモリエラーを確認できます。

OOM Killerが発動している場合は、スワップの増設や不要なプロセスの削除を検討します。

USBデバイスの問題

dmesg | grep -i usb でUSB関連のログを確認できます。

「device not accepting address」のようなエラーが出ていたら、ポートやデバイスの問題の可能性があります。
メモリとUSBデバイスの問題特定
スポンサーリンク

USBデバイスが認識されない場合

USB関連のログを確認するには

dmesg | grep -i usb
新人エンジニア
新人エンジニア

USBデバイスを挿しても認識されません。何をチェックすればいいですか?

先輩エンジニア
先輩エンジニア

まず dmesg | grep -i usb で、新しいデバイスの認識ログが出ているか確認しよう。もし device not accepting address のようなエラーが出ていたら、ポートやデバイスの問題の可能性が高いね。

ネットワークトラブルをdmesgで解析する方法

ネットワークのトラブルシューティングでは、dmesg でネットワークデバイス(eth0 など)のエラーメッセージを確認するのが有効です。

  1. ネットワークインターフェースの状態を確認
  2. ドライバのロードエラーを確認

ネットワークインターフェースの状態を確認

dmesg | grep -i "eth"

エラーメッセージ

[ 3456.78901] e1000: eth0: Link is Down
新人エンジニア
新人エンジニア

サーバーのネットワークが不安定なんですが、原因を調べるにはどうすればいいですか?

先輩エンジニア
先輩エンジニア

まず dmesg | grep -i eth でネットワークインターフェースのエラーログを確認しよう。Link is Down のようなメッセージが出ていたら、ケーブルやスイッチの接続状態もチェックするべきだね。

ネットワークトラブルをdmesgで解析する方法

インターフェース状態の確認

dmesg | grep -i "eth" でネットワークインターフェースの状態を確認できます。「Link is Down」のようなメッセージが出ていたら、物理接続を確認しましょう。

ドライバのロードエラー確認

dmesg | grep -i "firmware" でドライバの読み込みエラーを確認できます。「firmware failed to load」というエラーが出たら、ファームウェアのインストールが必要かもしれません。

接続問題の診断

ネットワークが不安定な場合は、dmesg | grep -i eth でエラーログを確認し、ケーブルやスイッチの接続状態もチェックしましょう。
ネットワークトラブルをdmesgで解析する方法
スポンサーリンク

ドライバのロードエラーを確認

dmesg | grep -i "firmware"

ネットワークドライバの読み込みに失敗している場合、firmware failed to load というエラーが出ることがあります。

新人エンジニア
新人エンジニア

新しいネットワークアダプタを追加したら、うまく動かないんですが?

先輩エンジニア
先輩エンジニア

dmesg | grep -i firmware でドライバの読み込みエラーがないか確認しよう。もし failed to load のようなメッセージが出ていたら、対応するファームウェアをインストールする必要があるかもしれないね。

カーネルクラッシュ(Kernel Panic)のログを確認する方法

Kernel Panic が発生すると、システムが停止し、再起動しないと復旧できないことがあります。dmesg を使ってクラッシュの原因を調べることが重要です。

Kernel Panic のログを確認

dmesg | grep -i "panic"

または、直近のクラッシュログを表示

journalctl -k -b -1
新人エンジニア
新人エンジニア

サーバーが突然落ちて、Kernel Panic のメッセージが出たんですが、原因を特定する方法はありますか?

先輩エンジニア
先輩エンジニア

dmesg | grep -i panic で、クラッシュ前のログを確認してみよう。特に fatal exceptionunable to handle kernel paging request というメッセージが出ていたら、メモリやカーネルの問題の可能性があるね。

カーネルクラッシュのログ確認方法

Kernel Panicのログ確認

dmesg | grep -i "panic"

直近のクラッシュログ表示

journalctl -k -b -1

クラッシュ前のログ確認

fatal exceptionやpaging requestエラー
カーネルクラッシュのログ確認方法
スポンサーリンク

dmesgログをSyslogやJournalctlと連携させる方法

dmesg は一時的なカーネルログを表示するだけなので、ログを長期的に管理したい場合は Syslog や Journalctl との連携が必要です。

Syslog(/var/log/messages)にdmesgを記録

通常、カーネルログは /var/log/messages/var/log/syslog に記録されます。手動で追加する場合以下のコードを実行しいます。

dmesg >> /var/log/dmesg.log

journalctl でカーネルログを取得

journalctl -k

ブートごとのログを確認するには以下のコードを実行します。

journalctl -k -b -1
新人エンジニア
新人エンジニア

dmesg のログって再起動すると消えるんですよね?過去のログはどうやって見ればいいですか?

先輩エンジニア
先輩エンジニア

そうだね。過去のログを見たいなら journalctl -k -b -1 を使うと、前回の起動時のカーネルメッセージを確認できるよ。

dmesgログをSyslogやJournalctlと連携させる方法

Syslogへの記録

dmesg >> /var/log/dmesg.log

journalctlでの取得

journalctl -k

ブートごとのログ確認

journalctl -k -b -1
dmesgログをSyslogやJournalctlと連携させる方法
スポンサーリンク

まとめ

  • dmesg を使えばハードウェアの問題(ディスク、メモリ、USB)を素早く特定できる
  • ネットワークトラブルの解析には dmesg | grep -i eth でインターフェース状態を確認する
  • Kernel Panic のログを dmesg | grep -i panic で特定し、クラッシュの原因を分析する
  • Syslog や Journalctl と連携すると、再起動後もカーネルログを管理できる

よくあるdmesg関連のエラーと対処法

本セクションでは以下の内容について解説します。

  1. 「buffer I/O error」エラーの原因と解決策
  2. 「failed to mount root fs」エラーのトラブルシューティング
  3. 「Out of memory: Killed process」エラーの対応策
  4. 「Kernel panic」発生時の対処方法
  5. まとめ
よくあるdmesg関連のエラーと対処法

buffer I/O error

ディスクの読み書きエラー。smartctlでディスク状態確認、fsckでファイルシステム修復を試みましょう。

failed to mount root fs

ルートファイルシステムのマウント失敗。fsckで修復、fstabの設定確認が必要です。

Out of memory

メモリ不足エラー。topでプロセス確認、スワップ増設が有効です。

Kernel panic

カーネルの致命的エラー。dmesg | grep panicで原因特定、memtest86+でメモリチェックを行いましょう。
よくあるdmesg関連のエラーと対処法

「buffer I/O error」エラーの原因と解決策

「buffer I/O error」 は、ディスクやストレージデバイスの読み書きエラーを示すメッセージです。ハードウェアの故障、ファイルシステムの破損、不良セクタなどが原因として考えられます。

エラーメッセージ

[ 1234.567890] buffer I/O error on device sda1, logical block 12345

原因と対策

原因対策
物理的なディスク障害smartctl -a /dev/sda でディスクの状態を確認し、不良セクタが多い場合は交換を検討
ファイルシステムの破損fsck -y /dev/sda1 を実行し、エラーを修復
ケーブルや接続の問題SATA / USB ケーブルを交換し、再接続
新人エンジニア
新人エンジニア

ディスクの読み書きエラーが出ています。これってディスクの故障ですか?

先輩エンジニア
先輩エンジニア

smartctl -a /dev/sda でディスクの状態を確認しよう。不良セクタが増えているなら故障の可能性が高いね。ファイルシステムの破損なら fsck で修復できるか試してみよう。

スポンサーリンク

「failed to mount root fs」エラーのトラブルシューティング

「failed to mount root fs」 エラーは、システムのルートファイルシステムが正常にマウントできないときに発生します。ブートプロセスが停止し、OSが起動できなくなる重大なエラーです。

エラーメッセージ

[ 5678.910111] VFS: Cannot open root device "sda1" or unknown-block(0,0)
[ 5678.910112] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)

原因と対策

原因対策
fstabの設定ミスcat /etc/fstab で設定を確認し、UUIDまたはデバイス名が正しいか確認
ファイルシステムの破損fsck -y /dev/sda1 を実行して修復
カーネルが適切なドライバをロードしていないinitrd を更新 (update-initramfs -u)
新人エンジニア
新人エンジニア

OSがブートしなくなって、『failed to mount root fs』 というエラーが出ています。どうすればいいですか?

先輩エンジニア
先輩エンジニア

まず fsck -y /dev/sda1 でファイルシステムを修復してみよう。それでもダメなら cat /etc/fstab で設定ミスがないか確認してみて。

「Out of memory: Killed process」エラーの対応策

「Out of memory: Killed process」エラーは、システムのメモリ不足が原因で、カーネルが特定のプロセスを強制終了(OOM Killerの発動)したことを示します。特に負荷の高いプロセスがあると発生しやすくなります。

エラーメッセージ

[ 6789.123456] Out of memory: Killed process 1234 (java) total-vm:5123456kB, anon-rss:204800kB, file-rss:1024kB

原因と対策

原因対策
メモリ消費の多いプロセスがあるtop や htop でプロセスを確認し、不必要なプロセスを終了
スワップ領域が不足しているswapon -s でスワップの使用状況を確認し、必要ならスワップを増設
メモリリークの可能性`dmesg
新人エンジニア
新人エンジニア

Out of memory: Killed process というエラーが出て、アプリケーションが勝手に落ちてしまいます。

先輩エンジニア
先輩エンジニア

top でメモリを大量に消費しているプロセスを特定しよう。スワップが少ないなら swapon -s で確認して増設するのも手だね。

スポンサーリンク

「Kernel panic」発生時の対処方法

「Kernel panic」 は、カーネルが回復不能なエラーに直面し、システムが停止したことを示します。再起動しない限り復旧できません。発生原因を特定し、適切に対処することが重要です。

エラーメッセージ

[ 7890.234567] Kernel panic - not syncing: Fatal exception in interrupt

原因と対策

原因対策
ハードウェア障害`dmesg
メモリの不具合memtest86+ を実行してメモリチェック
カーネルアップデート後の不具合grub で前のカーネルに戻す (grub menu から起動)
不正なカーネルパラメータcat /proc/cmdline で起動オプションを確認
新人エンジニア
新人エンジニア

Kernel Panic が発生してサーバーが止まりました。原因を調べるにはどうすればいいですか?

先輩エンジニア
先輩エンジニア

dmesg -T | grep -i panic で直前のエラーを確認しよう。メモリ関連なら memtest86+ でチェック、それでもダメなら grub から前のカーネルを試してみるといい。

まとめ

  • 「buffer I/O error」 はディスクの読み書きエラー。smartctlfsck でチェック
  • 「failed to mount root fs」 はルートファイルシステムのマウント失敗。fsckfstab の確認が必要
  • 「Out of memory: Killed process」 はメモリ不足。top でプロセス確認やスワップ増設が有効
  • 「Kernel panic」 はカーネルの致命的エラー。dmesg | grep panic で原因を特定

dmesgコマンドを使いこなすためのTIPS

dmesgの出力は大量のテキスト情報を含むため、色分けすると重要なメッセージを素早く識別しやすくなります。Linuxでは cczekmsg などのツールを使うことで、dmesgの出力をカラー表示できます。

  1. cczeを使ってカラフルな出力にする
  2. dmesgをリアルタイムで監視する方法
  3. cronジョブを使った定期的なログ記録と解析
dmesgnのテクニック

リアルタイム監視

dmesg -w を実行すると、新しいログがリアルタイムで表示されます。デバイスの接続状態をすぐに確認できます。

定期的なログ記録

crontabを使って定期的にdmesgログを保存できます。0 * * * * dmesg > /var/log/dmesg.log のように設定します。

自動エラー検出

スクリプトを作成して特定のエラーを検出し、メール通知することができます。システム監視に役立ちます。
dmesgnのテクニック
スポンサーリンク

cczeを使ってカラフルな出力にする

dmesg | ccze -A
新人エンジニア
新人エンジニア

dmesgのログって見づらいですよね。エラーメッセージだけ目立たせる方法はありますか?

先輩エンジニア
先輩エンジニア

ccze を使うとログを色分けできて、エラーや警告が視覚的に分かりやすくなるよ。まず sudo apt install ccze でインストールしてみよう。

dmesgの出力をカラフルに表示する方法

ccze を使うとdmesgの出力を色分けできます。エラーや警告が視覚的に分かりやすくなります。インストールは sudo apt install ccze で、使用方法は dmesg | ccze -A です。
dmesgの出力をカラフルに表示する方法
スポンサーリンク

dmesgをリアルタイムで監視する方法

システムの状態をリアルタイムで監視するには、dmesg -w を使うのが有効です。新しいログが発生するたびに自動的に表示されるため、システムの異常を即座に検知できます。

dmesg -w
新人エンジニア
新人エンジニア

USBデバイスを抜き差しした時に、すぐにログを確認する方法ってありますか?

先輩エンジニア
先輩エンジニア

dmesg -w を実行しておくと、リアルタイムで新しいログが表示されるよ。USBを接続した瞬間に出力されるログを見て、認識されているか確認できるね。

cronジョブを使った定期的なログ記録と解析

dmesgのログを定期的に記録し、異常を自動検出するには cron を使ってログを保存し、特定のエラーを監視するのが有効です。

dmesgログを定期的に保存

crontab -e

以下の行を追加(毎時 dmesg のログを保存)

0 * * * * dmesg > /var/log/dmesg.log

特定のエラーを検出するスクリプト

例えば、「I/Oエラー」を監視してメール通知するスクリプト

#!/bin/bash
if dmesg | grep -q "I/O error"; then
  echo "I/O error detected" | mail -s "dmesg Alert" admin@example.com
fi
新人エンジニア
新人エンジニア

システムが異常を検出したら、自動で通知する方法はありますか?

先輩エンジニア
先輩エンジニア

cronジョブで dmesg のエラーログを定期的にチェックして、異常が見つかったらメールで通知するスクリプトを作るといいよ。

スポンサーリンク

dmesgを活用した特殊事例

一般的なハードウェア障害やメモリ不足のトラブルシューティングはよくありますが、Linuxシステムを運用していると、より特殊で珍しい問題にも遭遇することがあります。ここでは、実際に発生した特殊な事例と、その解決プロセスを紹介します。

  1. 幽霊デバイス?突然増殖するネットワークインターフェース
  2. なぜか特定の時間にCPU使用率100%になる怪現象
  3. USBメモリが抜けても認識されたままになる奇妙な現象
  4. まとめ

幽霊デバイス?突然増殖するネットワークインターフェース

症状

ある日、仮想環境で運用しているLinuxサーバーの ifconfig を確認すると、見覚えのない “eth1”“eth2” というネットワークインターフェースが増えていました。しかし、設定ファイル (/etc/network/interfaces) には存在しないはずのインターフェースでした。

調査開始

すぐに dmesg | grep -i eth を実行し、ネットワークデバイスの挙動を確認しました。すると、次のようなログが出力されました。

[ 8765.4321] e1000: eth1: renamed from eth0
[ 8765.4322] e1000: eth2: renamed from eth1

どうやら カーネルが勝手にインターフェースの名前を変更し続けている ようでした。

原因

  • 物理NICのMACアドレスが変わった際、udev ルールが誤って適用され、新しいデバイスとして認識された。
  • /etc/udev/rules.d/70-persistent-net.rules に古いインターフェースの設定が残っており、新たな名前が付与され続けていた。

解決策

  • ls /etc/udev/rules.d/70-persistent-net.rules を確認。
  • ルールファイルを削除し、udevadm control --reload-rules でルールを再読み込み。
  • サーバーを再起動すると、正しく eth0 のみが認識されるようになった。


「dmesg の renamed from メッセージを見逃さなかったことで、udev の誤作動に気づくことができました。ネットワークインターフェースの増殖現象に遭遇したら、まず dmesg を確認すると良いですね。」

スポンサーリンク

なぜか特定の時間にCPU使用率100%になる怪現象

症状

あるLinuxサーバーが 毎日深夜3時 になると、CPU使用率が100%になり、動作が極端に遅くなる現象が発生していました。top コマンドで確認すると、特定のプロセスが高負荷を引き起こしているわけではなく、CPU全体の負荷が急上昇していました。

調査開始

dmesg -T | grep -i "thermal" を実行し、CPUの温度に関連するログを確認したところ、次のようなメッセージが表示されました。

[Sun Mar  3 03:00:01 2024] CPU1: Core temperature above threshold, CPU throttled
[Sun Mar  3 03:00:02 2024] CPU1: Core temperature normal

このログから、CPUが過熱し、スロットリング(クロック速度を制限)されていた ことが判明しました。

原因

  • 深夜3時に RAIDの自動リビルド が実行され、それによってCPUとディスクI/Oが急激に増加。
  • CPUクーラーの冷却能力が限界に達し、温度が閾値を超えたため、カーネルがスロットリングを実施。

解決策

  • dmesg -T | grep -i "raid" でRAIDの動作ログを確認し、確かに3時にリビルドが実行されていることを特定。
  • RAIDのスケジュールを変更し、CPU負荷が少ない時間帯に変更 (/etc/cron.d/mdadm を編集)。
  • CPUクーラーの清掃とサーマルペーストの再塗布を実施。

「RAIDリビルドとCPUスロットリングの関係を dmesg で発見できました。定期的な高負荷タスクがハードウェアに与える影響を考慮するのは重要ですね。

USBメモリが抜けても認識されたままになる奇妙な現象

症状

サーバーにUSBメモリを挿入し、umount した後に取り外したにもかかわらず、lsblkdf コマンドではまだデバイスがマウントされていると表示されていました。

調査開始

dmesg | grep -i usb を実行すると、以下のようなログが表示されました。

[ 2345.678901] usb 2-1: USB disconnect, device number 5
[ 2345.678902] usb 2-1: device not properly removed, residual connection detected

このログから、USBメモリが適切に「取り外し」処理されなかった ことが分かりました。

原因

  • USBメモリが適切に sync されず、カーネルが未処理のデータを保持したままになっていた。
  • umount は実行されたが、カーネルがデバイスの「切断」を認識していなかった。

解決策

  • sync を手動で実行:bashコピーする編集するsync
  • echo 1 > /sys/block/sdb/device/delete でカーネルからデバイス情報を削除:bashコピーする編集するecho 1 > /sys/block/sdb/device/delete
  • dmesg を再確認し、正常にデバイスが削除されたことを確認:yamlコピーする編集する[ 2346.123456] usb 2-1: device removed successfully

「USBデバイスが適切に取り外されなかったときは、dmesgdevice not properly removed のメッセージを確認し、カーネル側の処理を手動で修正できることを学びました。」

まとめ

  • ネットワークインターフェースが勝手に増殖する問題dmesgrenamed from メッセージで udev の影響を特定。
  • 特定の時間にCPUがスロットリングする問題dmesg | grep -i thermal で温度異常を検知し、RAIDリビルドの影響と判明。
  • USBメモリを抜いても認識されたままの問題dmesgdevice not properly removed を確認し、手動でデバイスを削除。

dmesg はハードウェアの異常だけでなく、システム内部の動作やカーネルの挙動を可視化する強力なツール です。通常のログには記録されないような問題でも、dmesg を活用することで、原因を突き止めることができます。システムの挙動が「おかしい」と思ったら、まず dmesg を確認する習慣をつけることが、迅速な問題解決につながります。

ゴリタンが愛用しているLinuxの教科書たち
https://amzn.to/4hBQa2y
https://a.r10.to/hkpc1F

この記事も参考になるかも!
この記事を書いた人!

ゴリタン

インフラエンジニアとして、ネットワークとサーバーの運用・保守・構築・設計に幅広く携わり、
現在は大規模政府公共データの移行プロジェクトを担当。

CCNPやLPICレベル3、AWSセキュリティスペシャリストなどの資格を保有しています。

あなたにオススメの広告
スポンサーリンク
Linux教科書