デバイスファイルはファイル自体ではありません。 Unixシリーズオペレーティングシステムで使用されるデバイスのI / Oインターフェイス。ディスク容量は使用しませんが、次のコマンドで報告されたinodeを使用し続けますstat
。
$ stat /dev/sda
File: /dev/sda
Size: 0 Blocks: 0 IO Block: 4096 block special file
Device: 6h/6d Inode: 14628 Links: 1 Device type: 8,0
デバイスファイルを使用するかどうか物理ファイルシステムのinodeとなぜ必要ですか?
答え1
簡単に言えば、バックアップする物理ファイルシステムがある場合にのみ機能します/dev
(最新のLinuxディストリビューションを使用している場合は機能しない可能性があります)。
長い答えは次のとおりです。
これらすべては、もともとUNIXの哲学にさかのぼります。すべてがファイルです。このアイデアは、UNIXが汎用性のある理由の1つです。これは、アプリケーションが特別なコードを使用して物理ハードウェアと直接通信することなく、ユーザー空間で直接デバイスと対話できるためです。
もともとは、/dev
デバイスファイルが置かれたよく知られた名前を持つ別のディレクトリでした。一部のUNIXシステムはまだこれを行います(OpenBSDはまだ実行していると思います)、システムが実際に持っていない多くのデバイス用のデバイスファイルを持っているため、システムがこの方法であることが一般的にわかります。システム上のファイル)ディスクのすべての可能なパーティションから)。これにより、メモリ領域と起動時間が節約されますが、より多くのディスク領域を使用するコストが高くなります。これは通常、メモリが非常に限られており、速度がそれほど速くないため、初期システムにとって良いトレードオフです。これをしばしば静的と呼びます/dev
。
最新のLinuxシステム(FreeBSDとおそらく最新バージョンのSolarisもあると思います)には、/dev
カーネル(またはSystemdを使用している場合はudev)によって埋められる一時メモリファイルシステムがあります。なぜなら、ほとんどすべての作業を行うカーネルを信頼しないからです。 )。これにより、一部のディスク容量が節約されますが、一部のメモリ(通常は数MB未満)が消費され、処理のオーバーヘッドがほとんど発生しません。他にも多くの利点があります。最大の利点の1つは、ホットプラグ可能なハードウェアをより簡単に検出できることです。これはしばしば動的と呼ばれます/dev
。
ただし、どちらの場合も、デバイスノードは通常のVFSレイヤを介してアクセスされます。これは、定義に従って実際のように機能するには、inode(現在存在する仮想inodeであっても)があることを意味しますstat()
。これは/dev
単にinodeをメモリに保存するか、必要に応じて作成するため、Dynamicを使用するシステムには影響しませんが、/dev
staticはinodeがほぼゼロのディスク容量を占めるため、ほとんど影響を与えず、ほとんどのファイルシステムは制限しないか、それ以上提供しません。誰にも必要なものより。
答え2
デバイスファイルにも権限があり、これらの権限はinodeに保存されます。
答え3
ディレクトリはファイル名からinodeへのマッピングにすぎないため、名前が参照するすべてのもの(ファイル、シンボリックリンク、デバイス、FIFO、ソケット)はinodeになければならず、それを置く他の場所はありません。
デバイスに関する情報は inode に保存されます。権限、タイムスタンプなどと同様に、プライマリとセカンダリの番号があります。タイプフィールドは、そのデバイスに保存されている通常のファイルではなく、ブロックデバイスかキャラクタデバイスかを示します。
デバイスのinodeは、ファイルブロックマッピングを含むフィールドをまったく使用しません。
答え4
inode がない場合は、デバイスに関するすべての情報を格納できるファイル名のみを持ちます。これは、「良い」デバイス名が/dev/sda
不可能であることを意味します。特定のドライバに関連付けることができる名前が必要です/dev/ohci/sda
。
また、inodeに依存するすべてのツール(例:stat
など)を変更して、基本パスを特別な方法で処理するls
必要があります。/dev
これは、現在の状況に比べて明らかな利点がない膨大な量の作業になります。