セクタ・クラスタについて調べてみた。

## この記事について
組み込み会社で新人の私が、セクタ・クラスタについて勉強と一緒にまとめたものです。内容は、「__ファイルシステム__」や「__ストレージ（記憶装置）__」を調べている内にでてくる、「__セクタ__」「__クラスタ__」っていったい何なのか？と思っている方に向けた内容になっています。

## はじめに
まず、ざっくり結論から書いてしまうと

「__セクタ__」・「__クラスタ__」は __"記録"の"単位"__ です。
|-|
- 「__セクタ__」は主に __"ストレージ"__ の __"最小記録単位"__ となります。
- 「__クラスタ__」は主に __"ファイルシステム"__ の __"__(理論的な) __最小記録単位"__ となります。

……と書いたのですが
いきなり上記のように書かれても分からない所があると思うので
__「ここで言う"ストレージ"とは？」__ という点や __「"単位"とは分かったけど詳しくは？」__ など、調べた結果を簡単にまとめようと思います。

## ストレージとは？

日本語での __ストレージ(Storage)__ の意味/対訳は __「保管」__・__「貯蔵」__・__「収納場所」__ です。

スマートフォンやコンピュータなど、デバイスのデータ容量を調べる時に出てくる用語である「__ストレージ__」も同じ意味合いを持ち、__"データを保管するシステムや装置"__ のことを指します。

身の回りにある「ストレージ」をあげると、
「__磁気ディスク__( HDD / フロッピーディスク )」「__フラッシュメモリ__( SD / USB / SSD )」「__光ディスク__( CD / DVD )」などがあり、
私たちは、数多ものストレージに囲まれて、日々暮らしています。

## セクタとは
「__ストレージ__」に対して実際に「__ソフトウェア__」でデータを読み書きする場合、
データは、下図のように __"固定的な長さのブロック"__ に区切って管理されています。
その「ブロック」は「__セクタ__」という __"単位"__ で呼ばれており

「セクタ」は主に、"__ストレージ__" の "__最小記録単位__" となっています。
|-|

:::note info
#### "セクタ"の大きさ
セクタは __サイズ__ があり __"ストレージ"によってサポートの範囲が異なります__。
具体的なサイズは __512 Byte、1024 Byte、2048 Byte、4096 Byte__ の4種類存在します。

通常は __「512 Byte」__ が使われています。
|-|
:::
<img width="400" alt="Sector_1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3712966/000d19bb-3db8-a1f8-cc5a-c4d72eb3a5a5.png">

:::note info
### [補足] セクタの管理
<!--
__Q.__ __"複数のセクタ"__ をソフトウェアで __"１つのデータ"__ として読み書きするにはどうしたらよいか？
__A.__ セクタごとに __「セクタ番号」__ というものが存在しており、ソフトウェアはそれを指定することでデータの読み書きを行えている。
しかし、実際のファイル管理上では、セクタ単位で管理するとストレージに負荷がかかり処理も遅くなるため、__「クラスタ」__ 単位でファイルは管理されている。
-->

__Q.__ 「セクタ」はどうやって管理されているのか？
__A.__ ファイルシステム上では、MBRという物理セクタの先頭に書かれている論理開始セクタ番号と、PBSという論理セクタの先頭に書かれている構成情報を元に「 __セクタ番号（場所）__ 」を算出しています。

<!--開きたいファイルがあれば該当するセクタのデータへ素早くアクセスすることで、データの読み込みが高速化する
-->
:::


## クラスタとは
「ソフトウェア」や「ファイルシステム」に対して、
__"固定的な長さのブロック（セクタ）の集合体"__ に区切って管理されています。
セクタ単位での管理を行わないのは、データが大きくなった際の負荷を軽減するためなどがあげられます。
上記より、
「クラスタ」は主に"__ファイルシステム__" の "(理論的な) __最小記録単位__"となっています。
|-|



下図のように、__セクタが集合したもの__ を __「クラスタ」__ と言います。

<img width="500" alt="Sector_1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3712966/eaa5267b-c985-11b5-aaed-90f8ec5fdc91.png">

:::note info
#### "クラスタ"の大きさ
クラスタのサイズは、__セクタサイズ×n__ で決まり、
「__n__」の値は __"２の累乗かつ１以上の値"__ でなければなりません、
したがって、使用できる値は、 __1,2,4,8,...128__ ということになります。
:::
___
#### クラスタの役割

主に、データの保存場所を管理できます。
また、ファイル・ディレクトリ作成、データ書き込みの際に、必要なクラスタ数を消費し、使用/未使用の状況の管理もしています。

FAT領域におけるデータ管理は __「クラスタ番号」__ を使用して行われています。

:::note info
#### [追記]：ファイルの「サイズ」と「ディスク上のサイズ」の値が異なる理由

<img width="450" alt="Sector_1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3712966/74e4f93a-3045-967a-dddd-1e1c23f9a5b4.png">

__「サイズ:」__ は、__実際のデータサイズ__ を表示しております。
__「ディスク上のサイズ:」__ は、クラスタの合計サイズを表示しているため値が異なります。

:::

## 終わりの「ひとこと」
セクタとクラスタについて、ずらずらと説明を書いて記事として投稿していますが、ここに関してはサラッと流し読んで、実際にストレージの中身を見てみることを勧めたいです。
何が書いてあるかわからないと思いますが、セクタの中に16進数が無数に入っているのがみれるので、「あぁ、これがファイルになるのか」と映画マトリックスのような感じを味わってみてください。

ちなみに、私は「HxD」という16進エディタを使ってデータを見ていました。

次回は、「FAT12/16/32」について調べようと思います。
もし、よろしければまた見にきてください。


___

## 関連記事

ファイルシステムに関しての記事

https://qiita.com/Cente_mw/items/435458c4c233934d9f51


次回の記事はこちらです。

https://qiita.com/Cente_mw/items/4c3e6faeea8cc588400b


組み込み開発技術ブランド「Cente」

https://www.cente.jp/