変更要約: 初版(主題2.01・副主題2.01.1〜2.01.5に対応)
1.5カーネル実行時の管理とトラブルシューティング
稼働中カーネルのモジュール管理と障害解析を学びます。モジュール操作(depmod・modinfo・modprobe・insmod・lsmod・rmmod)と設定 /etc/modprobe.d/、uname によるバージョン確認、procfs(/proc・/proc/sys/kernel/)と sysctl(/etc/sysctl.conf・/etc/sysctl.d/)によるカーネルパラメータ調整、sysfs(/sys)、ハードウェア確認(dmesg・lspci・lsdev・lsusb・journalctl)、udev ルールと udevadm monitor、kdump/kexec によるクラッシュダンプを押さえます。
「新しいハードウェアを認識しない」「カーネルパラメータを変えたい」「原因不明のクラッシュを解析したい」— これらはすべて稼働中のカーネルとやり取りする運用スキルです。201 試験の締めくくりとして、モジュール・procfs/sysfs・udev・クラッシュダンプという4つの実務ツール群を押さえます。
1.5.1カーネルモジュールの操作
- 確認系=lsmod(ロード済みモジュール一覧・
/proc/modulesの整形表示)・modinfo(モジュールの詳細情報・パラメータ・依存関係を表示)・uname -r(現在のカーネルバージョン確認)。 - ロード系=modprobe(依存モジュールも解決してロード。
/lib/modules/<kver>/modules.depを参照)/insmod(単一モジュールを依存解決なしで直接ロード)。アンロードは rmmod(modprobe -rでも可)。 - depmod=modules.dep を再生成するコマンド(新しいモジュールを追加した後などに実行)。/etc/modprobe.d/=特定モジュールのロード時オプションやエイリアス、ブラックリスト設定を置くディレクトリ。
1.5.2procfs/sysctl/sysfsとハードウェア・障害解析
- /proc(procfs)=カーネルの内部状態をファイルとして参照する仮想ファイルシステム。
/proc/sys/kernel/配下は書き込み可能なパラメータで、sysctl コマンドや/etc/sysctl.conf//etc/sysctl.d/の設定ファイルで恒久化する。 - /sys(sysfs)=デバイスとドライバの階層構造をファイルとして公開する仮想ファイルシステム。procfs がカーネル一般の状態、sysfs がデバイスモデル中心という役割分担。
- ハードウェア・障害の確認=dmesg(カーネルリングバッファ=起動時含むカーネルメッセージ)・lspci(PCIデバイス一覧)・lsusb(USBデバイス一覧)・lsdev(デバイスのリソース使用状況)・journalctl(systemd ジャーナル。dmesg 相当の情報も統合的に検索可能)。
- udev=デバイスの抜き差しに応じて
/devエントリを動的に作成・管理する仕組み。ルールは/etc/udev/に置き、udevadm monitor でイベントをリアルタイム観察できる。深刻なクラッシュの解析には kdump(クラッシュ時にダンプを採取)と kexec(再起動を経ずに別カーネルへ切り替え、kdump のダンプ採取専用カーネル起動にも使われる)を使う。
「依存解決あり=modprobe・なし=insmod」「一時変更=sysctl・恒久化=/etc/sysctl.conf,d/」「procfsはカーネル全般・sysfsはデバイスモデル中心」「イベント監視=udevadm monitor」 の対比が最頻出です。「モジュールを追加した後に modules.dep を再生成するのは depmod」という一手も、コンパイル節(2.01.4)と合わせて必ず押さえてください。
典型的なトラブルシューティングの流れを追いましょう。新しいストレージコントローラを増設したのに認識されない場合、まず lspci でデバイス自体が見えているかを確認し、dmesg を末尾から見てドライバのロードエラーが出ていないか探ります。対応モジュールが分かれば modprobe <module> で依存関係ごとロードし、lsmod でロード済みか、modinfo <module> でパラメータや説明を確認します。モジュールを手動追加した直後で modprobe が「見つからない」と言う場合は depmod -a で modules.dep を再生成してから再試行します。特定デバイスで自動ロードさせたくないモジュールがあれば /etc/modprobe.d/blacklist.conf にブラックリスト設定を書きます。カーネルパラメータの調整、たとえば IP フォワーディングを一時的に試すなら sysctl -w net.ipv4.ip_forward=1(実体は /proc/sys/net/ipv4/ip_forward への書き込み)、再起動後も有効にしたいなら /etc/sysctl.d/99-forward.conf に設定を書いて sysctl --system で反映します。USB デバイスを挿しても /dev に現れない場合は udevadm monitor でイベントが飛んでいるか確認し、ルール(/etc/udev/rules.d/)の記述ミスを疑います。原因不明のカーネルパニックが頻発するなら、事前に kdump を設定しておくことで、クラッシュ時に kexec 経由でダンプ採取用の軽量カーネルへ切り替わり、メモリダンプが採取され、事後解析が可能になります。
| 目的 | コマンド/場所 | 備考 |
|---|---|---|
| 依存解決してロード | modprobe | insmodは依存解決なし |
| modules.depの再生成 | depmod -a | モジュール追加直後に実行 |
| パラメータの一時変更/恒久化 | sysctl -w / /etc/sysctl.d/ | 実体は/proc/sys/配下 |
| デバイスイベントの監視 | udevadm monitor | ルールは/etc/udev/ |
ひっかけ: 「insmod は依存モジュールも自動解決してロードする」は誤りです。依存解決するのは modprobeで、insmod は単一モジュールを直接ロードするだけです(依存先が未ロードだと失敗します)。また「sysctl -w での変更は再起動後も有効である」も誤り=sysctl -w は実行時のみ有効で、恒久化には /etc/sysctl.conf や /etc/sysctl.d/ への記載が必要です。
1.5.3この節のまとめ
- モジュール=modprobe(依存解決)/insmod(直接)/rmmod。追加後はdepmodでmodules.dep再生成
- パラメータ=procfs(/proc/sys)をsysctlで調整(恒久化は/etc/sysctl.d/)。デバイスはsysfs/udev、クラッシュ解析はkdump/kexec
進捗の記録にはログインが必要です。
理解度チェック
(軽い確認用)Q1. 新しいモジュールファイルを /lib/modules/<kver>/ 配下に手動で追加した直後、modprobe がそのモジュールを見つけられずロードに失敗した。まず実行すべきコマンドはどれ?
Q2. IPフォワーディングを再起動後も有効な状態にしたい。適切な手順はどれ?
Q3. USBデバイスを接続しても /dev にエントリが作られない。デバイスイベントが実際にカーネルから発行されているかを確認する最も直接的な方法はどれ?

