奇妙な質問があります。
Linuxシステムで、明らかに十分なスペースがあるのにスペースが残っていないと不満を言ったことはありますか?
たまたまGBがたくさん残っていたのですが、Linuxシステムからスペースが残っていないと文句を言われました。これは、iノードについて知ったときです。 。
iノードは、システム上のすべてのファイルのメタデータを、通常はパーティションの先頭近くにあるテーブルのような構造で保存します。ファイル名とデータを除くすべての情報が保存されます。
特定のディレクトリ内のすべてのファイルは、ファイル名とiノード番号を持つエントリです。ファイルに関する他のすべての情報は、iノード番号を参照することによってiノードテーブルから取得されます。
iノード番号はパーティションレベルで一意です。すべてのパーティションには独自のiノードテーブルがあります。
iノードが不足すると、特定のパーティションにスペースが残っていても、新しいファイルを作成できません。
Linuxのiノードとは何ですか?
iノードはインデックスノードの略です。歴史はそれについて完全には確かではありませんが、それは彼らが思いついた最も論理的で最良の推測です。以前はIノードと書かれていました 、しかしハイフンは時間の経過とともに失われました。
linfo.orgで説明されているように:
iノード データ構造です ……ファイルに関するすべての情報を保存します 名前と実際のデータを除いて。
iノードは、参照するファイルに関するメタデータを格納します。このメタデータには、上記のファイルに関するすべての情報が含まれています。
- サイズ
- 許可
- 所有者/グループ
- ハードドライブの場所
- 日付/時刻
- その他の情報
使用されるすべてのiノードは1つのファイルを参照します。すべてのファイルには1つのiノードがあります。ディレクトリ、文字ファイル、およびブロックデバイスはすべてファイルです。それぞれに1つのiノードがあります。
ディレクトリ内のファイルごとに、ファイル名とそれに関連付けられたiノード番号を含むエントリがあります。
iノードはパーティションレベルで一意です。異なるパーティションにある場合、同じiノード番号を持つ2つのファイルを持つことができます。 iノード情報は、各パーティションの戦略的部分にあるテーブルのような構造で保存されます。多くの場合、最初の方にあります。
Linuxでiノードをチェックする方法
次のコマンドを使用して、iノード番号を簡単に一覧表示できます。
ls -i
次の写真は、対応するiノード番号を持つルートディレクトリを示しています。
各ファイルシステムが持つiノードの量は、ファイルシステムを作成するときに決定されます。ほとんどのユーザーにとって、デフォルトのiノード数は十分すぎるほどです。
ファイルシステムを作成するときのデフォルト設定では、2Kバイトのスペースごとに1つのiノードが作成されます。これにより、ほとんどのシステムで多くのiノードが得られます。 iノードが不足する前に、スペースが不足する可能性が高くなります。必要に応じて、ファイルシステムの作成時に作成するiノードの数を指定できます。
iノードが不足すると、新しいファイルを作成できなくなります。あなたのシステムもそうすることができなくなります。これはほとんどのユーザーが遭遇する状況ではありませんが、可能です。
たとえば、メールサーバーは非常に小さなファイルを大量に保存します。これらのファイルの多くは2Kバイト未満になります。また、絶えず成長することが期待されています。したがって、メールサーバーは、スペースが不足する前にiノードが不足するリスクがあります。
Btrfs、JFS、XFSなどの一部のファイルシステムは動的iノードを実装しています。必要に応じて、使用可能なiノードの数を増やすことができます。
iノードはどのように機能しますか?
新しいファイルが作成されると、iノード番号とファイル名が割り当てられます。 iノード番号は、そのファイルシステム内の一意の番号です。名前とiノード番号の両方がエントリとしてディレクトリに保存されます。
lsコマンド「ls-li /」を実行したとき 」ファイル名とiノード番号は、ディレクトリ /に保存されたものです。 。残りの情報ユーザー、グループ、ファイル権限、サイズなどは、iノード番号を使用してiノードテーブルから取得されました。
Linuxのdfコマンドを使用して、各ファイルシステムのiノード情報を一覧表示できます。
df -hi
ソフトリンクまたはシンボリックリンクは、Linuxのよく知られた機能です。しかし、Linuxでシンボリックリンクを作成すると、iノードはどうなりますか?次の図には、「 dir1」というディレクトリがあります。 「、「 file1」という名前のファイル 」および「dir1 」「slink1」というソフトリンクがあります 」は「../ file1 「
これで、再帰的にリストしてiノード情報を表示できます。
予想どおり、dir1とfile1のiノード番号は異なります。しかし、ソフトリンクもそうです。ソフトリンクを作成するときは、新しいファイルを作成します。そのメタデータでは、ターゲットを指します。作成するソフトリンクごとに、1つのiノードを使用します。
lnコマンドを使用してdir1にハードリンクを作成した後:
ln ../file1 hlink1
iノード番号のリストから次の情報が得られます:
「file1」が表示されます および「hlink1 」のiノード番号は同じです。正直なところ、iノードがあるためハードリンクが可能です。ハードリンクは新しいファイルを作成しません。同じデータの新しい名前のみを提供します。
Linuxの古いバージョンでは、ディレクトリをハードリンクすることが可能でした。特定のディレクトリをそれ自体の親にすることも可能でした。これは、iノードの実装により可能になりました。これは、ユーザーがディレクトリの非常に紛らわしい構造を作成するのを防ぐために制限されています。
iノードが機能する方法は、異なるファイルシステム間でハードリンクを作成することが不可能な理由でもあります。このようなタスクを許可すると、iノード番号が競合する可能性があります。一方、ソフトリンクはさまざまなファイルシステム間で作成できます。
ハードリンクのiノード番号は元のファイルと同じであるため、元のファイルを削除しても、データはハードリンクを介して引き続き利用できます。この場合、実行したのは、このiノード番号を指す名前の1つを削除することだけです。このiノード番号にリンクされているデータは、それに関連付けられているすべての名前が削除されるまで利用できます。
iノードは、Linuxシステムが再起動せずに更新できる大きな理由でもあります。これは、あるプロセスがライブラリファイルを使用できる一方で、別のプロセスがそのファイルを新しいバージョンに置き換えるためです。したがって、新しいファイルの新しいiノードを作成します。すでに実行中のプロセスは古いファイルを使用し続けますが、新しいファイルを呼び出すたびに新しいバージョンが使用されます。
iノードに付属するもう1つの興味深い機能は、データをiノード自体に格納する機能です。これはインライン化と呼ばれます 。この保存方法には、データブロックが不要なため、スペースを節約できるという利点があります。また、データを取得するためのディスクアクセスが増えるのを避けることで、ルックアップ時間が長くなります。
ext4のような一部のファイルシステムには、inline_dataというオプションがあります。有効にすると、オペレーティングシステムがこの方法でデータを保存できるようになります。サイズの制限により、インライン化は非常に小さいファイルに対してのみ機能します。 Ext2以降では、多くの場合、この方法でソフトリンク情報が保存されます。つまり、サイズが60バイト以下の場合です。
結論
iノードは直接対話するものではありませんが、重要な役割を果たします。メールサーバーのように、パーティションに非常に小さなファイルが多数含まれている場合、それらが何であり、どのように機能するかを知ることで、将来の多くの問題を回避できます。
この記事が気に入って、Linuxのiノードについて新しく重要なことを学んだことを願っています。 Linux関連の詳細については、当社のWebサイトを購読してください。