ディレクトリ/ home、/ usr、/ varなどのすべてに同じiノード番号(2)があるのはなぜですか?


31

ルートディレクトリの下に、同じiノード番号を持つディレクトリがあることがわかりました。

$ ls -aid */ .*/

2 home/ 2 tmp/ 2 usr/ 2 var/ 2 ./ 2 ../ 1 sys/ 1 proc/

ディレクトリの名前は親ディレクトリに保持され、そのデータはディレクトリ自体のiノードに保持されることしか知りません。

私はここで混乱しています。

これは、パス名/ home / user1をトレースしたときに私が思うことです。

  • 最初に、ディレクトリリストを含むルートディレクトリであるiノード2に入ります。
  • それから、iノード2とペアリングされた名前homeを見つけます。
  • それでは、ディスクに戻ってiノード2を見つけますか?
  • そして、私はここでuser1という名前を取得しますか?

回答:


39

それらは異なるデバイス上にあります。

の出力を見るとstat、ファイルがあるデバイスも確認できます。

# stat / | grep Inode
Device: 801h/2049d      Inode: 2           Links: 24
# stat /opt | grep Inode
Device: 803h/2051d      Inode: 2           Links: 5

したがって、これら2つは別々のデバイス/ファイルシステム上にあります。iノード番号はファイルシステム内でのみ一意であるため、ここでは珍しいことはありません。ext2 / 3/4では、iノード2 は常にルートディレクトリでもあるため、それぞれのファイルシステムのルートであることがわかります。

デバイス番号とiノードの組み合わせは、システム全体で一意である可能性があります。(伝統的な意味でiノードを持たないファイルシステムもありますが、とにかく、それらの場所にある種の一意の識別子を偽造する必要があると思います。)

そこにあるデバイス番号は、デバイスノードに表示されているものと同じであるように見えるため/dev/sda1、ファイルシステムを保持します/

# ls -l /dev/sda1
brw-rw---- 1 root disk 8, 1 Sep 21 10:45 /dev/sda1

ありがとう、今、私は私のために有用な統計を取得します、私はそれを使用することを学びます。
youxiao

1
レコードについては、iノードを動的に割り当てる場合でも、すべてのファイルシステムに同等のものがあります。たとえば、BTRFS(ext2 / 3/4の静的iノードテーブルとは対照的に動的iノード割り当てを行う)では、このように使用される特定のiノード値は256です(下位のすべてがメタデータツリーの特別なエントリのために予約されているため) 。
オースティンヘメルガーン

1
@ AustinHemmelgarn、FATやISO9660などの一部のファイルシステムには、意味のある意味でのiノードがありません。ファイルシステムドライバーは、システムの残りの部分に見えるように少し手を加えます。
マーク

@Mark:「ファイルのシリアル番号[デバイス内で一意]」を定義する標準ごとの唯一の「意味のある言葉の意味」。iノードを特定のディスク上のデータ構造として考えることを主張することは、ttyを機械的なテレタイプとして考えることと同じくらい後方にあります。
R ..

1
@R ...合成されたiノード構造をキャッシュから削除し、次に何かがそのiノードデータを要求したときに、ファイルは新しい番号を取得します。
マーク

24

特定のファイルのiノード番号はファイルシステムに固有ですが、必ずしも特定のホストにマウントされているすべてのファイルシステムに固有ではありません。複数のファイルシステムがある場合、ファイルシステム間で重複するiノード番号が表示されます。これは正常です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.