カーネル操作マニュアル
このページの目次
Gentoo のカーネル・モジュール・initramfs 保守を扱う。稼働中・インストール済み・次回起動予定の版は別々で、ビルド成功は起動成功を保証しない。
| やりたいこと | 参照先 |
|---|---|
| ドライバー未読込 | 版とモジュール |
| 新カーネルの導入 | ビルドから起動へ |
| 新版が起動しない | initramfs と旧版への復帰 |
| 調整と性能観測 | 稼働中の変更 |
各層の版を一致させる
稼働版・設置 file・source は別の状態
# 現在稼働中の release を読む
# 今回の起動で使った引数を読む
root=・UUID・暗号化・復旧引数を確認する。boot file を変えても現在値は変わらない。
# 設置 module tree の release を列挙する
directory があるだけで完全性・起動可能性は保証されない。
# Gentoo の source 選択を確認する
# 現 source link の実 directory を読む
device → driver → module file → log
# PCI device の使用中・候補 driver を調べる
USB は対応 sysfs・tool を使う。以下 MODULE は実 module 名へ置き換える。
# 現在 load された module を列挙する
# 現 release の module file を特定する
# module の build 互換情報を読む
一致は手掛かりの一つ。署名・symbol 版・load error も log で確認する。
# driver 検出・firmware・module error を読む
MODULE は lspci -k や sysfs で特定した実際の名前。eselect kernel はソースリンクの選択で稼働版は変わらない。組込ドライバーは lsmod に出ない。/proc/config.gz または稼働 release の /boot/config-* を確認する。
図は確認項目の並びで起動処理の実行順ではない。全項目を同じ対象 release に合わせる。
保守方式を先に選ぶ
| 方式 | 責任範囲 |
|---|---|
| gentoo-kernel / gentoo-kernel-bin | 配布設定と installkernel 統合。機器のドライバー・署名・bootloader は確認 |
| gentoo-sources + make | 自分で .config・ビルド・モジュール・initramfs・起動項目を管理 |
| genkernel | その版のオプションで自動化。dracut の引数と混ぜない |
手動 build:source directory を固定し設定を保存する
以下は gentoo-sources + make 専用。配布 kernel package は package の手順を使う。対象 hardware の source・.config を用意し、書込可能な一般 user で build する。
# この shell で対象 source directory を固定・表示する
ops_ksrc=
意図した完全な source path を確認する。同じ shell を使い、source・設定が変われば再確認する。
# 対象の設定が存在し空でないことを確認する
非ゼロなら止めて適切な設定を用意し、定制を不用意に上書きしない。
# 旧 backup も残して更新前設定を保存する
# 旧設定をこの source の選択肢へ更新する
新項目は既定値になる。旧新 diff で root device・filesystem・復旧 driver を確認する。
# 対象 hardware の設定を対話的に確認・調整する
build 成功後に対象 release を記録する
# 対象 kernel・module を build する
-j は並行数。memory が少なければ下げる。失敗を解決してから設置する。
# module tree・起動 image に使う完全な release を記録する
uname -r と同じとは限らない。回退用と同名なら suffix を変えて上書きを避ける。
確認済み .config から始める。olddefconfig の追加項目の既定値を確認する。localmodconfig は未接続機器や救援用機能を落とし得る。modules_install/make install の前に /boot・ESP のマウント、空き、旧版保持を確認する。
設置前に対象 mount を確認する
# /boot の filesystem を確認する
root filesystem が表示される場合もある。独立 /boot が必要なら想定 device かを確認する。
# 新旧 kernel を残す容量を確認する
# build 済み module を対象 release 配下へ設置する
設置結果を確認し、外部 module が全て自動処理されたと仮定しない。
# 本機の install 連携で kernel を設置する
先に installkernel・hook を確認する。initramfs・boot entry も生成される場合があるため、成果物を確認する。
# 設置した対象 release を読む・照合する
ops_release=
# 新 release の必要 module file を確認する
必要な loadable driver 名を使う。組込の場合は設定を別に確認する。
# 外部 module が対象 release に設置されたか確認する
DKMS 管理がなければ省略。別 release の installed だけでは不十分。
DKMS の installed は対象 release に対応する必要がある。必要なモジュール名・版・カーネルを指定して build/install し、make.log・署名・Secure Boot を確認する。自動 hook は導入構成に依存する。
initramfs と旧版の起動項目を確認
release を選んで image を確認・生成する
# 次回起動する完全な release を入力する
build 出力・設置済みの実値を入力する。文字列 RELEASE や現在の uname -r を新 release の代わりにしない。
# 対象版の module directory を確認する
# この ESP mount point を使う場合に device を確認する
実 ESP path に合わせる。全機が /boot/efi とは限らない。/boot・空き容量も確認する。
# 手動生成が必要で出力がない場合だけ作成する
hook で生成済みなら省略して確認する。同名 file に直ちに --force を使わない。
# image 内の driver・firmware・設定を見る
# dracut 機能 module を列挙する
-m は dracut module 一覧で kernel driver の確認とは別。boot entry の kernel・initramfs・root の対応を最後に確認する。
起動パスは機器に合わせる。新規生成では force を付けず既知の正常像を保護する。hostonly は機器と root 配置に依存し、暗号化・LVM・RAID・ドライバー・firmware を確認する。dracut の --add と --add-drivers は対象が異なり genkernel 引数とは互換でない。
| 現象 | 確認 |
|---|---|
| 新版が起動メニューにない | 配置先・ESP・実際の GRUB/systemd-boot/UKI 手順 |
| root デバイスが見つからない | UUID・initramfs・ドライバー・復号経路。必要なら一時 rd.debug |
| module format・署名の拒否 | release・vermagic・署名・起動ポリシー。不整合を force で無視しない |
再起動前に旧版を選べる状態と復旧経路を確保し、起動後に uname -r・機器・サービスを確認する。唯一の遠隔接続用ドライバーを外さない。blacklist は主に別名による自動読込に作用し、initramfs 内設定は再生成が必要。
稼働設定と性能観測
問題に応じて実行時設定を読む
# IPv4 転送状態を確認する
routing・subnet 転送の確認用で、性能対策として無条件に有効化しない。
# memory 回収方針を読む
# user ごとの watch 上限を見る
# 対象 module の対応引数を見る
説明の一覧で現在値ではない。load 済み値は /sys/module/MODULE/parameters/ を確認する。
性能採取:対象と出力を明確にする
# 単純な process で perf 計数を確認する
sleep の測定で全体負荷ではない。実 program へ置き換えるか system 範囲を選ぶ。
# 10 秒間の system 全体 call stack を採取する
-a は全体、-g は stack、-o は出力。未使用名で症状発生時に採取する。負荷・symbol・unwind の影響がある。
# 作成した採取 file を解析する
function・process・call chain を読み q で終了。sample 比率だけで根因とは断定しない。
sysctl -w は現在値だけを変更する。sysctl.d に範囲を絞って保存・読込・確認する。swappiness は0–100限定ではなく万能値もない。全体 perf には権限と負荷があり、-a なしで sleep を測っても全体のホットスポットにはならない。SysRq の即時再起動は安全な保存を保証しない。