MIRACLE

メールサービス申込 ユーザー登録&ログイン パートナー情報
お問い合わせ FAQ サイトマップ
MIRACLE LINUXの特長 製品紹介 サービス案内 購入 サポート 技術フォーラム

テクノロジー情報


Linux技術トレーニング 基本管理コース II

第1章 カーネル


Linuxにおけるカーネルとは、以下の役割を果たす、まさに「心臓部」ともいえるソフトウェアになります。
  • CPU/メモリ/ディスク/ネットワークカードなどのハードウェアの資源管理
  • Linux上で動作するアプリケーションのプロセス管理・制御
本章では、このカーネルに関連する事項について、その概要を学習していきます。
1. カーネルとカーネルモジュール
1-1. カーネル・モジュール
ドライバなどカーネルに組み込まれる機能をモジュール化したもの
  • カーネルがコンパクトになっている
  • 動作中のカーネルに組み込むことが可能
  • ドライバのアップデートにモジュール単位で対応できる
  • ハードウェア構成が変わってもカーネル再構成を必要としない

カーネルモジュール

カーネルモジュールとは、カーネルの機能を拡張するためのバイナリファイルです。

カーネルモジュールの代表的なものとしては、ディスク、ネットワークカード等をLinuxカーネルで使用可能にするためのデバイスドライバがあげられます。このデバイスドライバは、基本的には、各ハードウェアベンダから提供されるもので、これを使用することによって、Linuxカーネルは、多種多様なハードウェアに対応することが可能になっています。

初期のUNIX系OSでは、カーネルの機能を拡張する場合、デバイスドライバなどはすべてカーネルに組み込むという設計になっていました。つまり、新しいハードウェアを使うためには、カーネルの再構築(ソースからの再コンパイル)が必要でした。

しかし、現在のLinuxカーネルはモジュール形式で設計されています。起動時に最小限度の常駐カーネルだけがメモリにロードされ、必要に応じてモジュールのロード・アンロードできるようになっています。ユーザーがカーネルに存在しない機能を要求すると、ドライバ・モジュールが動的にメモリにロードされます。 このため、常に使用するわけではないデバイスのためにメモリを消費することを防ぐことができます。


1-2. カーネルバージョンとドライバ
特定のカーネル・ソースツリーより作成された、ドライバは他のカーネルでは使用できません
  • カーネルバージョンに依存した、材料(kernel-headerやライブラリバージョン)に基づいて作成されている
  • modprobeコマンドでドライバをロードするときに、/lib/modules/`uname -r`/kernel/driverを探しに行く

カーネルバージョンとドライバ

あらゆるデバイスで必要となるドライバは、カーネルに依存しています。たとえ同じ名前のドライバであっても作成された(ビルドされた)カーネルソースが変われば、まったく別物になってしまいます。そのためサードベンダーが提供するドライバファイルは、使用しているカーネルバージョンと合わない場合には、使用できません。基本的にサードベンダーのドライバを使用するためには、そのドライバ・ソースを入手し、ドライバを使用するOS上で再ビルドし、ドライバを作成することになります。

ドライバディスク

MIRACLE LINUXが提供しているドライバディスク(追加のドライバが含まれる)を適応できるカーネルは、弊社よりご購入いただいたインストールCDに含まれるカーネルに限定されます。
また、弊社サイトのアップデート情報で提供している最新版のカーネルには、それ以前のカーネルバージョン用に提供していた、ドライバーディスクに含まれるドライバ自体は、すべて含まれています。


1-3. モジュール関連コマンド
モジュール関連コマンド
  • lsmod :モジュールの一覧表示
  • modprobe :モジュールのロード(依存関係を考慮する)
  • insmod :モジュールのロード(依存関係は考慮しない)
  • rmmod :モジュールのアンロード(削除)

モジュールの確認

現在ロードさえているモジュールを確認するには、lsmodコマンドを使用します。

# lsmod
Module                  Size  Used by
i915                   81412  3
md5                     3968  1
ipv6                  232768  12
i2c_dev                11392  0
i2c_core               22400  1 i2c_dev
・Module
ロードされているカーネル・モジュール名
・Size
カーネル・モジュールのサイズ
・Used by
使用カウント数、参照しているモジュールの一覧
例えば、モジュール名「i2c_core」は、1回使用されており、また、「i2c_dev」というモジュール名から参照されているということが上記の出力結果から分かります。
モジュールのロード

モジュールのロードについては、modprobeコマンド、または、insmodコマンドを使用します。其々、以下のように使用します。

# modprobe モジュール名
# insmod モジュール名

この2つのコマンドの違いは、modprobeコマンドは、modules.depファイルを参照し、依存関係のあるモジュールがあれば、事前にロードを行います。それに対し、insmodコマンドは、指定されたモジュールのみをロードします。そのため、事前にロードする必要のある依存するモジュールが存在する場合には、エラーとなります。
また、幾つかのデバイス・ドライバ用のモジュールは、システム起動時に読み込まれる、/etc/rc.d/rc.sysinitスクリプト中でmodprobeコマンドによりロードされています。他のモジュールに関しては、カーネルモジュールローダが、ユーザが使用する際に自動的にモジュールをロードします。(ex: loopデバイス)

モジュールのアンロード

