ファイルシステムとは何か

記憶装置に必要なもの

ファイルシステムとは、コンピュータがファイルを操作するための仕組みのことです。
ファイルシステムが適用されていなければ、データをファイルという形で扱えません
ファイルシステムは、記憶装置とデータを効率よくやりとりするために用いられます。
従って、記憶装置であるハードディスクやSSD、USBメモリ、SDカード等は、
基本的にファイルシステムを適用したうえで使います。

また、ファイルシステムはOSの構成要素でもあります。
従って、OSによって使用できるファイルシステムは違います
WindowsではNTFS、MacではAPFS、Linuxではext4など。
OSが対応していないファイルシステムの記憶装置を接続すると、フォーマットを求められます

なお、ファイルシステムはフォーマットと混同されがちですが、厳密には異なります。
「ファイルシステム」は、フォーマットの形式を指すのに対し、
「フォーマット」は、ファイルシステムを適用する作業を指します。

ファイルシステムの機能

ファイルの一元管理

ハードディスク等の記憶装置は、主記憶のメモリに比べて極めて広大な保存領域を持ちます。
このため、どこにどんなデータが保存されていて、どこが空いているのかといった、
データの入出力に関する管理が複雑になります。
ファイルシステムは、これらデータの入出力の管理を一元的に担うものです。

これにより、各ソフトウェアやユーザーが、
記憶装置内のデータの物理的な保存場所を意識する必要がなくなります。
セクタ番号といった物理的な場所ではなく、
ファイルという抽象化されたデータで取り扱うことができるようになります
ファイルが存在するのも、ファイル名で指定できるのも、ファイルシステムのおかげです。

保存領域の効率化

記憶装置の大きな保存領域を効率よく使うための機能も、ファイルシステムには備わっています。
たとえば、大きなサイズのファイルのデータを断片化して保存できます

断片化というと、デフラグとの関係から悪い印象を持たれるかもしれませんが、
もしデータを断片化できなければ、記憶装置内に常に連続した領域を確保しなければならず、
データを保存できない細切れの領域が多数発生します。
そうすると、多くの空き領域が存在するのに、データを保存できなくなってしまいます。

ファイルシステムが介在することで、
このような記憶装置内の複雑なデータ管理をすべて任せることができ、
記憶装置内に分散している空き領域を有効活用できます。

耐障害性の向上

ファイルシステムは、記憶装置のデータに関して非常に重要な役割を担っているので、
ファイルシステムが破損すると、ファイルにアクセスできなくなるなどの致命的な不具合が生じます
これを避けるため、ファイルシステムの耐障害性を向上させることは極めて重要で、
一部のファイルシステムにはジャーナリングという機能があります。

ジャーナリングとは、
ファイルシステム上にジャーナルと呼ばれるファイルシステムの管理情報の履歴を保存し、
予期せぬ電源断等の際には、
ファイルシステムの管理情報をジャーナルと照合することで、復旧を試みる仕組みのことです。
Windowsだと、NTFSで採用されています。

ただし、ジャーナリングで保護されるのは、ファイルシステムの管理情報だけです。
つまり、ファイルシステムにとって致命的な、ファイルシステムにアクセスできなくなることは防げますが、
ファイルが消失したり、ファイルのデータが破損してしまうことは防げません。

これらも含めて保護するには、フルデータジャーナリングに対応したファイルシステムが必要ですが、
フルデータジャーナリングを用いると、アクセス速度が大幅に低下するというデメリットがあります。
このため、多くのジャーナリングファイルシステムでは、
ファイルシステムの管理情報を保護するにとどめています。※メタデータジャーナリング。

ファイルシステムの種類

ファイルシステムには様々な種類があり、それぞれに特徴があります。

最も目立つ違いとしては、
ファイルシステムによって、扱えるファイルサイズや、容量の上限が異なります。
これは、ファイルシステムの割り当て可能なアドレスの上限が、
そのままファイルサイズや容量の上限になるからです。
容量の限界に達することで、ファイルシステムが更新されてきた歴史があります。

ファイルシステムには多くの種類がありますが、ここでは代表的なものだけを取り上げます。

NTFS

NTFSは、Windowsのシステムで使われているファイルシステムです。
「Windows NT」系のOSで用いられていたファイルシステムですが、
「Windows 2000」で広く普及し始め、「Windows XP」で事実上のスタンダードになりました。

