LPIC-2 試験勉強メモ その 1

LPIC-2 試験勉強メモ その 1
目次

キャパシティプランニング

システム拡張や改変時に求められる能力を計画する。 それにより将来のリソース需要予測や現状システムで発生する問題解明を行う。

システムキャパシティとして次のような項目を調査する。

  • CPU
  • メモリ
  • ストレージ
  • ネットワーク

考慮する項目の例

  • 同時接続ユーザー数
  • コンテンツ種類
  • プログラミング言語

キャパシティプランニングツール

ツール名説明
Nagiosネットワーク女のホスト状態を監視するソフトウェア。ブラウザでグラフィカルに表示可能
MRTGMulti Router Traffic Graphier。ネットワーク機器のトラフィックを監視し、そのグラフ画像を生成するソフトウェア。画像は Web サーバー経由でブラウザ表示可能
Cactiネットワーク上ホストのトラフィックやシステム統計情報を収集するソフトウェア。RRD (Round Robin Database) 形式のデータを介してブラウザにグラフ表示できる

vmstat コマンド

プロセスの状態やメモリの使用状況など、システムリソースの利用状況を表示する。

vmstat [オプション] [実行間隔 (秒数)] [実行回数]
フィールド項目説明
procsr (runnable)待ち状態となっている実行可能プロセス数
procsb (blocked)割り込みできないスリープ状態となっているプロセス数
memoryswpd使用されているスワップの量
memoryfree未使用のメモリの量
memorybuff使用されているバッファの量
memorycache使用されているキャッシュの量
swapsi (swap in)スワップからメモリに読み込まれた 1 秒間の平均量
swapso (swap out)メモリからスワップに書き出された 1 秒間の平均量
iobi (block in)デバイスから読み込まれたブロックの 1 秒間の平均量
iobo (block out)デバイスに書き出されたブロックの 1 秒間の平均量
systemin (interrupt)1 秒あたりの割り込み回数
systemcs (context switch)1 秒あたりのコンテキストスイッチの回数
cpuus (user)ユーザー時間の割合
cpusy (system)カーネル時間の割合
cpuid (idle)アイドル時間の割合
cpuwa (wait)I/O 待ち時間の割合
cpust (stolen)仮想マシンに与えた時間の割合

top コマンド

CPU 使用率の高い順に表示する。

  • -d 秒数:更新の間隔を秒単位で指定
  • -n 数値:表示の回数を数値で指定
1 行目: top: 稼働時間や負荷平均を表示
フィールド表示例
現在時刻11:51:16
稼働時間up 7 days, 1:21
ログインユーザー数17 users
負荷平均 (過去 1 分、5 分、15 分)load average: 0.11, 0.39, 0.54
2 行目: Tasks: タスクの状態を表示
フィールド表示例
タスクの総数297 total
ランあるいはラン可能なタスク数1 runnning
スリープしているタスク数296 sleeping
ストップしているタスク数0 stopped
ゾンビタスク数0 zombie
3 行目: Cpu (s): CPU の稼働状況を使用時間の割合 (%) で表示
フィールド表示例
ユーザーモードの時間4.5%us
システムモードの時間2.8%sy
nice 値による程優先度ユーザーモードの時間0.0%ni
アイドル時間92.5%id
I/O 終了待ちの時間0.0%wa
ハードウェア割り込みの処理時間0.2%hi
ソフトウェア割り込みの処理時間0.0%si
仮想マシンに与えた時間0.0%st
4 行目: Mem: メモリの使用状況を表示
フィールド表示例
メモリの総量3877436k total
使用されているメモリのサイズ2992688k used
未使用のメモリのサイズ884748 free
使用されているバッファのサイズ65208k buffers
5 行目: Swap: スワップとキャッシュの使用状況を表示
フィールド表示例
スワップ領域の総量6143992k total
使用されているスワップ領域のサイズ356204k used
未使用のスワップ領域のサイズ5787788k free
キャ種として使用されているメモリのサイズ869332k cached
設定

設定ファイルは ~/.toprc で定義可能。 デフォルトは次の通り。

  • インターバル: 3 秒
  • プロセスの表示順: CPU 使用率の高い順
  • 表示プロセス数: フルスクリーン

