dmesgコマンドでカーネルメッセージを確認する方法|-Tや-lの使い方とエラー対処も

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxtips > dmesgコマンドでカーネルメッセージを確認する方法|-Tや-lの使い方とエラー対処も
「dmesgで何かエラーが出ていたはずだけど、どう調べればいいか分からない」
「サーバーが突然不安定になったけど、原因の手がかりをどこから探せばいいのか」
Linuxサーバーの運用で、ハードウェアやカーネルレベルの問題を調査する場面は必ず訪れます。

この記事では、Linuxの dmesg コマンドの基本的な使い方から、-T による人間が読めるタイムスタンプ表示、-l によるログレベル指定、--follow によるリアルタイム監視、さらに journalctl -k との使い分けや、ディスク障害・OOM Killer・NIC認識の実務での調査方法まで解説します。
RHEL 9.4 / Ubuntu 24.04 LTS で動作確認済みです。

この記事のポイント

・dmesg はカーネルのリングバッファからメッセージを表示するコマンド
・dmesg -T で人間が読める日時形式のタイムスタンプを表示できる
・dmesg -l err,warn でエラーと警告だけに絞り込める
・ディスク障害やOOM Killerの原因特定に欠かせない実務ツール


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

dmesgコマンドとは?カーネルのメッセージを確認する基本コマンド

dmesg(display message)コマンドは、Linuxカーネルが出力するメッセージ(カーネルリングバッファ)を表示するコマンドです。

カーネルリングバッファには、以下のような情報が記録されています。

起動時のハードウェア認識:CPU、メモリ、ディスク、NIC(ネットワークカード)などの検出結果
デバイスドライバのロード:各デバイスドライバの初期化状況
ハードウェアエラー:ディスクI/Oエラー、メモリエラーなどの異常
カーネルの警告・エラー:OOM Killer(メモリ不足によるプロセス強制終了)の発動など

サーバーのトラブル調査では、まず /var/log/messagesjournalctl を確認しますが、ハードウェアレベルの問題を調べるには dmesg が不可欠です。dmesg はカーネルのバッファを直接読むため、syslogデーモンが起動する前のブート初期段階のメッセージも確認できます。

dmesgの基本的な使い方

1. カーネルメッセージを全て表示する

オプションなしで実行すると、カーネルリングバッファに記録されている全メッセージが表示されます。

# カーネルメッセージを全て表示する $ dmesg [ 0.000000] Linux version 5.14.0-362.24.1.el9_3.x86_64 ... [ 0.000003] BIOS-provided physical RAM map: [ 3.842156] EXT4-fs (sda1): mounted filesystem with ordered data mode. Quota mode: none. [ 4.102883] e1000: ens192 NIC Link is Up 10000 Mbps Full Duplex, Flow Control: None

出力は数百行~数千行になることが多いため、そのまま実行すると画面が一気に流れてしまいます。通常は後述のオプションやパイプと組み合わせて使います。

2. ページャ付きで表示する(-H)

-H(human readable)オプションを付けると、出力が自動的にページャ(less 相当)で表示されます。タイムスタンプも相対時間で見やすく整形されます。

# ページャ付きで見やすく表示する $ dmesg -H

スペースキーで次のページ、q で終了です。大量のメッセージを確認するときは dmesg | less よりもこちらが便利です。

3. 人間が読めるタイムスタンプで表示する(-T)

dmesg のデフォルト出力では、タイムスタンプが「起動からの経過秒数」で表示されます。

# デフォルトのタイムスタンプ(起動からの経過秒数) [ 3.141592] e1000: eth0 NIC Link is Up 1000 Mbps

これでは「いつ発生したのか」がすぐには分かりません。-T オプションを付けると、通常の日時形式で表示されます。

# 人間が読める日時形式で表示する $ dmesg -T [Tue Apr 15 08:30:00 2026] e1000: eth0 NIC Link is Up 1000 Mbps

障害対応では「何時何分に発生したか」が重要なので、dmesg -T は最も頻繁に使うオプションです。

-T のタイムスタンプはカーネルの起動時刻から逆算しているため、サーバーが長期間稼働している場合は数秒程度のズレが生じることがあります。厳密な時刻が必要な場合は journalctl -k を使ってください。

4. 末尾のメッセージだけ表示する(tail との組み合わせ)

カーネルメッセージは数千行に及ぶことがあります。直近のメッセージだけ確認したい場合は tail と組み合わせます。

