🌟

LPIC101 デバイス情報、起動停止について

2023/10/26に公開

はじめに

こんにちは!AWS大好き学生みゃっちーです🦔
AWSばっかり触ってオンプレの知識が乏しい…ということでLPIC試験に挑戦することにしました!
今回はデバイス関係のアウトプットです。

検証環境

AWS EC2 Amazon linux

デバイス情報

デバイスファイルは/devにある。

Linuxカーネルが認識しているデバイス情報は/procディレクトリにある。

各ファイルの詳細※ChatGPT情報

acpi: ACPI (Advanced Configuration and Power Interface) に関する情報を提供するディレクトリ。
buddyinfo: ページフレームのフリーリスト情報を表示します。
bus: システムのバスに関する情報を提供するディレクトリ。
cgroups: コントロールグループ (cgroups) の情報を提供するディレクトリ。
cmdline: カーネルコマンドライン引数を含むファイル。
consoles: システムコンソールに関連する情報を提供するディレクトリ。
cpuinfo: CPUに関する情報を提供するファイル。
crypto: 暗号化関連の情報を提供するディレクトリ。
devices: デバイス情報を提供するファイル。
diskstats: ディスクの統計情報を提供するファイル。
dma: DMA (Direct Memory Access) に関する情報を提供するディレクトリ。
driver: カーネルモジュールに関連する情報を提供するディレクトリ。
dynamic_debug: 動的デバッグトレーシングに関する情報を提供するディレクトリ。
execdomains: 実行ドメインに関する情報を提供するファイル。
filesystems: サポートされているファイルシステムの一覧を提供するファイル。
fs: ファイルシステムに関連する情報を提供するディレクトリ。
interrupts: 割り込みに関する情報を提供するファイル。
ioports: I/O ポートに関する情報を提供するファイル。
irq: 割り込みリクエスト (IRQ) の情報を提供するディレクトリ。
kallsyms: カーネルのシンボルテーブルに関する情報を提供するファイル。
kcore: カーネルのメモリダンプを提供するファイル。
key-users: システムキーに関連する情報を提供するファイル。
kmsg: カーネルメッセージログに関する情報を提供するファイル。
kpagecgroup: ページコントロールグループに関する情報を提供するファイル。
kpagecount: ページカウントに関する情報を提供するファイル。
kpageflags: ページフラグに関する情報を提供するファイル。
latency_stats: システムのレイテンシ統計情報を提供するファイル。
locks: ロックに関する情報を提供するファイル。
loadavg: システムの負荷平均情報を提供するファイル。
mdstat: ソフトウェアRAIDデバイスに関する情報を提供するファイル。
meminfo: メモリに関する情報を提供するファイル。
misc: その他のシステム情報を提供するディレクトリ。
modules: カーネルモジュールに関する情報を提供するディレクトリ。
mounts: マウントされているファイルシステムに関する情報を提供するファイル。
mtrr: メモリタイプ範囲レジスタに関する情報を提供するファイル。
net: ネットワークに関する情報を提供するディレクトリ。
pagetypeinfo: ページタイプに関する情報を提供するファイル。
partitions: ディスクパーティションに関する情報を提供するファイル。
pressure: メモリ圧力に関する情報を提供するファイル。
schedstat: スケジューリング統計情報を提供するファイル。
slabinfo: スラブアロケータに関する情報を提供するファイル。
stat: システムの統計情報を提供するファイル。
swaps: スワップに関する情報を提供するファイル。
sys: システムに関連する情報を提供するディレクトリ。
sysrq-trigger: システムのSysRqトリガーを制御するファイル。
sysvipc: System V IPC (Inter-Process Communication) オブジェクトに関する情報を提供するディレクトリ。
thread-self: カーネルスレッドに関する情報を提供するファイル。
timer_list: タイマーに関する情報を提供するファイル。
uptime: システムの稼働時間に関する情報を提供するファイル。
version: カーネルバージョン情報を提供するファイル。
vmallocinfo: VMALLOC (仮想メモリアロケーション) に関する情報を提供するファイル。
vmstat: VM (バーチャルメモリ) の統計情報を提供するファイル。
xen: Xenハイパーバイザーに関連する情報を提供するディレクトリ。
zoneinfo: ゾーン情報を提供するファイル。

