バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-external-storage-backnumber/
はじめに
FatFsのファイル上シミュレーションの話。
ディスクイメージを読み解く。
今回はファイルの内容を確認してみる。
登場人物
博識フクロウのフクさん
![指差しフクロウ](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
test.txtの内容のクラスタ位置
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
前回、確認したtest.txtの先頭クラスタ番号は3だった。
そして、ルートディレクトリエントリが配置されている先頭クラスタは2。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
たしかにそうだったね。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
ということは、ルートディレクトリエントリがあるクラスタ2のすぐ直後にあるってことか。
クラスタのサイズが4096[byte]で
ルートディレクトリエントリが0x90000[byte]の位置にあるから、
単純に0x90000[byte]に4096[byte]を足した、0x91000[byte]がクラスタ3ってことになって、
test.txtの内容が記載されてるってことか。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/まるフクロウ.png)
その通り。
test.txtの内容確認
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
じゃ、0x91000[byte]の位置に飛んで、
test.txtの内容を確認してみよう。
![61 61 61 61 61 61 61 61 …](https://www.simulationroom999.com/blog/wp-content/uploads/2021/04/02_test.txtの内容-721x1024.png)
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者03アップ.png)
お!
ちゃんとFatFsで書き込んだ0x61=’a’が連続で埋まってるね!
指定した7000[byte]になってるし。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
何となくファイルとファイルの中身の関係がわかった気がするよ。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/考え中フクロウ.png)
さて、本当にそうなか?
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
(なんだ?この含みのある問いは・・・。)
クラスタ越えのファイルについて
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
今回の於いて1クラスタのサイズは4096[byte]。
クラスタは読み書き単位。
そして、test.txtは7000[byte]で1クラスタには収まっていない。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
言われてみれば・・・。
1ファイルだから連続するような仕様になってるってこと?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
たまたま、連続に配置できるようにクラスタが空いてたから連続になってるだけかもねー。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」10アップ.png)
7000[byte]を書き込む際に連続した空きクラスタが無いとどうなるんだ???
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
まぁ答えを言ってしまうと
「FAT領域でクラスタチェーンを管理している」
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
以前もそんなこと言ってたね。
たしか、「ファイルサイズの伸縮を実現している」とかなんとか。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
たしかここで言ってたと思う。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/びっくりフクロウ.png)
おー!
ちゃんと覚えていたか!
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
そう言ってたのを覚えていただけで、
なんのこと言ってるかはわからないけどねー。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
というわけで次回はFAT領域のクラスタチェーンについて見てみよう。
まとめ
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
まとめだよ。
- test.txtの内容のクラスタ位置を確認。
- ファイルの中身を確認。
- 指定した7000[byte]のデータが並んでいたのを確認。
- しかし、7000[byte]が並んでいるのたまたま。クラスタの空き方によっては並ぶ保証は無い。
- FAT領域のクラスタチェーンでクラスタの関係性を表現している。
バックナンバーはこちら。
コメント