Linuxで接続されたブロックデバイスを取得する方法

Linuxで接続されたブロックデバイスを取得する方法

これにはどのAPI/インターフェースを使用できますか?私はsysfsが欲しいと思いますが、状況に応じてカーネル文書が存在します、インターフェイスは「実装の詳細は利用できません」とまとめることができ、利用可能な内容は完全に文書化されていません。

特につながったものを探したいです。詰まったデバイス(明らかに実装の詳細でその存在を知ることはできませんか?)、ブロックデバイスにどの属性があるのか​​(バージョン全体で既存の属性を使用できるか)、およびその内容を知りたいです。

本当に役に立つことです。使用sysfsですが、完全に文書化されていません。

答え1

この質問に誰も答えなかったが、私は解決策を見つけた。答えると次のようになります。

/sys/class/block/*利用可能なブロックデバイス(シンボリックリンク)を含むものを使用するのが最も正しい方法だと思います。

また、無視する必要があり、partitionファイルの存在として識別できる独自のパーティションもあります。このファイルは文書化されていないのでYMMVです。

後で必要に応じて、partitionファイルがあるディレクトリを見つけて特定のデバイスパーティションを取得できます。たとえば/sys/devices/**/sda/*/partition。ファイルにはパーティションも含まれています。数字。これにより、デバイス/パーティションカーネルの命名スキームについて何も知る必要がないので、お勧めします。

少なくとも/sys/block私のシステムにはパーティションがありませんが、それに依存してはいけません。

ブロックデバイスが利用可能になったら、それを得るために何かをすることができます。デバイスファイルmajor:minor文書化されていないファイルを読み取り、一致するdevデバイスを簡単に検索できます/dev

サイズが必要な場合は、常に512をsize含む文書化されていないファイルを使用できますdevice size / 512。パーティションにもこのような機能があります。パーティションにはOn Diskstartという1つのフィールドもあります。partition start / 512これらは「記録」されています。これ忘れられたパッチは、このファイルが約20年間安定して文書化されていないことを意味します。だから..

関連情報