モジュールのアンロード(削除)を行うには、rmmodコマンドを使用します。-r オプションを指定することで、依存するモジュールがあった場合、それらも同時に削除されます。
ただし、モジュールを削除する際に、使用中の場合には、エラーとなり削除することはできません。

# rmmod pcmcia_core
ERROR: Module pcmcia_core is in use by yenta_socket

1-4. モジュール関連ファイル
モジュール関連ファイル
  • /etc/modprobe.conf :モジュールロード時の追加情報

/etc/modprobe.conf

殆どのモジュールについては、システム起動時、あるいは必要に応じてドライバを自動認識し、ロードします。
Linuxでは、SCSIコントローラ、RAIDコントローラの種類に関係なく/dev/sda1などのデバイス・ファイルを使用します。同様にNICの種類に関係なくeth0をネットワークインターフェース名に使用します。
そこで、/etc/modprobe.conf にて別名(alias)を定義した上で、ドライバ・モジュールをロードします。/etc/modprobe.conf ファイルは、このようなドライバの別名(alias)を指定したり、ドライバ・ロード時のオプションなどを指定する設定ファイルになります。

例) ネットワークモジュール:eth0. SCSIモジュール:scsi_hostadapter
alias eth0 e1000
alias scsi_hostadapter mptbase
alias scsi_hostadapter1 mptscsih
options e1000 Speed=1000 Duplex=2
  • alias: モジュールの別名の指定
  • options: モジュールをロードする際のオプション
※上記の設定は、e1000: eth0を1000Mbps/full-duplex固定にしています。

1-5. ドライバ関連トラブルシューティング
以下のそれぞれケースについて、例をもとにケーススタディを実施
  • インストール
  • 外部ストレージ接続
  • SAN接続

ドライバ関連のトラブルシューティング

以下に示すドライバ関連のトラブルについて、次ページ以降に、具体的な例を示し、ケーススタディを実施していきます。

  • インストール時のトラブル
  • 外部ストレージ接続時のトラブル
  • SAN接続時のトラブル
インストール
<トラブル現象>
インストール中に以下のメッセージが表示され、インストールが行えません
<原因>
インストールCD-ROMにドライバが収録されていないPERC 4/Di RAIDコントローラーを利用していました
<カーネル + ハードウェア>
ハードウェアが動作するかは、カーネルがそのハードウェアに対応するモジュール(ドライバ)を含んでいるかどうかに依存します
<解決方法>
  • ドライバディスクとアップデートディスクを利用してインストールを行います
  • Boot: linux updates dd

外部ストレージ接続
<トラブル現象>
外部ストレージをRAIDコントローラーに接続してインストールを行っているが、内蔵のディスクではなく外付けストレージがsdaになってしまう
<原因>
  • PCIカードの順番通りにSCSIコントローラを自動認識します
  • インストール時には設定を変更できないので、ハードウェアベンダー独自にLinux推奨の構成が存在する場合があります

<解決方法>
  • 外付けストレージを外してインストールを行う
  • 再起動後に/etc/modprobe.confを編集し、mkinitrdによりinitrdの再作成を行ってから、外付けストレージを接続する

【1】modprobe.conf変更前 ストレージが接続されているmegaraid(PERC3/DC) が先頭になっています
alias scsi_hostadapter megaraid
alias scsi_hostadapter1 aacraid
【2】modprobe.conf変更後 内蔵のaacraid(PERC3/Di)を先頭にします
alias scsi_hostadapter aacraid
alias scsi_hostadapter1 megaraid
【3】modprobe.confの内容をもとに、 initrdの再作成を行う
# mkinitrd ?f /boot/initrd-2.4.9-e.25.50mlsmp.img \ 2.4.9-e.25.50mlsmp
SAN接続
<トラブル現象>
Linuxのインストールと設定を行った後に、SAN環境に接続し起動すると、「kernel panic」が発生します
<原因>
  • ファイバーチャネルアダプタにSANを接続すると、ドライブのアサインが変化してしまい、内蔵ディスクのrootファイルシステム/dev/sda5が/dev/sdc5になってしまいます
  • /etc/modprobe.conf
    alias scsi_hostadapter qla23xx
    alias scsi_hostadapter1 aacraid

<解決方法>
  • /etc/modprobe.confファイルのエントリを修正
    alias scsi_hostadapter aacraid
    alias scsi_hostadapter1 qla23xx

<詳細説明>
  • SCSIホストアダプタが複数ある場合は/etc/modprobe.confのエントリ順番通りドライブを割り当てていきます
  • ドライブの名前sda,sdbなどもホストアダプタの順番通り割り当てられます
  • 今回はQlogic QLA2300アダプタにSANを接続すると、sdaだったはずの内蔵RAIDのディスクがsdcに変化してしまい、rootファイルシステムがマウントできなくなったためのエラーでした

基本管理コース I 第7章 3へ 第1章 2へ

■この資料の評価をお願いします。
とても参考になった
参考になった
どちらでもない
あまり参考にならなかった
まったく参考にならなかった

コメントがある場合は以下に記述してください。技術資料として取り上げてほしいテーマも受け付けています。

以下は任意です。

お名前(フルネーム) :
会社名 :
メールアドレス :
 

会社情報 採用情報 個人情報保護方針 情報セキュリティ基本方針 商標等取り扱い事項 English
Copyright(c)2000-2015 MIRACLE LINUX CORPORATION. All Rights Reserved.