ファイルシステム
ファイルシステムとは、コンピューターが記憶装置上でファイルを管理するための仕組みである。
概要[編集]
ファイルシステムの無い記憶装置は、ただの長いバイト配列に過ぎない。データのひとまとまりに名前などをつけて扱えるようにするのが「ファイル」という概念であり、それを実現するための仕組みがファイルシステムである。具体的には、ファイル名、属性、データの格納位置と長さ、などを、ファイル内容のデータとは別にファイル管理データ(メタデータ)として記録しておき、データをファイルとして扱える状態にした記憶装置上のデータ構造のことである。
汎用的なファイルシステムは、それを構築する対象の記憶装置の特性を踏まえて設計する必要がある。(一例として、断片化を参照。)
ファイルシステムはOSと密接な関係にあるが、OSを持たないコンピューター[1]で扱えるものも広義のファイルシステムである。
記憶装置の全部または一部を特定のファイルシステムでフォーマットすることで、フォーマットした領域はそのファイルシステムで管理された状態になる。ハードディスクなどの場合は、論理パーティションを用いて同じ物理記憶装置上に複数のファイルシステムを構築できる。
構成要素と特性の例[編集]
ここで挙げるものは、ある程度一般的ではあるもののあくまでもごく単純なファイルシステムの成り立ちを示すものであり、実用的なファイルシステムにはこれら以外にもパフォーマンス最適化やエラー制御などのより高度な技術が含まれる。また、すべてのファイルシステムがこのような構造になっているわけではない。
ブート領域[編集]
ブート領域は厳密にはファイルシステムには含まれないが、ファイルシステムと密接な関係にあるためここで説明する。
ブート領域は、ファイルシステムが格納された記憶装置の特定の場所に記録されているデータ領域で、ファイルシステムを扱う際に最初に参照すべき情報が格納されている。通常はファイルシステムが管理する記憶領域の先頭にある。
メタデータ[編集]
ファイルシステム全体の情報を管理するデータ。ファイルシステムの管理領域のサイズ、ディレクトリー情報、ファイル属性情報、エクステント情報(後述)などが含まれる。通常、ファイルデータの中にはファイルの属性情報は持たせず[2]、このメタデータで管理する。
ファイルマネージャーから参照する「ファイル」の情報は、このメタデータの中にある情報である。
ブロック[編集]
ファイルシステムがファイルサイズ単位を扱う際に、1バイト単位では物理的にも論理的にも不便である。特に、磁気ディスクの場合は、セクターという単位で分割されているため1バイト刻みで管理しては効率が悪い。
そこで、ファイルシステムはブロック[3]という単位でファイルサイズを管理する。1990年頃のシステムでは512バイト[4]、2020年時点でよく利用されるファイルシステムでは4KBになっているものが多い。
大きな管理領域を扱う場合はブロックサイズも大きくした方が効率が良くなる場合がある。
エクステント[編集]
ある1つのファイルのデータが物理的に格納されている領域を表す情報。ブロック単位のオフセットとレングスで表される。
1ファイルが連続した領域に格納されない場合は、複数のエクステントで管理する。
ファイルの移動・コピー・削除[編集]
前述の仕組みを前提にすると、ファイルの移動・コピー・削除は次のような挙動となる。
ファイルの移動は、移動元と移動先のファイルシステムが同一かどうかで挙動が異なる。
同一ファイルシステム上へのファイル移動は、メタデータに含まれるファイルの論理的な格納場所、すなわち「パス」を更新するだけなので、メタデータの更新だけとなる。異なるファイルシステム間でのファイル移動は、移動元からは削除(後述)、移動先へは新規作成扱いとなる。
ファイルコピーは、コピー元のファイルのメタデータの情報は変更されず、コピー先へは新規作成扱いとなる。
ファイルの削除[5]は、通常はメタデータからファイル情報を削除するだけなので、消した後でもデータだけは復元が可能である。ただし、これを行うにはファイルシステムのメタデータを経由せずにデータ格納領域にアクセスする手段が必要となる。
断片化[編集]
ファイルシステムが前述のような構造になっていると、使用していくうちに断片化(フラグメンテーション)が増加していき、特にファイルサイズが大きくかつ細かく断片化されたファイルは読み書き効率が悪くなる。これを解消するために「デフラグ」を行い、可能な限りデータ連続した領域に格納されるようにファイルシステムを整理する。当然ながら、これはデータの物理的な移動を伴うので記憶装置の寿命とのトレードオフとなる。
HDDの場合は「デフラグ」する事により「回転待ち時間」を短縮し読み込み速度の向上が見込めるが、SSDの場合は物理的な動作による待ち時間が基本的に無い[6]ため「デフラグ」による読み込み速度の向上はあまり期待できない。むしろ記憶素子の寿命を縮めるとされている。
代表的なファイルシステム[編集]
FAT32[編集]
Windows95などの初期のWindowsで採用されていたファイルシステム。断片化が発生しやすいとか、4GBを超える単一ファイルが扱えないなどの欠点はあるが、Linuxでも扱える場合が多いため、USBメモリなどの外部記憶装置で採用される例が多い。
NTFS[編集]
現在のWindowsで一般的なファイルシステム。FATとの互換性は無いが、FATよりは断片化は発生しにくいとされている。
ext4[編集]
Linuxで一般的なファイルシステム。
脚注[編集]
外部リンク[編集]
- “素晴らしきファイルシステムのデータ管理 (1/2) - MONOist(モノイスト)(@IT)”. 2020年2月8日確認。
- “NTFS、FAT、および exFAT のデフォルトのクラスター サイズ (Windowsサポート - Microsoft)”. 2020年2月8日確認。