htop コマンド

top コマンドと同様に実行中プロセスを各インターバルで CPU 使用率の高い順に表示する ncurses ベースのツール。

iotop コマンド

スレッドやプロセスをディスク I/O やスワップに要した時間比率の高い順に表示する。

uptime コマンド

システムの稼働時間や負荷平均を表示する。 負荷平均はラン可能待ち行列プロセスの平均個数を表す。

フィールド表示例
現在時刻16:22:58
稼働時間up 3:15
ログインユーザー数1 user
負荷平均 (過去 1 分、5 分、15 分)load average: 0.12, 0.05, 0.01

sysstat パッケージ

sysstat パッケージはパフォーマンスモニターのためのコマンドを含んだパッケージである。 Sebastien Godard が開発したもので、Linux ディストリビューションによって内容が異なる。

コマンド説明
cifsiostatCIFS ファイルシステムの I/O 統計情報を表示
io statCPU の使用状況と I/O 統計情報を表示
mpstat全 CPU と CPU 個々の使用状況を表示
pidstatタスクの統計情報を表示
sadfsar で収集したデータの表示
sarシステムアクティビティの収集と表示

sar コマンド

システムアクティビティの統計情報を収集、格納、表示する。

sar [オプション] [インターバル (秒)] [回数]
sar [インターバル (秒)] [回数] [オプション]
  • -o [ファイル名]: 格納するデータファイルの指定。バイナリデータで格納される。指定ない場合は /var/log/sa/saDD
  • -f [ファイル名]: 表示するデータファイルの指定。指定ない場合は /var/log/sa/saDD
  • -P {CPU 番号 | ALL}: プロセッサごとの統計情報の表示。ALL の場合はすべてのプロセッサ情報を表示
  • -r: メモリの使用状況を表示
  • -d: ブロックデバイスの統計情報を表示
  • -n {キーワード | ALL}: キーワードで指定したネットワークの統計情報を表示。主な気ワードは DEV、SOCK、IP、TCP、UDP
  • -b: I/O と転送レートの統計情報を表示
  • -A すべての統計情報を表示
メモリの使用状況 (-r)
フィールド表示例
kbmemfree未使用のメモリサイズ (KB)
kbmemused使用中のメモリサイズ (KB)
%memused使用中のメモリのパーセンテージ
ブロックデバイスの統計情報 (-d)
フィールド表示例
DEVブロックデバイスの番号。dev[メジャー番号]-[マイナー番号]
tps1 秒間の転送回数
rd_sec/s1 秒間の読み込みセクタ数
wr_sec/s1 秒間の書き込みセクタ数
ネットワークデバイスの統計情報 (-n)
フィールド表示例
IFACEネットワークインターフェイス名
rxpck/s1 秒あたりの受信パケット数
txpck/s1 秒あたりの送信パケット数
rxkB/s1 秒あたりの受信キロバイト数
txkB/s1 秒あたりの送信キロバイト数
I/O と転送レートの統計情報 (-b)
フィールド表示例
tps物理デバイスに対する毎秒あたりの全転送数 (I/O リクエスト数)
rtps物理デバイスに対する毎秒あたりの読み取りリクエスト数
wtps物理デバイスに対する毎秒あたりの書き込みリクエスト数
bread/s物理デバイスに対する毎秒あたりの読み取りデータ量 (単位は 512 バイト)
bwrtn/s物理デバイスに対する毎秒あたりの書き込みデータ量 (単位は 512 バイト)

crontab での定期実行

  • sa1: sadc コマンドを実行し、バイナリの統計データをログファイルに追記する
  • sa2: sar コマンドを実行し、バイナリデータからテキストデータを生成する

iptraf-ng コマンド

ncurses ベースの IP ネットワークモニタリングツール。 TCP/UDP などの IP パケットモニター、およびネットワークインターフェイスの統計情報を表示する。 実行には root 権限が必要となる。

Linux カーネル

Linux 概要

Linux カーネルは Linux Torvalds 氏が開発し、1991 年に 0.01 版を公開した。 現在は多くのプログラマが開発に参加し、総人数は 13,500 人を超えている。