# 直近20行を表示する $ dmesg -T | tail -20 [Tue Apr 15 14:22:31 2026] usb 2-1: new high-speed USB device number 3 using ehci-pci [Tue Apr 15 14:22:31 2026] usb 2-1: New USB device found, idVendor=0781, idProduct=5567 [Tue Apr 15 14:22:31 2026] usb 2-1: Product: Cruzer Blade [Tue Apr 15 14:22:31 2026] usb-storage 2-1:1.0: USB Mass Storage device detected [Tue Apr 15 14:22:32 2026] sd 6:0:0:0: [sdb] 30031872 512-byte logical blocks: (15.4 GB/14.3 GiB)

障害発生直後に「直近で何が起きたか」をすぐ確認したいときに便利です。

5. ログレベルを指定して絞り込む(-l)

dmesg の出力にはログレベル(優先度)があり、-l オプションでレベルを指定して絞り込むことができます。

# エラーと警告だけを表示する $ dmesg -T -l err,warn # エラーだけを表示する $ dmesg -T -l err [Tue Apr 15 08:30:02 2026] sd 0:0:1:0: [sdb] Medium access timeout failure. Offlining disk! # 重大なエラー(crit以上)を表示する $ dmesg -T -l emerg,alert,crit

指定できるログレベルは以下の通りです(上から優先度が高い順)。

レベル 名前 意味
0 emerg システムが使用不能な状態
1 alert 直ちに対処が必要
2 crit 致命的な状態
3 err エラー
4 warn 警告
5 notice 通常だが重要な情報
6 info 一般情報
7 debug デバッグ情報
障害対応では err 以上(0~3)を最初に確認し、必要に応じて warn(4)まで範囲を広げるのが実務的な手順です。

6. リアルタイムでカーネルメッセージを監視する(--follow)

--follow(短縮形:-w)オプションを付けると、tail -f のようにカーネルメッセージをリアルタイムで監視できます。

# カーネルメッセージをリアルタイム監視する $ dmesg --follow # 日時形式+リアルタイム監視を組み合わせる $ dmesg -Tw [Tue Apr 15 14:30:00 2026] usb 2-1: USB disconnect, device number 3 [Tue Apr 15 14:30:05 2026] usb 2-1: new high-speed USB device number 4 using ehci-pci ... # エラーと警告だけをリアルタイム監視する $ dmesg -T -l err,warn --follow

USBデバイスの接続テストやディスクの抜き差し作業など、デバイスの認識状態をリアルタイムに確認したい場面で使います。監視を終了するには Ctrl + C を押してください。

7. カーネルリングバッファをクリアする(-c / -C)

-c オプションは、バッファの内容を表示した後にクリアします。-C は表示せずにクリアだけ行います。

# 表示してからバッファをクリアする(root権限が必要) $ sudo dmesg -c # 表示せずにバッファをクリアする(root権限が必要) $ sudo dmesg -C

バッファをクリアすると、それ以前のカーネルメッセージは dmesg では確認できなくなります。本番サーバーでは、クリア前に必ずバックアップを取ってください。

# クリア前にバックアップを取る $ dmesg -T > /tmp/dmesg_backup.txt

クリアの主な用途は、デバイスの検証作業です。バッファをクリアしてからデバイスを接続すれば、そのデバイスに関するメッセージだけが表示されるため、確認が容易になります。

grepと組み合わせて特定のメッセージを検索する

dmesg の出力量は多いため、grep と組み合わせて必要な情報を絞り込むのが実務の基本です。

# ディスク関連のメッセージを検索する $ dmesg -T | grep -i "sd[a-z]" # ネットワークインターフェース関連を検索する $ dmesg -T | grep -iE "eth|ens|enp" # エラーメッセージだけを検索する $ dmesg -T | grep -i "error" # メモリ関連のメッセージを検索する $ dmesg -T | grep -i "memory\|oom" # USB関連のメッセージを検索する $ dmesg -T | grep -i "usb"

-i オプションで大文字・小文字を区別しない検索にしておくと、取りこぼしを防げます。

障害発生時は、エラーに関連しそうなキーワードをまとめて検索すると効率的です。

