第2章 ハードウェア設定の確認

LPIC-1 101.1 相当

サーバーやPCにどんなハードウェアが接続されているかを、コマンドラインだけで確認する方法を学びます。トラブル対応や初期セットアップで頻繁に使う知識です。

デバイス情報を確認する主なコマンド

コマンド確認できる情報
lspciPCIバスに接続されたデバイス(グラフィックカード、ネットワークカードなど)
lsusbUSBバスに接続されたデバイス
lsblkブロックデバイス(ディスク・パーティション)の一覧をツリー表示
lscpuCPUの情報(コア数、アーキテクチャなど)
free -hメモリの使用状況
dmesgカーネルが出力したメッセージ(起動時のハードウェア認識ログなど)
$ lsblk
NAME   SIZE  TYPE MOUNTPOINT
sda    100G  disk
├─sda1   1G  part /boot
└─sda2  99G  part /

/proc と /sys — カーネルが公開する情報

/proc と /sys は、実際のディスク上のファイルではなく、カーネルが動的に生成する疑似ファイルシステムです。ここを読むことで、実行中のシステムの内部状態を確認できます。

$ cat /proc/cpuinfo    # CPU情報
processor	: 0
vendor_id	: GenuineIntel
model name	: Intel(R) Core(TM) i7-9700 CPU @ 3.00GHz
cpu MHz		: 3000.000
cache size	: 12288 KB
...(processor: 1以降、論理コアの数だけ同様の情報が繰り返される)
$ cat /proc/meminfo    # メモリ情報
MemTotal:       16302184 kB
MemFree:          842916 kB
MemAvailable:   11203344 kB
Buffers:          201344 kB
Cached:          9821456 kB
SwapTotal:       2097148 kB
SwapFree:        2097148 kB
...(この後も多数の項目が続く)

この行のこの値に注目: /proc/cpuinfoは論理コアごとに1つのprocessorブロックを持つため、ブロックの数を数えれば論理コア数が分かります。/proc/meminfoのMemAvailableは、単純な空き容量(MemFree)とは異なり、キャッシュなどを解放すれば実際に新しいプロセスへ割り当てられる見込みのメモリ量を示す、より実態に近い指標です。

補足: ハードウェアが新しく接続されると、udev という仕組みがそれを検知し、/dev 以下にデバイスファイルを自動的に作成します。

ハードウェアの詳細情報を確認する

各コマンドは、オプションを付けることでより詳細な情報を取得できます。

コマンド用途
lspci -vPCIデバイスの詳細情報(使用中のカーネルモジュールなど)を表示
lspci -k各PCIデバイスに紐づくカーネルドライバ名を表示
lsusb -vUSBデバイスの詳細情報(ベンダーID・プロダクトIDなど)を表示
dmidecodeBIOS/UEFIが保持するハードウェア情報(マザーボード型番、メモリスロット構成など)を表示

カーネルモジュールの管理

デバイスドライバの多くは、必要なときにだけ読み込まれる「カーネルモジュール」として実装されています。

コマンド役割
lsmod現在読み込まれているカーネルモジュールの一覧を表示
modprobe モジュール名依存関係を解決しながらモジュールを読み込む
modprobe -r モジュール名モジュールを取り外す
lsmod | grep モジュール名特定のモジュールが読み込まれているか確認

coldplugとhotplug

ハードウェアがシステムに認識されるタイミングには2種類の考え方があります。

  • hotplug: システム稼働中に接続したデバイスを、udevがその場で検知して即座に認識する方式(USBメモリの抜き差しなど)。
  • coldplug: システム起動時にすでに接続されていたデバイスを、起動処理の一環としてまとめて認識する方式。
udevadm: udevadm info や udevadm monitor を使うと、udevが実際にどのようなデバイスイベントを検知しているかをリアルタイムで確認できます。

lspciの出力を読む

実際の lspci の出力は、先頭に「バス番号:デバイス番号.機能番号」、続けてデバイスの種類とベンダー名・製品名が並びます。

$ lspci
00:00.0 Host bridge: Intel Corporation 8th Gen Core Processor Host Bridge
00:02.0 VGA compatible controller: Intel Corporation UHD Graphics 630
02:00.0 Ethernet controller: Intel Corporation Ethernet Connection I219-V

特定のデバイスだけ調べたいときは grep と組み合わせるのが定番です。