公式カーネル (vanilla kernel, mainline kernel) は公式サイトの https://www.kernel.org/ からダウンロードできる。 カーネルソースは Git 上で公開され開発されている。

各ディストリビューションはほとんどの場合公式のカーネルソースをもとにカスタマイズされている。 各ディストリビューションのソースはその開発元のサイトやミラーサイトで公開される。

カーネルは起動時にメモリへロードされ、そのあとはメモリに常駐して CPU やメモリなどのデバイスの制御、プロセススケジューリングなどを行う。 カーネルの基本機能を提供するカーネル本体、コンパイル時に本体にせい的リンクされるカーネルモジュールと、本体にリンクされず必要な時に動的に読み込まれるカーネルローダブルモジュールに分かれる。

カーネルバージョン表記

3.X 以降、バージョン番号は 3 桁となっている。 2 桁目の番号が 20 を超えることを好まないので、その次はメジャーバージョンの更新となっている。 カーネルソースは gzip と xz 形式で提供される。

リリースカテゴリ説明
prepatchRC (Release Candidates) とも呼ばれる開発版
mainlineすべての機能を含み 2~3 ヶ月感覚でリリースされる
stablemainline リリースをベースにした安定板
longtermLTS (Long Term Support) とも呼ばれる長期メンテナンス版は約 2 年間メンテナンスされる

カーネルソースのディレクトリ

カーネルソースは /usr/src/linux 配下にあり、次のような項目が配置されている。

サブディレクトリ説明
DocumentationLinux カーネルソースの関連の技術文書
archアーキテクチャ遺存のソースコード
driversデバイスドライバー
fsファイルシステムモジュール
includeヘッダファイル
initカーネル初期化関連のソースコード
ipcプロセス間通信関連のソースコード
kernelカーネル本体 (core) のソースコード
libカーネルのライブラリ
mmメモリ関連のソースコード
netネットワークのプロトコルスタックやインターフェイスドライバー
scriptsカーネルコンフィグレーションで使用されるスクリプト
soundサウンドドライバー

カーネルコンフィグレーション

カーネルのソースコードからカーネルのバイナリを生成することをカーネルコンフィグレーションという。 カーネル本体とカーネルローダブルモジュールからなるソースをコンパイルしてバイナリを生成する。

  1. make mrproper: 以前のカーネルコンフィグレーションで生成されたファイルを削除して初期状態に戻す
  2. make menuconfig: 新しいカーネルの構成を記述したコンフィグレーションファイルを生成する
  3. make: コンフィグレーションファイルに従い、カーネルとカーネルローダブルモジュールを生成する
  4. make modules_install: カーネルモジュールを /lib/modules の下にインストールする
  5. make install: カーネルを /boot の下にインストールする

生成されたカーネルはカーネルソースのルート配下にある arch/x86/boot/bzImage である。 bzImage は vmlinux を展開し初期化する Setup と gzip で圧縮された自己解凍型のカーネル vmlinux である System の 2 つが連結されたファイルである。

コンフィグレーションファイル生成のためのターゲット

コマンド説明
make config設定項目 1 つ 1 つについて、順番に対話的に尋ねる形式
make menuconfigcurses ベースのターミナル上でメニュー形式インターフェイスを提供
make xconfigQt ベースの GUI ツール
make gconfigGtk ベースの GUI ツール
make oldconfig既存のコンフィグレーションファイルをデフォルトとして、新しい定義項目がある場合は設定を追加
make defconfigarch/$ARCH/defconfing をデフォルトとして、コンフィグレーションファイルを生成

curses ベースのコンフィグレーションファイル生成ツールを起動する。

既存のコンフィグレーションファイルを用いてカーネルを生成

  1. make clean: 以前のカーネルコンフィグレーションで生成されたファイルのうちカーネルコンフィグレーション以外を削除する
  2. make oldconfig
  3. make
  4. make modules_install
  5. make install

DMKS (Dynamic Kernel Module Support)

特定のカーネルモジュールをソースからビルドするためのユーティリティである。 カーネルアップグレード時、新カーネルように自動的にモジュールをビルド、インストールする。 ビルドのためにはモジュールのソースとカーネルのソース (Makefile, ヘッダファイルを含むモジュールビルド用パッケージ) が必要となる。