デバイスの情報を取得する

lspciコマンドを使う。
EC2インスタンスでlspciコマンドを使用するとこのようなデバイス情報を取得できました
-vを使うと詳細情報、-vvを使うとさらに詳細な情報が表示されるとのことですが具体的な表示内容の違いはコントロールおよびステータス情報、I/Oポート、メモリ領域、割り込み情報、およびドライバ情報が記載されるか否かになります。

デバイス情報 -v

Host bridge (ホスト ブリッジ):

メーカー: Intel Corporation
モデル: 440FX - 82441FX PMC [Natoma]
リビジョン: 02
サブシステム: Red Hat, Inc. Qemu virtual machine
ISA bridge (ISA ブリッジ):

メーカー: Intel Corporation
モデル: 82371SB PIIX3 ISA [Natoma/Triton II]
サブシステム: Red Hat, Inc. Qemu virtual machine
IDE interface (IDE インターフェース):

メーカー: Intel Corporation
モデル: 82371SB PIIX3 IDE [Natoma/Triton II]
プログラムIF (プログラム インターフェース): 80 [ISA Compatibility mode-only controller, supports bus mastering]
サブシステム: XenSource, Inc. Device 0001
カーネル ドライバ: ata_piix
カーネル モジュール: ata_piix
ACPI bridge (ACPI ブリッジ):

メーカー: Intel Corporation
モデル: 82371AB/EB/MB PIIX4 ACPI
リビジョン: 01
サブシステム: Red Hat, Inc. Qemu virtual machine
割り込み (IRQ): 9
VGA compatible controller (VGA 互換コントローラ):

メーカー: Cirrus Logic
モデル: GD 5446
プログラムIF: 00 [VGA controller]
サブシステム: XenSource, Inc. Device 0001
メモリ: 32MB (プリフェッチ可能な領域), 4K (非プリフェッチ可能な領域)
エクスパンション ROM: 128KB
Unassigned class (未割り当てクラス):

メーカー: XenSource, Inc.
モデル: Xen Platform Device
リビジョン: 01
サブシステム: XenSource, Inc. Xen Platform Device
割り込み (IRQ): 28

デバイス情報 -vv

Host bridge (ホスト ブリッジ):

ベンダー: Intel Corporation
モデル: 440FX - 82441FX PMC [Natoma]
リビジョン: 02
サブシステム: Red Hat, Inc. Qemu virtual machine
物理スロット: 0
コントロールおよびステータス情報が提供されています。
ISA bridge (ISA ブリッジ):

ベンダー: Intel Corporation
モデル: 82371SB PIIX3 ISA [Natoma/Triton II]
リビジョン: N/A
サブシステム: Red Hat, Inc. Qemu virtual machine
物理スロット: 1
コントロールおよびステータス情報が提供されています。
IDE interface (IDE インターフェース):

ベンダー: Intel Corporation
モデル: 82371SB PIIX3 IDE [Natoma/Triton II]
プログラムインターフェース: ISA Compatibility mode-only controller, supports bus mastering
サブシステム: XenSource, Inc. Device 0001
物理スロット: 1
コントロールおよびステータス情報が提供されています。
カーネルドライバ: ata_piix
カーネルモジュール: ata_piix
メモリ領域およびI/Oポート情報が提供されています。
Bridge (ブリッジ):

ベンダー: Intel Corporation
モデル: 82371AB/EB/MB PIIX4 ACPI
リビジョン: 01
サブシステム: Red Hat, Inc. Qemu virtual machine
物理スロット: 1
コントロールおよびステータス情報が提供されています。
割り込み情報が提供されています。
VGA compatible controller (VGA 互換コントローラ):

ベンダー: Cirrus Logic
モデル: GD 5446
プログラムインターフェース: VGA controller
サブシステム: XenSource, Inc. Device 0001
物理スロット: 2
コントロールおよびステータス情報が提供されています。
メモリ領域情報が提供されています。
Unassigned class (未割り当てクラス):

