「inodeサイズ」と「inodeあたりのバイト数」の違いは何ですか


18

以下の情報はマニュアルページから取られていますが、バイトあたりのiノードとiノードのサイズの違いを知りたいですか?

-i bytes-per-inode

バイト/ iノードの比率を指定します。mke2fsは、ディスク上のスペースのバイトあたりのバイトごとにiノードを作成します。バイトあたりのiノードの比率が大きいほど、作成されるiノードは少なくなります。通常、この値はファイルシステムのブロックサイズよりも小さくする必要があります。そうすると、iノードが多くなりすぎてしまいます。このパラメーターの値。

-I inode-size

bytes.mke2fsで各iノードのサイズを指定すると、デフォルトで256バイトのiノードが作成されます。2.6.10以降の一部の以前のベンダーカーネルでは、パフォーマンスを向上させるために、128バイトを超えるiノードを使用して拡張属性を格納することができます。iノードサイズの値は、2のべき乗以上である必要があります。 -iノードテーブルが消費するスペースを増やすと、ファイルシステムの使用可能なスペースが減り、パフォーマンスに悪影響を与える可能性がありますファイルシステムの作成後にこの値を変更することはできません。

回答:


13

さて、最初に、iノードとは何ですか?Unixの世界では、iノードはファイルエントリの一種です。ディレクトリ内のファイル名は、iノードへの単なるラベル(リンク!)です。iノードは複数の場所で参照できます(ハードリンク!)。

-iバイトあたりiバイト(別名inode_ratio)

何らかの不明な理由により、このパラメーターは、バイトあたりiノードとして、またinode_ratioとして文書化される場合があります。ドキュメントによると、これはバイト/ inode比です。ほとんどの人間は、どちらかと言えばよりよく理解できます(私の英語を言い訳):

  • ストレージのXバイトごとに1つのiノード(Xはiノードあたりのバイト数)。
  • 適合可能な最小の平均ファイルサイズ。

式(mke2fs ソースコードから取得):

inode_count = (blocks_count * blocksize) / inode_ratio

または単純化するblocks_count * blocksizeこともできます(「パーティションサイズ」がにほぼ等しいと仮定すると、割り当てを確認していません)。

inode_count = (partition_size_in_bytes) / inode_ratio

注1:FSの作成時に固定数のiノードを提供した場合(mkfs -N ...)、値は比率に変換されるため、ファイルシステムのサイズを拡張するときに、より多くのiノードを収めることができます。

注2:この比率を調整する場合は、使用する予定よりもかなり多くのiノードを割り当てるようにしてください...ファイルシステムを再フォーマットしたくない場合。

-iノードサイズ

これは、ファイルシステムが持つ各iノードにファイルシステムが割り当て/予約するバイト数です。スペースは、iノードの属性を格納するために使用されます(Introの紹介を参照)。Ext3では、デフォルトサイズは128でした。Ext4では、デフォルトサイズは256です(extra_isizeインライン拡張属性のスペースを保存および提供するため)。Linuxを読む:なぜinodeサイズを変更するのですか?

注:X = inode-sizeの場合、割り当てられたiノードごとにdisバイトスペースのXバイトが割り当てられます。


5

バイトごとのiノードは、そのファイルシステム用に作成されるiノードの数を決定します。inode-sizeは、各iノードの大きさを決定します。

filesytemに多数の小さなファイル(および/または多数のディレクトリ)を配置する場合は、多くのiノードが必要です。

私の知る限り、ファイルの拡張属性を保存したい場合、実際に必要なのはデフォルトサイズの256バイトより大きいiノードだけです。 psusiはコメントで、それは正しくないと述べています。


4
実際に拡張された属性は、iノードではなく独自のブロックに格納されるため、それらに大きなiノードは必要ありません。メーリングリストにいくつかのパッチが浮かんできましたが、それらが収まるほど小さい場合は最終的に拡張属性をinodeに格納する機能を追加しましたが、まだメインラインにヒットしている場合はごく最近でした。
psusi 14

1

非常にラフなファイルシステムの回路図:

|_|__inodes__|_______________________DATA_________________________________|
  • inode-ratio / bytes-per-inode = DATA領域のiノードの量
  • inode-size = iノード領域内の各iノードのサイズ

0

私はsjaの答えが本当に好きでした、それは違いの本質を与えます。

これは私自身の拡張です(このスタック交換から始めてコメントしたり投票したりすることはできません)ので、データ量の間に決定を下す必要があるユーザーが理解できる非技術用語でバランスのとれた方法で自分自身に答えを求めましたセットアップが実装の背後にあるすべての詳細を必ずしも知っているわけではありません。

ペルソナ/オブジェクト:-ストレージデバイス内のデータのボリューム-ボリューム内のファイル-ストレージデバイス。フォーマットされ、バイトブロックとそのアドレスを提供します-ストレージ内のファイルの場所

アクション:ストレージ内のオペレーティングシステムによるファイルとフォルダーの作成/削除/名前変更、ファイルの読み取り/書き込み/移動、権限の変更など。

Nバイトのサイズのファイルを「チャンク」(ブロック)で作成する必要があります。理論的には、ファイルは単一バイトのシーケンスとして管理できると考えることができますが(論理的には)、スペース内のファイルを管理するために必要なのは、ファイルのプロパティ(名前など)と各ファイルの開始位置を示す指定されたインデックスだけですストレージ。ただし、「バス」と「ブロック」を使用したハードウェアの設計方法と、これらの「チャンク」は特定のサイズであり、メディアのブロックサイズの倍数(512バイト、4096バイトなど)であり、 iノードレイヤーによって管理されます。iノードレイヤーは、ファイルの場所と、チャンクを見つけてメモリにロードする必要がある場合に、チャンクがどのように連結されるかを次のレイヤーに伝えます。

1つの大きな巻物(ボリューム)があり、複数ページのドキュメントを保存するためのページ(文字または情報のビット)で構成されるドキュメントの情報ストレージを設計する必要がある場合、必要なのは(ドキュメントを検索するための)インデックス、ページ(ページのいくつかの単純な位置)。Unixの照合メカニズム(inode)および実際のページ分割。inode-sizeはインデックスエントリサイズ(多かれ少なかれ)bytes-in-inodeはページサイズです。

問題の2つの設定を変更した場合の影響:

changin inode-size-通常、変更する必要はありません。デフォルトのままにしてください(ディスカッションへの以前の回答で投稿されたリンクによる)

バイトあたりのバイト数-ボリューム内で作成できるファイルの最大数に影響します(未使用バイトのパフォーマンスと「浪費」の可能性があります)

ペーパーロールの例えに戻る:特定のサイズのドキュメント(またはファイル)をそのようなシステム(またはさまざまなサイズの多くのドキュメント)に書き込み、保存しなければならないことを想像してください。 「システム」のページサイズが非常に大きく、ドキュメントサイズが小さい場合、1つのページに空白を入れて小さなファイルを収めることにより、大量の紙が無駄になる可能性があります。ページサイズが大きい場合-ドキュメントに使用する必要があるページは少なくなりますが、最後に使用したページに多くの「無駄な空白」が存在する可能性があります。そのため、使用されるファイルのサイズと数に依存します。もう1つの考慮事項は、多くのページのドキュメントを検索して持ってくる速度です。

それが理にかなっていることを望み(私にとってはそうです)、extデザインまたはmkfsオプションの一部を真剣に悪用した場合はコメントしてください。

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