# エラー関連のキーワードを一括検索する $ dmesg -T | grep -iE "error|fail|fault|warn|timeout|unable|cannot" [Tue Apr 15 08:30:02 2026] sd 0:0:1:0: [sdb] Medium access timeout failure. Offlining disk! [Tue Apr 15 12:45:33 2026] EXT4-fs warning (device sda1): ext4_dx_add_entry:2085: Directory (ino: 131073) index full

journalctl -k との使い分け

RHEL 7 / CentOS 7 以降のsystemd環境では、journalctl -k(または journalctl --dmesg)でもカーネルメッセージを確認できます。

# 今回の起動分のカーネルメッセージを表示する $ journalctl -k # 前回の起動分のカーネルメッセージを表示する $ journalctl -k -b -1 # 2回前の起動分のカーネルメッセージを表示する $ journalctl -k -b -2 # カーネルメッセージをリアルタイム監視する $ journalctl -k -f # エラー以上のカーネルメッセージだけを表示する $ journalctl -k -p err

dmesgjournalctl -k の違いは以下の通りです。

dmesg:カーネルリングバッファを直接参照する。バッファがいっぱいになると古いメッセージから消えていく。再起動すると全て消える
journalctl -k:systemdのジャーナルに永続化されたカーネルメッセージを参照する。設定次第で過去の起動分も確認できる(-b -1 で前回起動分、-b -2 で2回前の起動分)

systemd環境では journalctl -k の方が高機能ですが、dmesg はsystemdがない環境やレスキューモードでも使えるため、両方の使い方を覚えておくのが実務では重要です。「再起動したら直ったけど、再起動前に何が起きていたか知りたい」という場面では journalctl -k -b -1 が活きます。

実務で役立つdmesgの活用パターン

8. ディスク障害の検出(I/Oエラー)

ディスクに物理的な故障や劣化が発生すると、カーネルがI/Oエラーを記録します。

# ディスクのI/Oエラーを検索する $ dmesg -T | grep -i "I/O error\|medium error\|timeout\|offline" # 出力例(ディスク障害時) [Tue Apr 15 03:15:22 2026] sd 0:0:1:0: [sdb] tag#12 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE [Tue Apr 15 03:15:22 2026] sd 0:0:1:0: [sdb] tag#12 Sense Key : Medium Error [current] [Tue Apr 15 03:15:22 2026] sd 0:0:1:0: [sdb] tag#12 Add. Sense: Unrecovered read error [Tue Apr 15 03:15:22 2026] blk_update_request: I/O error, dev sdb, sector 1048576 op 0x0:(READ)

Medium ErrorI/O error が出力されている場合、ディスクの物理障害が疑われます。smartctl -a /dev/sdb でS.M.A.R.T.情報を確認し、早急にバックアップとディスク交換を検討してください。

9. NIC(ネットワークカード)の認識確認

サーバーの初期セットアップやNICの増設時に、カーネルがネットワークインターフェースを正しく認識しているか確認できます。

# NICの認識状態を確認する $ dmesg -T | grep -i "eth\|ens\|enp\|link is\|carrier" # 出力例 [Tue Apr 15 08:30:04 2026] e1000: ens192 NIC Link is Up 10000 Mbps Full Duplex, Flow Control: None [Tue Apr 15 11:22:15 2026] e1000: ens192 NIC Link is Down [Tue Apr 15 11:22:20 2026] e1000: ens192 NIC Link is Up 10000 Mbps Full Duplex, Flow Control: None

「Link is Up」が表示されていれば物理的な接続は正常です。「Link is Down」から「Link is Up」が短時間で繰り返されている場合は、LANケーブルの接触不良やスイッチ側のポート障害を疑ってください。

10. OOM Killer(メモリ不足によるプロセス強制終了)の検出

サーバーのメモリが不足すると、カーネルのOOM Killer(Out of Memory Killer)が自動的にプロセスを強制終了します。「プロセスが勝手に落ちた」という現象の原因がOOM Killerであるケースは非常に多いです。

# OOM Killerの発動を検索する $ dmesg -T | grep -i "oom\|out of memory\|killed process" # 出力例 [Mon Apr 14 22:45:10 2026] httpd invoked oom-killer: gfp_mask=0x6200ca(GFP_HIGHUSER_MOVABLE), order=0, oom_score_adj=0 [Mon Apr 14 22:45:10 2026] Out of memory: Killed process 15234 (mysqld) total-vm:4521680kB, anon-rss:3845920kB