従来のファイルシステム(FAT32)に比べ、大きな容量を扱えるうえに高速です。(単純な書き込みでは逆に遅かったりしますが)
しかも、前述のジャーナリング機能を持ち、不良セクタの管理をファイルシステムで行うなど、
耐障害性も向上しています。

逆に言えば、これらの特徴はMicrosoftがファイルシステムを独自に発展させた結果であり、
汎用性は低いです。
基本的に、NTFSはMicrosoftのWindowsでしか使えないと思っておいたほうがいいです。
一応、他のOSでNTFSの読み書きができることもありますが、
完全に互換性が保証されているわけではなく、不具合の原因になることがあります。

FAT32

FAT32は、「Windows 9x」系のOSで使われていたファイルシステムです。
NTFSが普及する前はメインでした。

フロッピーディスク時代から続くFATを拡張したものであり、
汎用性が高いファイルシステムです。
ほとんどの機器が対応しています。
今でも、SDHCカードやUSBメモリのようなリムーバブルディスクで使われています。

ただし、ファイルサイズは4GBまで、容量は32GBまで等、
今となっては制限が多いのがネックです。
また、FAT自体がシンプルなファイルシステムなので、ジャーナリング等の機能は持っていません。
このため、比較的ファイルシステムが壊れやすいです。

exFAT

exFATは、FAT32の懸案事項だった、ファイルサイズや容量の上限を撤廃したファイルシステムです。
もちろん、exFATにもアドレスの上限はあるわけですが、
実用上問題がないレベルにまで高められています。

FATに準じるシンプルなファイルシステムで、
様々な機器で用いられるリムーバブルディスクに適しています。
exFATは、WindowsでもMacでも使えるファイルシステムなので、
データの受け渡しに使う場合に最適です。

ただし、基本的にジャーナリング機能はありません。
また、exFATはファイルシステムとしての歴史が浅いので、
古い機器は対応していないことが多いです。
もしexFATが使えない場合は、汎用性に勝るFAT32を使うといいです。

ファイルシステムの構造

ファイルシステムの構造は、
ファイルシステムの管理情報と、ファイルのデータに大きく分けられます

記憶装置は、データをセクタ単位で管理していますが、
ファイルシステムは、データをクラスタで管理しています。
一般的なファイルのデータサイズからすると、セクタサイズは小さすぎるからです。

クラスタとは、セクタをいくつかまとめたものです。
NTFSだと、1クラスタは標準で4KBです。
論理セクタは基本的に512Bなので、1クラスタは8つのセクタで構成されていることになります。

ファイルを保存すると、クラスタ単位でファイルのデータが保存されます。
ファイルのプロパティで、「サイズ」と「ディスク上のサイズ」が異なるのは、このためです。
ディスクはファイルシステムによって管理されているので、
「ディスク上のサイズ」は、クラスタ単位で切り上げられます。

どのファイルがどのクラスタを使っているかといった、ファイルシステムの管理情報は、
ファイルのデータと分けて保存されます。
ファイルシステムによって扱えるデータサイズに上限があるのは、
ファイルシステムの管理情報が扱える情報量に制限があるためです。

これらファイルシステムの管理情報は、メタデータとも呼ばれます。
メタデータには、ファイル名や、作成/更新/アクセス日時、アクセス権等も含まれます。

ちなみに、メタデータとは、データに関するデータのことです。
この場合のメタデータは、ファイルシステムのためのデータです。
ファイルの実データとは異なります。

メタデータが破損すると、ファイルにアクセスできなくなります

chkdsk」のような、ファイルシステムを修正するプログラムは、
メタデータの不整合をなくし、ファイルにアクセスできるよう試みるものです。
ただし、この処理は自動的かつ強制的に行われるので、注意が必要です。

一方、ファイル復元ソフトは、
メタデータが失われたクラスタのデータを結合し、ファイルという形にして出力するものです。
ファイルシステムに問題が起きたときには、これらを使い分けることが重要です。

なお、上書きされたデータは、元に戻せません
ジャーナリングファイルシステムだったとしても、です。(目的が違います)
上書きされてしまったメタデータやクラスタを無視して、復旧作業を行うしかありません。