ある講師が私たちに質問しました。
ファイルサイズが54KBでブロックサイズが4KBの場合、inodeを使用してEXT4ファイルシステムのすべてのデータを収集するために必要なデータブロックの数は何ですか?
答え:15
私が見つけることができる唯一の説明は54/4 = 13.5です。これは最大14個のデータブロックに丸められ、1個のinodeブロックが追加され、合計15個のブロックになります。私を混乱させることは、質問がinodeブロックではなくデータブロックについて明示的に尋ねることです。これは、inodeブロックがデータブロックと同じであることを意味しますか?とにかくその声明は各ファイルには inode ブロックがあります。はい、これはEXT4ファイルシステムにのみ適用されますか?
講師に説明を聞くことができず、オンラインでも見つけることができなかったので、ここに質問します。ここにお問い合わせが適切でない場合は、お知らせください。
ご回答ありがとうございます。
答え1
特に、彼らは「FSのすべてのデータ」(ただ1つのファイルではない)について話し、「inodeの使用」(複数形)に言及しているので、彼らが何を考えているのかを正確に知ることは困難です(尋ねる必要があります)。
しかし、彼らが言及できるものの1つはデフォルトのブロックアドレッシングです。これは、inodeで最初の12個のデータブロックのアドレスを直接指定し、次に1024個のデータブロックのアドレスを含むように追加のブロックを割り当てます(通常は4個のデータブロックを想定しているkBファイルシステムブロックサイズ)。 14個のデータブロックの場合、inode自体に加えて、合計15個のデータブロックに対して1個の間接ブロックが必要です。
しかし、AFAIK ext4は通常、スコープベースのマッピングを使用しているため、これは少し古いです。つまり、連続するデータブロックごとに1つの項目のみを保存するという意味です。つまり、必要なメタデータの量は、ファイルがどのくらい断片化されているかによって異なりますが、一般的な場合にはいくつかの拡張のみが必要で、inodeに直接保存できると仮定します。
エクステントツリーのルートノードはinode.i_blockに格納され、追加のメタデータブロックを使用せずに最初の4つのエクステントを記録できます。
バラより「inode.i_blockの内容」wiki.kernel.orgのExt4ディスクレイアウトドキュメントにあります。
答え2
デフォルトでは、ext4ファイルシステムは現在512バイトのinodeでフォーマットされているため、各4KBブロックは8つのinodeを共有します。ただし、inodeはデータブロックとは異なり、フォーマット時に静的に割り当てられます。