バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-external-storage-backnumber/
はじめに
FatFsのファイル上シミュレーションの話。
ディスクイメージを読み解く。
BPB(BIOS Parameter Block)を見ていく。
BPB(BIOS Parameter Block)について重要なパラメータを中心に簡単に説明。
実際に具体的な数値を見てみる。
セクタ、クラスタ、予約領域、FAT領域の情報が見えたり。
一部冗長性を持たせるパターンもあり得る点についても簡単に触れる。
(SDカードの場合はさほど冗長にはしないけど。)
登場人物
博識フクロウのフクさん
![指差しフクロウ](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん
![技術者太郎](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
BPB(BIOS Parameter Block)
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
前回のMBRのパラメータの一つである、
PT_LbaOfs
が0x3Fこと63だった。
これは63セクタ目にBPB(BIOS Parameter Block)が配置されていることを示している。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
じゃー、その63セクタ目を確認しに行こうか。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
そういえば、1セクタって何byteになってるの?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
今回はSDカードを想定して
1セクタ=512[byte]
にしてある。
よって、63セクタ目は
63*512=32256[byte]
の位置にあることになる。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
よし。32256[byte]に移動して、BPBのパラメータに分けてみよう。
![BS_JmpBoot、BS_OEMName、BPB_BytsPerSec、BPB_SecPerClus、BPB_RsvdSecCnt、BPB_NumFATs、BPB_RootEntCnt、BPB_TotSec16、BPB_Media、BPB_FATSz16、BPB_SecPerTrk、BPB_NumHeads、BPB_HiddSec、BPB_TotSec32、1セクタのbyte数、1クラスタのセクタ数、予約領域のセクタ数、FAT領域の数](https://www.simulationroom999.com/blog/wp-content/uploads/2021/04/02_FatFsのファイル上シミュレーションBPB-1024x357.png)
BPB(BIOS Parameter Block)で重要なパラメータ
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
いろいろパラメータがあるようだけど、
重要なヤツってのはどれになるの?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
まぁ、以下かな。
- BPB_BytsPerSec:セクタのbyte数
- BPB_SecPerClus:1クラスタのセクタ数
- BPB_RsvdSecCnt:予約領域セクタ数
- BPB_NumFATs:FAT領域の数
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
このパラメータから分かることって何になるの?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/考え中フクロウ.png)
BPBの直後から始まる予約領域のサイズと、
予約領域の直後から始めるFAT領域が分かるって感じかな。
まぁFAT領域に関しては、BPBの後ろ側にもうちょっとパラメータがあって、それも見ないと確定しないけど。
あとはAllocation Unitであるクラスタサイズをここで把握してないと、この後のパラメータの意味が解釈できなくなるな。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
まぁまずは具体的な数値を見てみようか。
BPB(BIOS Parameter Block)に埋まってたパラメータ
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
こんな感じのパラメータが埋まってるな。
- BPB_BytsPerSec:セクタのbyte数:0x200=512[byte]
- BPB_SecPerClus:1クラスタのセクタ数:8個:8*512[byte]=4096[byte]
- BPB_RsvdSecCnt:予約領域セクタ数:0x0041=65:65*512[byte]=33280[byte]
- BPB_NumFATs:FAT領域の数:1個
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
セクタが512[byte]、
クラスタが4096[byte]、
予約領域が33280[byte]、
ってのはわかるけど、
「FAT領域の数」ってのがイマイチ何のこといってるかわからないな・・・。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
SDカードとかだと大体1個なんだけど、
FAT領域が破損することを想定して多重化されてることがあるんだよ。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
「多重化されてる」?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
同じものを2か所以上に記録する感じ。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者03アップ.png)
あー、どっちかが壊れてももう片方が無事なら復旧できるってことか?!
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
そうそう
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
そんな仕様もあるのかー。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
次回はBPBの後半。
まとめ
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
まとめだよ。
- BPB(BIOS Parameter Block)について簡単に説明。
- 重要なパラメータだけ抽出。
- FatFsでの具体的な数値を抽出。
- セクタ、クラスタ、予約領域、FAT領域の数が分かる。
- FAT領域は破損を想定しており、冗長性を持たせ多重化されている場合がある。
- SDカードの場合は1個なことが多い。
バックナンバーはこちら。
コメント