$ lspci | grep -i ethernet     # ネットワークカードの型番を確認
02:00.0 Ethernet controller: Intel Corporation Ethernet Connection I219-V
$ lspci -k -s 02:00.0          # バス番号を指定して特定デバイスの詳細・使用ドライバを確認
02:00.0 Ethernet controller: Intel Corporation Ethernet Connection I219-V
	Subsystem: Dell Ethernet Connection I219-V
	Kernel driver in use: e1000e
	Kernel modules: e1000e

この行のこの値に注目: Kernel driver in useの行が、そのデバイスを実際に制御しているドライバ名です。ネットワークカードが認識されない・動作がおかしいといったトラブルでは、まずこの行を確認し、ドライバが正しく割り当てられているか、意図したモジュール(この例ではe1000e)になっているかを調べます。

より詳細な情報を得るためのツール

コマンド用途
lshwCPU・メモリ・ディスク・ネットワークなど、システム全体のハードウェア構成をまとめて表示(要インストールなことが多い)
hwinfolshwと同様に詳細なハードウェア情報を表示する別実装のツール
lsblk -fブロックデバイスにファイルシステムの種類やUUID、ラベルを付加して表示
inxi -Fxハードウェア情報を人間が読みやすい形にまとめて表示(デスクトップ環境でよく使われる)
$ lsblk -f
NAME   FSTYPE  LABEL  UUID                                 MOUNTPOINT
sda
├─sda1 vfat           1234-ABCD                            /boot/efi
└─sda2 ext4           5678-90ab-cdef-1234-567890abcdef      /

/procでよく見るファイルの補足

/procには他にも実務でよく参照されるファイルがあります。

パス内容
/proc/interrupts各デバイスが発生させている割り込み(IRQ)の回数
/proc/modules現在読み込まれているカーネルモジュール(lsmodの出力元)
/proc/partitions認識されているブロックデバイス・パーティションの一覧
/proc/versionカーネルのバージョン情報
よくある間違い: /procや/sysの中身は「今動いているカーネルが作り出している情報」であり、テキストエディタで編集しても再起動すれば消えます。恒久的な設定変更をしたい場合は/etc以下の設定ファイルやsysctlの設定(/etc/sysctl.confなど)を使う必要があります。

lsmod / modprobe — カーネルモジュールの管理

ハードウェアを動かすためのドライバの多くは、カーネル本体に組み込まれているのではなく、必要になったタイミングで動的に読み込まれるカーネルモジュールという形で提供されています。現在読み込まれているモジュールの一覧はlsmodで確認でき、これは前述の/proc/modulesの内容を読みやすく整形したものです。特定のモジュールを手動で読み込みたい・外したい場合は、それぞれmodprobe モジュール名・modprobe -r モジュール名を使います。新しいUSB機器を接続したのに認識しない、といったハードウェアトラブルの調査では、「対応するモジュールがそもそも読み込まれているか」をlsmod | grep 名前で確認するのが定番の初手です。

modprobeで読み込んだモジュールは、そのままでは再起動すると消えてしまいます。次回起動時にも自動で読み込ませたい場合は、モジュール名を/etc/modules(Debian系)や/etc/modules-load.d/*.confに1行ずつ記述しておきます。逆に、特定のモジュールが自動で読み込まれるのを防ぎたい場合(トラブルの原因になっているドライバを一時的に無効化したいときなど)は、/etc/modprobe.d/blacklist.confにモジュール名を記載しておくブラックリスト機能を使います。

確認クイズ

Q1. USBデバイスの一覧を確認するコマンドはどれですか?

解説: lsusb はUSBバスに接続されたデバイスの一覧を表示します。PCIデバイスの確認には lspci を使います。

Q2. ディスクとパーティションの構成をツリー形式で確認できるコマンドはどれですか?

解説: lsblk はブロックデバイス(ディスクやパーティション)をツリー形式で表示します。

Q3. 疑似ファイルシステムの/proc や /sys について正しい説明はどれですか?

解説: /proc・/sys は実ディスク上のファイルではなく、カーネルが実行中のシステム情報を公開する疑似ファイルシステムです。

Q4. 新しいハードウェアが接続された際、/dev以下にデバイスファイルを自動生成する仕組みはどれですか?

解説: udev はハードウェアの接続・切断を検知し、対応するデバイスファイルを動的に作成する仕組みです。