ハードウェア設定を確認・管理する意味

Linuxシステムの管理では、実際にどのようなハードウェアが接続され、どう認識されているかを確認する場面が頻繁にあります。デバイスドライバが正しく読み込まれているか、周辺機器を有効化・無効化する必要がないか、といった判断のために、カーネルが提供する情報源とコマンドラインツールの使い方を理解しておく必要があります。

ブロックデバイスとキャラクタデバイス

Linuxでは、ハードウェアなどを /dev 以下のデバイスファイルとして扱います。
主なデバイスファイルには、ブロックデバイスとキャラクタデバイスがあります。

比較項目ブロックデバイスキャラクタデバイス
概要データを一定サイズのブロック単位で入出力するデバイスデータを文字(バイト)の連続した流れとして入出力するデバイス
アクセス任意の位置へアクセスできる(ランダムアクセス)原則として先頭から順に処理する(ストリームアクセス)
バッファリングカーネルのキャッシュを利用して入出力される基本的にデータを逐次入出力する
主な例HDD、SSD、USBメモリ、CD/DVDドライブ端末、キーボード、シリアルポート、/dev/null
ファイル例/dev/sda、/dev/nvme0n1/dev/tty、/dev/console
ls -l の先頭文字bc

/proc、/sys、/dev:カーネル情報を参照する3つの疑似ファイルシステム

Linuxカーネルは、システムの内部状態やハードウェア情報を、通常のファイルのように読み書きできる疑似ファイルシステムとして公開しています。

ディレクトリ役割
/proc/実行中のプロセスやカーネルの動作状況に関する情報を提供する(/proc/cpuinfo=CPU情報、/proc/meminfo=メモリ情報、/proc/modules=ロード済みカーネルモジュール一覧等)
/sys/カーネルが認識しているデバイス・ドライバの構造を、階層的なディレクトリとファイルとして表現する(sysfs)。デバイスの属性値の参照・一部設定変更にも使われる
/dev/実際のデバイスファイル(ハードウェアにアクセスするための特殊ファイル)が置かれる場所
cat /proc/cpuinfo      # CPUの情報を表示する
cat /proc/meminfo       # メモリの情報を表示する
cat /proc/modules       # ロード済みカーネルモジュールの一覧を表示する(lsmodの情報源)
ls /sys/class/net/      # ネットワークインターフェースのデバイス情報を確認する

/proc/と/sys/はいずれもディスク上の実ファイルではなく、カーネルがメモリ上の情報をその場で生成して見せているという点が重要です。

ハードウェア情報を表示するコマンド:lspci、lsusb

lspci:PCI/PCIeバスに接続されたデバイスを一覧表示する

lspciは、システムのPCI・PCIeバスに接続されているデバイス(グラフィックカード、ネットワークカード、ストレージコントローラ等)の情報を表示するコマンドです。

オプション効果
(オプション無し)検出されたPCIデバイスの簡易な一覧を表示する
-vより詳細な情報(各デバイスを制御しているカーネルドライバ等)を表示する
-vv-vよりもさらに詳細な情報を表示する
-k各デバイスを扱っているカーネルドライバと、対応可能なカーネルモジュールを表示する
-nnベンダーID・デバイスIDを、名前と数値の両方で表示する
lspci            # PCIデバイスの一覧を表示する
lspci -v         # 詳細情報(担当ドライバを含む)を表示する
lspci -nn        # ベンダーID・デバイスIDを数値付きで表示する

lsusb:USBバスに接続されたデバイスを一覧表示する

lsusbは、システムのUSBバスに接続されているデバイス(キーボード、マウス、USBメモリ等)の情報を表示するコマンドです。

オプション効果
(オプション無し)検出されたUSBデバイスの簡易な一覧を表示する
-v詳細情報(コンフィギュレーション記述子等)を表示する
-tUSBデバイスの接続構成をツリー形式(ハブとデバイスの階層関係)で表示する
-d ベンダーID:製品ID指定したベンダーID・製品ID(16進数)に一致するデバイスのみを表示する
lsusb            # USBデバイスの一覧を表示する
lsusb -t         # USBのハブ・デバイス構成をツリー表示する

