ext2ファイルシステムについて質問があります。私はこれに精通している必要があります。みんな理解になると思います。しかし、何かが私を悩ませています。最初の図に示すように、このファイルシステムはボリュームを複数の「ブロックグループ」に分割します。それぞれに Inode テーブルセクションがあります。私が知りたいのは、ブロックグループ0のinodeテーブルがブロックグループ1のinodeテーブルと同じかどうかです(2、3 ... 0以外のすべて)。彼らは同じですか?同じ場合、i_node に対応する Inode_table を検索する方法です。そうでない場合、この場合、同じi_nodeが2つ以上あるようです。答えをしっかり知っている場合は、自分が正しいことを証明するウェブサイトや本など、アイデアの根拠を教えてください。
答え1
inodeテーブルが常にブロックグループの先頭に基づいて同じオフセットにあるかどうかを尋ねる場合、これはその前のすべてが固定サイズでなければならないことを意味します。ブロックとinodeのビットマップは常にブロックです。ブロックグループ記述子テーブルは固定されていません。文書には次のように記載されています。
定義されたブロックグループの数によっては、テーブルに複数のストレージブロックが必要になる場合があります。疑わしい場合は、常にスーパーブロックを参照してください。
特定のinodeのinodeテーブルを照会するには、そのinodeがどのブロックグループに属しているかを知る必要があります。ブロックグループ番号がわかっている場合は、ブロックサイズ(s_log_block_size)とブロックグループあたりのブロック数(グループあたり s_blocks_s_blocks_per_group)、ブロックグループの先頭を見つけることができます。ブロックグループ記述子テーブル座席。このブロックグループのinodeテーブルの最初のブロックのブロックIDを含みます(bg_inode_table)。
Extファイルシステム内部レイアウト文書:http://www.nongnu.org/ext2-doc/ext2.html
答え2
(投稿後数年遅れていることに気づき、とにかくこの回答をここに残します。)あなたの質問を正しく理解したら、グループ記述子テーブルの内容とビットマップで参照されている内容の間に混乱があります。
各ブロックグループには、スーパーブロック、グループ記述子セット、ブロックとinodeビットマップ、inodeテーブルが含まれています。グループ記述子セットはすべてのブロックグループに適用されますが(スーパーブロックとグループ記述子はバックアップコピーです)、ビットマップテーブルとinodeテーブルはそのブロックグループにのみ適用されます。
たとえば、4番目のブロックグループに興味がある場合は、グループディスクリプタテーブルから4番目のエントリ(ディスクの先頭にあるプライマリエントリまたはバックアップコピー)を読み、それから読み込むことができます。ブロック番号とinodeビットマップの位置を読みます。
注:上記の内容は通常、スパースオプションがデフォルトで設定されており、すべてのブロックグループにスーパーブロック(スペースを節約するため)があるわけではないため、上記の内容は完全に正確ではありません。スーパーブロックなので、ブロックを読むのは簡単です。スーパーブロックのs_magicフィールドをテストしてEXT2_SUPER_MAGICと同じであることを確認し、そうでない場合、ブロックグループはビットマップで始まります。
Hoovが投稿したリンクは素晴らしいです。ここに別の便利なリンクがあります。http://cs.smith.edu/~nhowe/Teaching/csc262/oldlabs/ext2.html いくつかの混乱した側面がありますが、Hoovのリンクと組み合わせると、起動して実行できます。https://wiki.osdev.org/Ext2悪くない