DMKS のインストール手順

  1. カーネルソースコード、あるいはモジュールビルドようパッケージをインストール
  2. dmks パッケージをインストール
  3. モジュールのソースを /usr/src/<モジュール名>-<バージョン> ディレクトリ配下に配置
  4. モジュール用の dkms.conf を作成
  5. モジュールを dmks に登録
  6. モジュールをビルド
  7. モジュールをインストール

zImage/bzImage

zImage は対応できる圧縮カーネルサイズが 512 KB まで、bzImage は 512 KB 以上の圧縮カーネルにも対応可能。 zImage はカーネル 2.0 から 2.6.29 まで提供され、2.6.30 からは bzImage のみ提供されている。

patch コマンド

diff コマンドで作成した差分ファイルを読み込んでパッチを当てる。

patch [オリジナルファイル] [パッチファイル]
patch -p[数値] < [パッチファイル]

複数のファイルにパッチを当てる場合は -p オプションで除外するプレフィックスの数を指定する。

  • -R, –reverse: パッチを取り外してもとに戻す。
カーネル 2.X 系の適用方法

unified 形式で作成した差分ファイルをソースのルートディレクトリ配下にある Makefile に当てて更新する。

カーネル 3.X, 4.X 系の適用方法

xz 形式のファイルを -d オプションで解凍し、差分ファイルを当てて更新する。

patch-kernel コマンド

カーネルソースに 1 回の実行で複数のパッチを当てることができる。

patch-kernel [ソースディレクトリ [パッチディレクトリ [停止バージョン]]]
  • ソースディレクトリ: /usr/src/linux
  • パッチディレクトリ: カレントディレクトリ
  • 停止バージョン: パッチディレクトリにあるすべてのパッチを当てる

カーネルメモリないのパラメータ値変更

  • /proc/sys/kernel/<カーネルパラメータ名> に値を書き込む
  • sysctl コマンド

sysctl コマンド

sysctl kernel.<カーネルパラメータ名>
sysctl kernel.<カーネルパラメータ名>=<値>
  • -a: すべてのカーネルパラメータとその値を表示

起動時のルートファイルシステム

initramfs.img はシステムの起動時にメモリに読み込まれる小さなルートファイルシステムである。 ディスクに構築されている本来のルートファイルシステムをマウントするためにシステム起動時のみ使われる。 cpio でアーカイブされ、gzip で圧縮されている。

  • ソースコードからカーネルをインストールしたとき
  • カーネルのバイナリパッケージをインストールしたとき
  • mkinitrd を実行したとき
  • dracut コマンドを実行したとき

従来は initrd を使用していたが、次のような利点があるので initramfs が主流である。

  • ファイルシステムではないのでファイルシステムドライバーを必要としない
  • ファイルシステムではないのでブロックデバイスとしてキャッシュを使用せず、メモリを効率よく使用できる

dracut コマンド

汎用的な initramfs を生成する。 mkinitrd を改善したシェルスクリプト。 実行ログは /var/log/dracut.log に記録する。

dracut [オプション] initramfs イメージ名 [カーネルバージョン]
  • –hostonly: 原稿システムにカスタマイズされた小さな initramfs を生成する

ローダブルモジュール管理コマンド

depmod コマンド

モジュールの遺存情報を modules.dep に作成する。

depmod [-a]
  • -a: /lib/modules/<カーネルバージョン> 配下にあるすべての依存情報を作成

insmod コマンド

指定したモジュールをロードする。

insmod モジュールパス

modprobe コマンド

指定したモジュールをロードする。

modprobe [-r] モジュール名
  • -r: アンロードする

modinfo コマンド

モジュール情報を表示する。

modinfo [オプション] モジュール名
  • -a, –author: 作者の表示
  • -d, –description: 説明の表示
  • -l, –license: ライセンスの表示
  • -n, –filename: ファイル名を絶対パスで表示

rmmod コマンド

モジュールをアンロードする。

rmmod モジュール名

modules.dep の書式

モジュールのパス:このモジュールが依存するモジュールのパス