2011-11-08 10 views
3

私は、Linuxファイルシステムでinode番号がどのように使われているかについていくつか質問しています。これらの質問は関連しているかもしれませんが、明確にするために私はそれらを一つずつ質問します。 "からEXT2/3を取り出してください。ブロックグループにiノードテーブルがあり、iノードがファイルを表示していることを知っていますが、ファイルが多すぎますがiノード番号では不十分な場合はどうしたらいいですか? ? ファイルシステムは、すべてのiノード番号が使い果たされても何もしません。また、後でファイルを削除すると、そのiノードがリサイクルされることがあります。inode番号はLinuxのルートファイルシステムでどのように配布されますか?

Q2:私は私のLinuxサーバ上で "DF -i" を実行し、私はこれを取得:

Filesystem   Inodes  IUsed IFree  IUse% Mounted on  
    /dev/sda1   1313280 7853 1305427 1% /
    devtmpfs     0  0  0    -  /dev 
    tmpfs     525298  4 525294  1% /dev/shm 
    /dev/sda2    65808  50 65758  1% /boot 
    /dev/sda5   1313280  146 1313134 1% /opt 
    /dev/sda6    655776  37 655739  1% /tmp 
    /dev/sda7    655776 5219 650557 1% /home 
    /dev/sda8   1313280  840 1312440 1% /var 
    /dev/sda9    655776 36529 619247 6% /usr 
    /dev/sda10    6432  11 6421  1% /crash 
    /dev/sda12   135488  11 135477  1% /usr/local/instances 
    tmpfs     525298  3 525295 1% /var/run/xenstored 
    tmpfs     525298  3 525295 1% /var/lib/xenstored 
    tmpfs     525298  3 525295 1% /var/lib/xend/socket 
    tmpfs     517536  3 517533 1% /var/run/libvirt/socket 

私は各ファイルシステムは独自のiノード数を持っており、(devtmpfsとtmpfsのような)これらのファイルシステムがすべてであることがわかりroot file systemに取り付けられています。私は各ファイルシステムがそれぞれ独自のiノードテーブルを持っていると思いますが、ルートファイルシステムは[0、N]、tmpfsは[N + 1、M]のように、異なる範囲で分散した異なるファイルシステムのiノード番号ですか?

異なるファイルシステムのiノード番号が異なる範囲にある場合(私はそうは思わない)、ファイルシステムはどのようにしてレンジ分割について合意していますか?

同じルールに基づいて異なるファイルシステムのiノード番号が生成された場合(すべてが0から始まるような場合)、それらを一緒にマウントすると、異なるファイルシステムが競合する可能性がありますか?私が知っているように、inodeは実行中のOSでファイルを表示しますが、ルートファイルシステムのファイルがinode番号Nで、別のファイルシステム(tmpfsなど)の別のファイルもiノード番号Nの場合、OSは何を行いますか?

PS。私はLinuxにはまったく新しく、英語圏の国から来ているわけではありません。申し訳ありませんが、私は明確な表現をしていません。前もって感謝します。

+0

これはhttp://s.tk/unixのより良い質問のようです。 –

+0

"unix"フォーラムまたは "Ubuntu"フォーラムのいずれかを試してみてください。あなたはより良い答えを得るでしょう: - }。私たちはここのコーダーであり、一般的には "System.IO.WriteLine()"の後に何が起こるか気にしません。 –

+0

これは言うことが難しい質問の1つです。私はそれがUnixesに関する一般的な興味深い実装の詳細なので、ここに属していると言います。 – Omnifarious

答えて

4

ファイルの一意の完全な識別子は(st_dev, st_ino)です。これは、ファイルシステム全体でiノード番号が一意である必要はなく、すべてのファイルが依然として一意に識別されることを意味します。

これは、デバイスをまたがるハードリンクを持つことができないためです。ディレクトリエントリには、デバイス番号ではなく、iノード番号だけが含まれます。したがって、ディレクトリエントリは、そのディレクトリが存在するのと同じファイルシステム上のファイルのみを参照することができます。

ディレクトリエントリにデバイスフィールドを追加しても、それは意味がなく、ドライブの追加または削除時にデバイス番号が変更され、システムの実行中に特定のデバイスのみを参照することがあります。また、どのようにして世界中のすべてのデバイスに一意に番号を付けることができますか?たとえば、USBドライブを使用すると、特定のデバイスをマシン間で移動することができます。リンクがまだ機能するように、デバイス番号が同じままであることをどのように確認しますか?

最後に、すべてのファイルシステムタイプが固定量のiノード番号を持つわけではありません。 reiserfsと(私は)btrfsは必要に応じて新しいinodeを動的に割り当てるので、ファイルシステムのinodeの合計フィールドは本当に有用な値を反映しません。

+0

'(st_dev、st_ino)'はここで非常に参考になる情報であり、ハードリンクの説明です。ありがとう。 – xanpeng

関連する問題