web-dev-qa-db-ja.com

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

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

$ ls -aid */ .*/

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

私は、ディレクトリの名前が親ディレクトリに保持され、それらのデータがディレクトリ自体のiノードに保持されることだけを知っています。

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

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

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

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

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
39
ilkkachu

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

24
John