bananan_w (3061) の日記
パーティション解析
してみた。とりあえずまとめ
MBR の 0x1be から struct partition が4つ置いてある。struct partition の内容はこんな感じ。
unsigned char boot_ind; /* 0x80 - active */
unsigned char head; /* starting head */
unsigned char sector; /* starting sector */
unsigned char cyl; /* starting cylinder */
unsigned char sys_ind; /* What partition type */
unsigned char end_head; /* end head */
unsigned char end_sector; /* end sector */
unsigned char end_cyl; /* end cylinder */
unsigned char start4[4]; /* starting sector counting from 0 */
unsigned char size4[4]; /* nr of sectors in partition */
でー。hda5 以上なデバイスには論理パーティションを使うのだけどこれはちょっと特殊で、以下のようになっている。
hda1-4 のいずれかを拡張パーティションとして使用し、その拡張パーティションを論理的に分割して、論理パーティションとして使用する。
拡張パーティションの最初のセクタは MBR と同様のフォーマットになっていて、0x1be から struct partition の最初のものが最初の論理パーティションの先頭セクタのアドレスになっている。2番目の struct partition には2番目の論理パーティションの情報を格納するセクタアドレスが格納されている。
2番目の struct partition に格納されたアドレスのセクタも MBR と同様のフォーマットになっていて、0x1be に 2番目の論理パーティションの先頭セクタアドレスが入っていて、2番目の struct partition に3番目の論理パーティションの情報を格納するセクタアドレスが格納されているます。
このようにチェーンを生成することで、論理パーティションを構成されているのであるます。