はじめに
/sys
って仮想ファイルシステムで、いろいろシステム情報入ってる、ぐらいしかわからんから、調べてみる
/sys
とは
- Linuxの
/sys
ディレクトリは、システムファイルシステム(sysfs)の一部 - カーネルオブジェクトに関する情報とインターフェースを提供する特殊なファイルシステム
- Linuxカーネルが実行時にデバイスやドライバーなどのカーネルオブジェクトに関する情報を、ユーザースペースに公開するための手段として機能する
- FHS(Filesystem Hierarchy Standard) で定義されている
/sys
で公開されている情報
主に以下の情報が公開されている。
-
デバイス情報
- /sysディレクトリは、システムに接続されている各デバイスに関する詳細な情報を含んでいる
- デバイスの種類、状態、設定などが含まれる
-
ドライバーとのインタラクション
- ユーザーは
/sys
を通じてドライバーと対話できる - 特定のデバイス機能を有効または無効にするために、ファイルを読み書きすることができる
- ユーザーは
-
カーネルパラメータの調整
- カーネルの動作を制御するためのパラメータも
/sys
を通じてアクセス可能 - システム管理者はランタイム中にカーネルの動作を微調整できる
- カーネルの動作を制御するためのパラメータも
-
階層構造
-
/sys
ディレクトリは階層的な構造をしている - デバイス、バス、ドライバーなどによって整理された階層構造が公開されている
-
-
仮想ファイルシステム
-
/sys
は実際のファイルではなく、カーネルデータ構造へのインターフェースを提供する仮想ファイルシステム - ここに存在するファイルは実際のディスクスペースを消費していない
-
デバイスツリー
-
/sys
ディレクトリの階層構造は、Linuxカーネルのデバイス、バス、ドライバーなどのオブジェクトを反映している - これらのオブジェクトは、デバイスツリーと呼ばれる構造で整理されている
- システムのハードウェア構成とカーネルの内部状態を表す
/sys
の主要なサブディレクトリ
/sys/block
- ブロックデバイス(ハードドライブ、SSDなど)に関連する情報を含んでいる
- 各ブロックデバイスはサブディレクトリとして表示され、その中にはデバイスの特性や統計情報が含まれる
/sys/bus
- システムのバス(例:PCI, USBなど)に関する情報を提供する
- バスごとにサブディレクトリがあり、接続されているデバイスやドライバーに関する情報が含まれる
/sys/class
- デバイスを機能や種類別に分類したディレクトリ
- 例えば、
/sys/class/net
にはネットワークインターフェースに関する情報が、/sys/class/sound
にはオーディオデバイスに関する情報が含まれる
/sys/dev
- デバイスをメジャー番号とマイナー番号で分類したディレクトリ
- このディレクトリを通じて、特定のデバイスファイルに対応するカーネルオブジェクトへアクセスできる
/sys/devices
- システム上のすべてのデバイスについての詳細な情報が含まれる
- デバイスは物理的な接続構造に基づいて階層的に配置されている
/sys/firmware
- ファームウェアやBIOSなどの、システムファームウェアに関連する情報が含まれている
/sys/kernel
- カーネル固有の設定や統計情報が含まれている
- 例えば、デバッグ情報やカーネルモジュールに関するデータなどが含まれる
/sys/module
- ロードされているカーネルモジュールに関する情報が含まれる
- 各モジュールはサブディレクトリとして表現され、設定オプションや状態情報が含まれる
/sys
から情報を取得しているコマンド
lsusb
USBデバイスに関する情報を表示するコマンド。このコマンドは、/sys/bus/usb/devices/
から情報を取得している。
lspci
PCIデバイスに関する情報を表示するコマンド。このコマンドは、/sys/bus/pci/devices/
や /sys/bus/pci/
から情報を取得している。
lsblk
ブロックデバイス(ハードドライブ、SSDなど)のリストを表示するコマンド。このコマンドは、/sys/block/
から情報を取得している。
udevadm
udevデバイスマネージャーに関連する情報を表示するコマンド。このコマンドは、/sys
ディレクトリの情報を利用してデバイスに関する詳細を表示する。
lshw
ハードウェア構成の詳細な情報を表示するコマンド。このコマンドは、/sys
ディレクトリの情報を利用してハードウェアに関する詳細を表示する。
/sys
を使ったトラブルシューティング
以下のトラブルシューティングなどができるが、専用コマンドを使う方が楽かも。
ネットワークインターフェースの問題診断
/sys/class/net/
ディレクトリ内を調べることで、ネットワークインターフェースの状態(有効/無効)や統計情報を確認できる。
例えば、/sys/class/net/eth0/carrier
をチェックして物理的な接続状態を確認したり、/sys/class/net/eth0/statistics/rx_bytes
で受信したバイト数を調べることができる。
USBデバイスの問題診断
/sys/bus/usb/devices/
には、接続されているUSBデバイスの情報が含まれている。
デバイスが正しく認識されていない場合、このディレクトリ内の情報を用いて、デバイスの状態や接続状況を確認できる。
ストレージデバイスのパフォーマンス監視
/sys/block/
ディレクトリには、システムのストレージデバイス(ハードドライブ、SSDなど)に関する情報が存在する。
例えば、/sys/block/sda/statファイルには、デバイスの読み書き操作や転送状況に関する情報が含まれており、パフォーマンスの監視に利用できます。
CPUの状態確認
/sys/devices/system/cpu/
内では、CPUの状態や性能に関する情報が含まれている。
例えば、/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
で現在のCPU周波数を調べたり、/sys/devices/system/cpu/cpu0/online
で特定のCPUコアが有効かどうかを確認できる。
カーネルモジュールの状態確認
/sys/module/
ディレクトリには、ロードされているカーネルモジュールに関する情報が含まれている。
このディレクトリを通じて、特定のモジュールがロードされているか、その設定値を確認することができる。
参考リンク
Wikipedia sysfs
man sysfs
Filesystem Hierarchy Standard
さいごに
さくっと理解しておきたい