「FAT ファイルシステム」について調べてみた。

## この記事について

組み込み会社で新人の私が、ファイルシステムに関して勉強がてら、
「SD」や「USB」など、記憶装置をフォーマットする際に出てくる「FAT」ってなんだろ軽く知りたいなという人向けにまとめてみたものです。

## まず「ファイルシステム」とは？

記憶装置（半導体メモリや磁気ディスク、光学ディスクなど）にデータを記録・管理するための方式です。
|-|

__日常生活で例えると、__
書類をバインダーや棚に格納して管理するのと同じ様に記憶装置上でデータをファイル、ディレクトリの形式で管理をすることが可能なものです。

__またパソコンの話で例を上げると、__
Aドライブに存在するBディレクトリ下のC.TXTファイルを「A：\B\C.TXT」と言ったフルパスで特定・管理をすることができるものです。

___
### ファイルシステムはどこで使う？

ファイルシステムは、
ハードディスクやフラッシュメモリドライブなどのストレージデバイスに保存されたファイルを扱うために使われます。

:::note info
「__File（ファイル）__」とは、
 何らかのデータ以外に、__ファイル名、拡張子、作成日時などの情報を持っており、コンピュータでデータを扱いやすくしたもの__ です。
 動画や写真、テキストなどが含まれます。
:::
[](
そのため私たちは普段、ソフトウェアを使用したり動画の保存や再生するとき、気が付かないうちにファイルシステムを使っているのです。
)
___
## 「FAT（ファット）」とは何なのか？

「FAT」とは、
「File Allocation Table （訳：ファイル配置テーブル）」の略、データの配置を管理する手段であり、ディスク内のファイルの位置情報などを記録するための領域(テーブル)です。
|-|

それがそのままファイル・システムの名前になり、「__FAT ファイルシステム__」となっています。

:::note info
「__FAT FileSystem（ファット ファイルシステム）__」は、
Microsoft社が開発したファイルシステムであり、1977年に「FAT12」が開発されて以降、FATをベースとした「FAT16」，「FAT32」，「exFAT」といった新しい規格が開発されています。
:::

ちなみに、このファイルシステムが事実上の標準となったのは
MS-DOS[(Microsoft disk operating system)](#注釈 "MS-DOS：米国マイクロソフト社が16bit・32bitパソコン用に開発したオペレーティングシステム
")の時代（1981年~）からで、以前はMicrosoft DISK-BASICのファイルシステムであったようです。

:::note info
__ファイルシステムの種類について__
ファイルシステムは数多くの種類が存在しており、
- 「**windows系**」(Microsoftが開発したファイルシステム）
  - ーーーーーーーーーーーーーーーーーーーーーーー
    - 「**FAT**」（File Allocation Table）
    - 「**NTFS**」（New Technology File System）
    - 「**exFAT**」（Extended File Allocation Table）
  - ーーーーーーーーーーーーーーーーーーーーーーー
- 「**LinuxなどのUnix系**」
  - ーーーーーーーーーーーーーーーーーーーーーーー
    - 「**Ext**」（Extended File System）
  - ーーーーーーーーーーーーーーーーーーーーーーー
- 「**Mac OS** や **iOS系**」(Appleが開発したファイルシステム）
  - ーーーーーーーーーーーーーーーーーーーーーーー
    -  「**HFS**」（Hierarchical File System）
  - ーーーーーーーーーーーーーーーーーーーーーーー

など上記は代表的なファイルシステムの一部ですが、
製品ごとに使用をしているファイルシステムは違ってきます。
:::

:::note info
### 「FAT」領域について

まずメモリは、
下図のように「MBR」「FAT」「DATA」など、各管理領域が存在しており
そのうちの<font color='#CCCC66'>__黄色のFAT1、FAT2__</font>の所が、FATの領域になります。
※「FSINFO」はFAT32のみ存在する。

このFAT領域では、「**データ領域の割り当て表**」を作成しています。

<img width="550" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3712966/011e4bd5-43a8-1ee9-32cf-68177cc17640.png">

:::

## 「FAT○○」の違いは？

FAT12/16/32、各それぞれの違いは下表のようになっています。

<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3712966/950b34a9-55ed-09c1-2197-38da2ea0656c.png">


- 「__FAT12__ 」は、__12bit__ のFATを持っております。
現在では、ほとんど使われることはないと思いますが、主にフロッピーディスクや小容量のメモリカードに使われています。
- 「__FAT16__ 」は、__16bit__ に拡張されたFATを持っております。
登場した当時、対応OSが「Windows95」や「Windows3.1」などになり、主に小容量のメモリカード(SDカードなど）へ使われるようになります。
- 「__FAT32__ 」は、__32bit__ 化されたFATであります。
FAT16と比べて、最大容量が2TBと大きく「ディスクを効率的に使用できる」特徴があります。
また、FAT32の登場は1996年~となりますが、現在でも「windowsとmacの両方で認識ができる点」や「USBメモリをブート可能にする点」で使われたりします。

:::note warn
最大容量が2TBを超える場合や、最大ファイルサイズが4GBを超えるといった、ボリュームとファイルサイズの制限、ほとんどすべてのプラットフォームで動作させたい場合は「__exFAT__」を使用する必要があります。
:::

<!--
上記で出てきた、FAT12/16/32については以下の記事に詳しく書いています。

https://qiita.com/A_Nakajima/private/8928f4dcdf9e05674243
-->

## 終わりの「ひとこと」
この記事を書くまでは「FAT」という言葉すら知らなかったのですが、今ではFATファイルシステムを使った組み込みの製品は日常生活でそこらへんにゴロゴロあり、縁の下の力持ち的な存在でこっそり私たちの生活に溶け込んでいたのだなと、しみじみ感じました。
皆さんも、知識を入れて縁の下の存在に気が付いたら少しだけ目を向けてみてください。
ちょっとだけ日常に深みが出てくると思います。

次回は、「セクタ・クラスタ」について調べようと思います。
もし、よろしければまた見にきてください。

## 関連記事


次の記事はこちらです。

https://qiita.com/Cente_mw/items/78809f109377c40534f7


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

https://www.cente.jp/
___
#### 注釈
[1] : MS-DOS（Microsoft disk operating system）：米国マイクロソフト社が16bit・32bitパソコン用に開発したオペレーティングシステム