この例では、httpd がメモリを要求したタイミングで mysqld(MySQL)が強制終了されています。OOM Killerが発動した場合は、free -h でメモリ状況を確認し、メモリの増設やスワップの追加、メモリを大量消費しているプロセスの設定見直し(Apacheの MaxRequestWorkers など)を検討してください。

11. USBデバイスの認識確認

USBメモリやUSBシリアルデバイスを接続した際に、カーネルが正しく認識しているか確認できます。

# バッファをクリアしてからUSBデバイスを接続する $ sudo dmesg -C # USBデバイスを接続した後に確認する $ dmesg -T # 出力例 [Tue Apr 15 11:00:01 2026] usb 1-1: new high-speed USB device number 3 using xhci_hcd [Tue Apr 15 11:00:01 2026] usb-storage 1-1:1.0: USB Mass Storage device detected [Tue Apr 15 11:00:02 2026] sd 2:0:0:0: [sdb] 15633408 512-byte logical blocks

デバイス名(この例では sdb)が表示されるので、mount コマンドでマウントする際の指定先が分かります。

「dmesg: read kernel buffer failed: Operation not permitted」の対処法

一般ユーザーで dmesg を実行すると、以下のエラーが表示されることがあります。

$ dmesg dmesg: read kernel buffer failed: Operation not permitted

これは、カーネルパラメータ kernel.dmesg_restrict1 に設定されているためです。セキュリティ上の理由から、カーネルメッセージの閲覧がroot権限に制限されています。

# 現在の設定を確認する $ sysctl kernel.dmesg_restrict kernel.dmesg_restrict = 1

対処法1:sudoで実行する(推奨)

最もシンプルな方法です。

$ sudo dmesg -T

対処法2:カーネルパラメータを変更する(一時的)

一時的に一般ユーザーでもdmesgを閲覧可能にする場合は、以下のコマンドを実行します。

# 一時的に制限を解除する(再起動で元に戻る) $ sudo sysctl -w kernel.dmesg_restrict=0

対処法3:カーネルパラメータを永続化する

恒久的に設定する場合は、/etc/sysctl.conf または /etc/sysctl.d/ 配下に設定ファイルを作成します。

# /etc/sysctl.d/99-dmesg.conf に設定を追加する $ echo "kernel.dmesg_restrict = 0" | sudo tee /etc/sysctl.d/99-dmesg.conf # 設定を即時反映する $ sudo sysctl -p /etc/sysctl.d/99-dmesg.conf

ただし、セキュリティポリシーが厳しい本番環境では、制限を解除せず sudo で実行するのが推奨です。カーネルメッセージにはハードウェア構成やメモリレイアウトなど、攻撃者に悪用されうる情報が含まれているためです。

本記事のまとめ

dmesg コマンドは、カーネルが検知したハードウェアの異常や起動時の問題を確認するための基本ツールです。障害対応の第一歩として「まず dmesg -T -l err,warn を確認する」を習慣にしてください。

やりたいこと コマンド
カーネルメッセージを全て表示する dmesg
ページャ付きで見やすく表示する dmesg -H
人間が読める日時形式で表示する dmesg -T
直近のメッセージだけ表示する dmesg -T | tail -20
エラーと警告だけを表示する dmesg -T -l err,warn
リアルタイムで監視する dmesg -Tw
エラーキーワードを一括検索する dmesg -T | grep -iE "error|fail|timeout"
ディスクのI/Oエラーを検索する dmesg -T | grep -i "I/O error"
OOM Killerの発動を検索する dmesg -T | grep -i "oom"
NICのリンク状態を確認する dmesg -T | grep -i "link is"
カーネルリングバッファをクリアする sudo dmesg -C
過去の起動分のカーネルメッセージを確認する journalctl -k -b -1
ディスク障害、メモリ不足、NIC異常のいずれも、dmesg が最初にシグナルを出します。ログファイルに記録される前の「カーネルの声」を直接聞けるのが、dmesg の最大の強みです。

関連記事:
Linuxのログファイルの種類と確認方法|/var/log配下の一覧とjournalctlの使い方
iostatコマンドでディスクI/Oを確認する方法|%utilとawaitの読み方と高負荷時の対処も

dmesgの出力から、障害の原因を正確に読み取れますか?

dmesgはサーバー障害の調査で欠かせないコマンドですが、出力されるメッセージの意味を正しく理解するには、カーネルやハードウェアの基礎知識が必要です。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。

「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として15年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。