ベンダー: XenSource, Inc.
モデル: Xen Platform Device
リビジョン: 01
サブシステム: XenSource, Inc. Xen Platform Device
物理スロット: 3
コントロールおよびステータス情報が提供されています。
割り込み情報が提供されています。
I/Oポートおよびメモリ領域情報が提供されています。
カーネルドライバ: xen-platform-pci

USBデバイス

USBデバイスの情報を表示するにはlsudbコマンドを使用する。
当たり前かもしれませんが、Amazon Linuxにはコマンド自体存在せず。

udev

/devディレクトリ以下のデバイスファイルは接続された段階でudevという仕組みで自動的にデバイスファイルが作成されるようになっている。

udevの仕組みは
1.デバイスの接続をハードウェアが検知
2./sysディレクトリにデバイス情報を作成
3./sysディレクトリのデバイス情報から/devにデバイスファイルを作成

このdevディレクトリに作成されるデバイスファイルは/etc/udev/rule.dディレクトリ以下の設定ファイルを参照している。このファイルを変更することでdevディレクトリに作られるデバイスファイルの名前などを変更することもできる。

D-Bus

これらのデバイス情報をD-BUSと呼ばれるアプリケーション間通信を行うアプリケーションに伝えられてアプリケーションからデバイスを利用できるようになる。

デバイスドライバ

アプリケーションからデバイスを制御するプログラムはデバイスドライバと呼ばれる。このデバイスドライバーはカーネルに特定のデバイスを操作する機能を追加するもので追加する操作をロードと呼ぶ。

追加されているデバイスドライバーの確認

デバイスドライバーを確認するにはlsmodコマンドを使用する。

lsmod詳細

ghash_clmulni_intel: Intelプロセッサ向けのGalois/Counterモードのハードウェア加速モジュール。このモジュールは使用されていません(Used by: 0)。

nls_ascii: ASCIIエンコーディング用のモジュール。

nls_cp437: CP437エンコーディング用のモジュール。

vfat: VFATファイルシステムサポートのモジュール。

fat: FATファイルシステムサポートのモジュール。

ata_piix: PCIバス上のATAデバイス(ハードディスクドライブなど)をサポートするモジュール。

libata: Advanced Technology Attachment(ATA)デバイスのサブシステムを提供するモジュール。

aesni_intel: Intelプロセッサ向けのAES-NI(Advanced Encryption Standard New Instructions)ハードウェア加速モジュール。

crypto_simd: シンプルな暗号化演算をSIMD(Single Instruction, Multiple Data)命令セットを使用して加速するモジュール。

scsi_mod: SCSI(Small Computer System Interface)サブシステムのモジュール。

cryptd: 暗号化演算用の通用の補助モジュール。

scsi_common: SCSI関連の一般的なモジュール。

sunrpc: Sun RPC(Remote Procedure Call)サポートのモジュール。

i8042: PS/2キーボードおよびマウスコントローラ用のモジュール。

serio: シリアル入出力デバイスドライバ用のモジュール。

button: ハードウェアボタンデバイスドライバ用のモジュール。

sch_fq_codel: キューイングディスクiplineの1つで、FQ-CoDelアルゴリズムを使用するネットワークトラフィックの適切な管理を支援します。

loop: ループバックブロックデバイスをサポートするモジュール。

dm_mod: デバイスマッパーのモジュール。

fuse: FUSE(Filesystem in Userspace)ファイルシステムサポートのモジュール。

configfs: カーネル構成ファイルシステムのモジュール。

dax: 直接アクセスファイルシステム用のモジュール。

dmi_sysfs: Desktop Management Interface(DMI)情報を提供するモジュール。

crc32_pclmul: PCLMULQDQ命令を使用したCRC32計算のハードウェア加速モジュール。

crc32c_intel: インテルプロセッサ向けのCRC32-Cキャッシュ計算のハードウェア加速モジュール。

デバイスドライバーの追加

これらのデバイスドライバーは自動で追加されるが、手動で追加する場合はmodprobeコマンドを実行する。

システムの起動

