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_block
0または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 より少ない場合、前の計算よりも小さくなる可能性があります。各ブロックグループで定義されているブロックの合計と等しくなければなりません。