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

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

次の情報は、マニュアルページから取得したものです。 inodeあたりのバイト数とinodeサイズの違いを知りたいです。

-i bytes-per-inode

バイト/アノード比を指定します。 mke2fs は、ディスク上の各 inode バイトスペースごとに inode を生成します。 inodeあたりのバイト比率が高いほど、生成されるinodeの数が減ります。この値は通常、ファイルシステムのブロックサイズより小さくしてはいけません。そうでなければ、あまりにも多くのinodeが生成されます。ファイルシステムが作成された後は、ファイルシステムのinode数を拡張できないため、このパラメータの正しい値を決定するときは注意が必要です。

-I inode-size

各inodeのサイズをバイト単位で指定します。 mke2fsはデフォルトで256バイトのinodeを生成します。 2.6.10以降のカーネルと一部の以前のベンダーカーネルでは、128バイトを超えるinodeを使用して拡張属性を保存してパフォーマンスを向上させることができます。 inode-size 値は 128 以上の 2 の累乗でなければなりません。 inode サイズが大きいほど、inode テーブルはより多くのスペースを消費するため、ファイルシステムで使用可能なスペースが減り、パフォーマンスに悪影響を及ぼします。大きな inode に格納されている拡張属性は、以前のカーネルでは表示できず、これらのファイルシステムは 2.4 カーネルのインストールでは機能しません。ファイルシステムが作成された後は、この値を変更することはできません。

答え1

さて、まず、inodeとは何ですか? Unixの世界では、inodeはファイルエントリです。ディレクトリのファイル名はインデックスノード(リンク!)のラベルにすぎません。 inodeは複数の場所で参照できます(ハードリンク!)。

-i inodeあたりのバイト数(inode_ratioとも呼ばれる)

不明な理由から、このパラメータは時々次のように記録されます。inodeごとのバイト時々アノード比。文書によると、これはバイト/Inode率。ほとんどの人は、次のいずれかを説明するとよりよく理解できます。

  • Xバイトの記憶領域ごとに1つのinodeがあります(ここでXはinodeあたりのバイト数)。
  • 受け入れ可能な最小平均ファイルサイズ。

公式(からインポートmke2fs ソースコード):

inode_count = (blocks_count * blocksize) / inode_ratio

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

inode_count = (partition_size_in_bytes) / inode_ratio

注 1: FS の作成時に固定数の inode を提供しても ( mkfs -N ...) ファイルシステムのサイズを拡張すると、より多くの inode に対応できるように、その値が比率に変換されます。

注2:この比率を調整する場合は、使用したいよりもはるかに多くのinodeを割り当てる必要があります。ファイルシステムを再フォーマットしたくないでしょう。

-I インデックスノードサイズ

これは、ファイルシステムが持つことができる各inodeに対して、ファイルシステムが割り当て/予約するバイト数です。このスペースは、inode属性を保存するために使用されます(読み取りインデックスノードの紹介)。 Ext3では、デフォルトのサイズは128です。 Ext4では、デフォルトのサイズは256です(extra_isizeインライン拡張プロパティストア用のスペースを保存して提供するために使用されます)。読むLinux:inodeのサイズを変更するのはなぜですか?

注:Xバイトのdisjkspaceは、使用可能かどうかに関係なく、割り当てられた各inodeに割り当てられます。ここで、Xはinode-sizeです。

答え2

inodeあたりのバイト数はファイルシステムに生成されるinodeの数を決定し、inode-sizeは各inodeのサイズを決定します。

入れる予定ならたくさんのinodeが必要です場所ファイルシステムの小さなファイル(および/または大きなディレクトリ)

AFAIK、ストレージが必要な場合は、デフォルトサイズの256バイトより大きいinodeのみが必要です。拡張属性あなたのファイルのため。 psusiはコメントでこれが間違っていると言いました。

答え3

ファイルシステムのおおよその図:

|_|__inodes__|_______________________DATA_________________________________|
  • ノード比/inodeごとのバイト=アノード数データエリア
  • インデックスノードサイズ=各inodeのサイズインデックスノードエリア

答え4

私はsjasの答えが大好きです。違いの本質を提供します。

これは私自身の拡張であるので(このスタック交換から始めてコメントを付けたり投票することはできないので)、必要な人のためにバランスのとれた方法で非技術的な用語で説明する答えを提供したいと思いました。データボリューム中の意思決定ユーザーは設定を理解できますが、必ずしも実装の背後にあるすべての詳細を理解することはできません。

役割/オブジェクト: - ストレージデバイスのデータボリューム - ボリュームのファイル - フォーマットされ、バイトブロックとそのアドレスを提供するストレージデバイス - ストレージデバイスのファイル位置

処置:オペレーティングシステムを介したリポジトリのファイルとフォルダの作成/削除/名前の変更、ファイルの読み取り/書き込み/移動、権限の変更など。

Nバイトサイズのファイルは「チャンク」(チャンク)として作成する必要があります。理論的には、ファイルを単一バイトのシーケンスで管理できると考えることができますが(論理的には可能です)、スペースでファイルを管理するために必要なのは、いくつかのファイル属性(名前など)を示す指定されたインデックスだけです。各ファイルの開始位置が保存されます。ただし、ハードウェア設計とパフォーマンスに関する考慮事項の「バス」および「ブロック」アプローチのため、これらの「ブロック」は、メディアブロックサイズの倍数(たとえば、512バイト、4096バイト)の特定のサイズを持ち、inodesレイヤ、レイヤーにファイルの場所とチャンクを照会し、メモリーにロードする必要があるときにチャンクがどのように接続されるかを伝えます。

大きな紙ロール(ロール)があり、複数ページの文書を保存するためにページ(文字または情報ビット)で構成される文書のインフォメーションストアを設計する必要がある場合は、必要なものはインデックスです(文書を見つけるため)。ドキュメント)はページのスペースを保存します(簡単なページ配置を使用)。 Unixソートメカニズム(インデックスノード)と実際のページエントリ。 inode-sizeはインデックス項目のサイズ(やや)です。 inodeあたりのバイトはページサイズです。

2つの関連設定変更の効果:

inodeサイズの変更 - 通常、変更は不要で、デフォルト値を維持します(以前に説明した回答に掲載されているリンクに従って)。

inodeあたりのバイト - ボリュームで作成できるファイルの最大数に影響します(パフォーマンスと未使用バイトの「無駄」)。

ペーパーロールのたとえ話に戻ります:「書き込みと保存システム」の定義中にページサイズがレンダリングされた場合は、これらのシステムで特定のサイズ(またはサイズが異なる複数の文書)の文書(ファイル)を作成して保存する必要があることを想像してください。柔軟ではなく、同じ文書に多くのページが必要になることがあり、「システム」ページサイズが非常に大きく、文書サイズが小さい場合は、1ページにスペースを残し、その中に小さなファイルを入れることで多くの紙を無駄にすることができます。ページが大きい場合 - 文書はより少ないページを使用する必要がありますが、最後に使用されるページには「無駄な空きスペース」が多い可能性があるため、すべてサイズとファイル数によって異なります。もう 1 つの考慮事項は、複数ページの文書を検索して検索する速度です。

(私に)ご理解いただきますように。私が拡張デザインやmkfsオプションのいくつかの部分をひどく誤用している場合は、コメントしてください。

関連情報