電源を入れるとOSが起動するまで次のような流れを辿る。
1.BIOS/UEFIが起動する。
※BIOSとUEFIの違い

BIOS

起動プロセス:従来の16ビットリアルモードを使用し、MBRからOSを起動。
インタフェース: テキストベースのUIとキーボード操作。
セキュリティ: 限定的なセキュリティ機能。
起動時間: 起動時間はデバイスの数や構成に依存。
制約: レガシーシステム向けに適しているが、制約が多く、セキュリティや機能で制約がある。

UEFI

起動プロセス: 64/32ビットモードでGPTをサポートし、拡張性が高いブートプロセス。
インタフェース: GUIとマウス/タッチスクリーンなどの直感的な入力デバイスをサポート。
セキュリティ: セキュアブートなどの高度なセキュリティ機能をサポート。
デバイスサポート: 新しいハードウェア規格に対応し、拡張性が高い。
制約: 新しいハードウェアとセキュリティ規格向けに柔軟で強力だが、一部のレガシーシステムとの互換性が低い。

2.ハードウェアのチェック、初期化を行いブーストローダーを呼び出す。
3.ブーストローダーがカーネルをメモリ上へ読み込む
4.カーネルがメモリの初期化やシステムの起動に必要なデバイスドライバをマウントする。
※マウントとはファイルシステム内のデータやリソースへのアクセスを可能にすること。
5.ルートファイルシステムが使えるようになるとカーネルが最初のプロセスである、init(最近はsystemd)プロセスを実行する
6.init(systemd)が必要なサービスに起動していき、最終的にログイン画面を表示する。

起動時のイベント確認

上記の起動手順を進む中でカーネルがどのような処理を行ったかのログをdmesgコマンドで確認することができる。ただしdmesgコマンドはカーネルが出力したメッセージをバッファにためているログを確認するコマンドなので長時間起動している場合は起動時のメッセージが消えている可能性がある。

dmesg内容

まだまだ大量に出力されているのですが、chatgpt曰く大まかに以下のログがあるそうです。
・システム情報: Linuxバージョン6.1.56-82.125.amzn2023.x86_64でXen HVMハイパーバイザが検出されています。

・メモリとBIOS情報: メモリマップ、使用可能領域、予約領域、BIOSプロビデッド情報が表示されています。

・カーネル起動オプション: ルートファイルシステムのUUID、コンソール設定、セキュリティオプションが指定されています。

・ハードウェア情報: TSC、ACPI、割り込み、メモリゾーン、CPU情報が表示されています。

・システムコンソール: カラーVGA+ 80x25モードで設定され、tty0とttyS0の2つのコンソールが有効です。

・セキュリティとクロック: ACPIコアリビジョン、HPET、APIC設定、セキュリティモジュールが初期化されています。

・ネットワークとPCI: ネットワーク関連の初期化、PCIデバイスの検出と初期化が行われています。

・systemd情報: systemdのバージョン、システム初期化プロセスが進行中、さまざまなサービスが起動しています。

またsystemdが使える環境ではjournalctl -kコマンドでもdmesgコマンドと同様にカーネルバッファの内容が確認でき、-bコマンドをつけると起動時のみのメッセージを表示させることができる。

シャットダウン

シャットダウンや再起動にはshutdownコマンドを使用する

#〇秒後にシステムを停止し、ログインしているユーザにメッセージを送信
shutdown -h +〇 "皆さんログアウトしてください"

#すぐに再起動する
shutdown -r now

#20:00時にログインしているユーザーに警告メッセージを送信
shutdown -k 20:00 "皆さんこんばんは"

その他systemdを採用したシステムではsystemctl rebootで再起動やsystemctl poweroffなどでシステム終了を行う。

参考

とても分かりやすくてさすが小豆本。一択ですね。
https://www.amazon.co.jp/Linux教科書-LPICレベル1-Version5-0対応-中島-能和/dp/4798160490/ref=asc_df_4798160490/?tag=jpgo-22&linkCode=df0&hvadid=295678107984&hvpos=&hvnetw=g&hvrand=1975416269932882331&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=1009366&hvtargid=pla-649269108462&psc=1&th=1&psc=1

Discussion