EXT2 - グループ記述子テーブルの境界

EXT2 - グループ記述子テーブルの境界

ext2ファイルシステムでフォーマットされたドライブを許可する大学用CLIプログラムを作成する必要があります。一部のファイルを復元する必要があります。読んだ後これ文より質問がもう一つあります。スーパーブロック後のブロックグループ記述子テーブルを読むときにいつ停止するのかわかりません。 FSを正しく理解すると、ブロック単位で割り当てられます。したがって、テーブルが1つのブロックに収まらない場合、2番目のブロック全体がテーブルに割り当てられます。しかし、テーブルに割り当てられたブロックの数はどのようにわかりますか?

スーパーブロックにはこれらのフィールドが含まれていますが、s_blocks_count断片s_blocks_per_group化率が0%の場合にのみ便利です。たとえば、断片化のために1つのデータブロックのみを持つ8つのグループがある場合、グループ数を推測することはできません。

それからs_first_data_blockこれが私に必要な正確な情報だと思いました。

decriptor_table_range = end_of_superblock..(s_first_data_block - block_bitmap - inode_bitmap - inode_table)

inodeテーブルのサイズはおよびでs_inodes_per_group定義されますs_inode_size。しかし、記事ではs_first_data_block0または1のみが可能であると指摘しています。

最初のデータブロックを識別する32ビット値、つまりスーパーブロック構造を含むブロックのID。

この値は、ブロックサイズが1KBを超えるファイルシステムの場合は常に0、ブロックサイズが1KBのファイルシステムの場合は1です。スーパーブロックは常にディスクのバイト1024(通常は3番目のセクタの最初のバイト)で始まります。

だからそれも役に立ちません。私が見る唯一の機会は、ドライブのサイズを確認し、増加するグループ記述子テーブルを考慮して、ドライブに入ることができるグループの数を確認することです。しかし、.imgファイルをドライブにマウントするとどうなりますか?このファイルは動的に大きくなるようで、最大サイズがどのくらいかはわかりません。

では、ブロック記述子テーブルで使用されるブロックの数、つまりブロックグループがいくつあるかどうかはどうすればわかりますか?

編集する:

申し訳ありません。私は大きな間違いをしました。記事を読んでみると、s_blocks_count現在使用しているブロックの数も含まれていると思いました。ただし、これには使用可能なブロックを含む合計が含まれます。だからs_blocks_count / s_blocks_per_group実際に動作します。

32ビット値は、使用済みブロック、使用可能ブロック、および予約済みブロックの両方を含む、システム内の総ブロック数を表します。値は(s_blocks_per_group *ブロックグループの数)以下でなければなりません。ボリュームサイズのため、最後のブロックグループのブロック数が s_blocks_per_group より少ない場合、前の計算よりも小さくなる可能性があります。各ブロックグループで定義されているブロックの合計と等しくなければなりません。

ベストアンサー1

おすすめ記事