カーネルモジュールを管理する:lsmod、modprobe

多くのハードウェアデバイスは、カーネルモジュール(ドライバとして動的に読み込み・取り外しできるコード)によって制御されます。

コマンド役割
lsmod現在ロードされているカーネルモジュールの一覧を表示する(/proc/modulesの内容を見やすく整形したもの)
insmod モジュールファイル指定したカーネルモジュールファイル(通常は.koファイル)をロードする。依存関係は自動的に解決されないため、通常はmodprobeの使用が推奨される
modprobe モジュール名指定したカーネルモジュールを、依存するほかのモジュールも自動的に解決した上でロードする
rmmod モジュール名指定したカーネルモジュールをアンロードする。モジュールが使用中の場合は、通常アンロードできない。依存関係は自動的に解決されない
modprobe -r モジュール名指定したカーネルモジュールを、ほかから使用されていなければアンロードする。不要になった依存モジュールも併せてアンロードする
lsmod                    # ロード済みモジュールの一覧を表示する
modprobe usb_storage     # usb_storageモジュールをロードする
modprobe -r usb_storage  # usb_storageモジュールをアンロードする

modprobeは、単体でモジュールをロードするinsmodとは異なり、モジュール間の依存関係を自動的に解決する点が特徴です。

udev・dbusの基礎とhotplug/coldplug

現代のLinuxディストリビューションでは、デバイスの検出・デバイスファイルの作成にudevという仕組みが使われています。

用語説明
udevカーネルからのデバイスイベント(デバイスの接続・切断等)を受け取り、/dev/以下にデバイスファイルを動的に作成・削除するユーザー空間のデバイスマネージャ
D-Busプロセス間通信(IPC)の仕組み。デスクトップ環境やシステムサービスが、デバイスの着脱等のイベントを互いに通知し合うために使われる
hotplug(ホットプラグ)システム稼働中にデバイスを接続・取り外しできる方式(USBメモリ等)
coldplug(コールドプラグ)システム起動時にすでに接続されているデバイスを検出する方式(起動時にudevが/sys/の内容を走査して、既存デバイス分のイベントを疑似的に発生させることで対応する)

udevのルールは、/etc/udev/rules.d/に置かれる設定ファイルでカスタマイズできます(例:特定のUSBデバイスに対して常に同じデバイス名を割り当てる等)。

大容量記憶装置の種類と統合周辺機器の有効化・無効化

出題範囲では、各種大容量記憶装置(マスストレージデバイス)の違いを理解すること、および統合された周辺機器(マザーボードに組み込まれたNIC・オーディオ・USBコントローラ等)を有効化・無効化できることも求められます。

記憶装置の種類特徴
HDD(ハードディスクドライブ)磁気ディスクを使う従来型のストレージ。大容量・低コストだが、SSDより低速
SSD(ソリッドステートドライブ)フラッシュメモリを使うストレージ。HDDより高速・耐衝撃性が高い
USBメモリ・SDカード等のリムーバブルメディア着脱可能な記憶装置。usb_storage等のカーネルモジュールで制御される
光学ドライブ(CD/DVD)光学メディアを読み書きするドライブ

統合された周辺機器の有効化・無効化は、多くの場合、OS起動前のBIOS/UEFIセットアップ画面(起動時に特定のキーを押すことで入る設定画面)で行いますパーティション設計上のBIOS/UEFIの違い(ESP等)については「ハードディスクのレイアウト設計」の技術解説記事で扱っています。本記事では、周辺機器の有効化・無効化という観点でBIOS/UEFIセットアップ画面に触れています。[1]。


補足

  1. パーティション設計上のBIOS/UEFIの違い(ESP等)については「ハードディスクのレイアウト設計」の技術解説記事で扱っています。本記事では、周辺機器の有効化・無効化という観点でBIOS/UEFIセットアップ画面に触れています。 ↩