コンピューティングにおいて、ファイルシステム(略称FSまたはfs)はファイルの編成とアクセスを管理します。ローカルファイルシステムは、同じコンピュータ上で実行されているアプリケーションにサービスを提供するオペレーティングシステムの機能です。[ 1 ] [ 2 ]分散ファイルシステムは、ネットワーク接続されたコンピュータ間でファイルアクセスを提供するプロトコルです。
ファイルシステムは、アプリケーションが大容量ストレージを共有できるようにするデータストレージサービスを提供します。ファイルシステムがない場合、アプリケーションは互換性のない方法でストレージにアクセスする可能性があり、リソースの競合、データの破損、データの損失につながる可能性があります。
ファイルシステムには様々な設計と実装 があり、それぞれ異なる構造や機能を持ち、速度、柔軟性、セキュリティ、サイズなど、結果として様々な特性が生じる。
ファイルシステムは、ハードディスクドライブ(HDD)、ソリッドステートドライブ(SSD)、磁気テープ、光ディスクなど、多くの種類のストレージデバイス向けに開発されてきました。[ 3 ]
コンピュータのメインメモリの一部を、ファイルシステムのストレージデバイスとして機能するRAMディスクとして設定することができます。tmpfsなどのファイルシステムは、仮想メモリにファイルを保存できます。
仮想ファイルシステムは、要求に応じて計算されるファイル(仮想ファイルと呼ばれる。例えば、procfsやsysfsによって提供されるファイル)へのアクセス、または別のバックエンドストレージにマッピングされるファイルへのアクセスを提供する。
1900年頃からコンピュータが登場する以前は、ファイルシステム、ファイリングシステム、ファイリングシステムという用語は、紙文書の整理、保管、検索方法を説明するために使用されていました。[ 4 ] 1961年までに、ファイルシステムという用語は、本来の意味に加えて、コンピュータ化されたファイリングにも適用されるようになりました。[ 5 ] 1964年までには、一般的に使用されるようになりました。[ 6 ]
ローカルファイルシステムのアーキテクチャは、特定のファイルシステム設計では概念が実際に分離されていない場合でも、抽象化のレイヤーとして説明できます。 [ 7 ]
論理ファイルシステム層は、アプリケーションプログラミングインターフェイス(API)を介して、オープン、クローズ、読み取り、書き込みなどのファイル操作に対する比較的高レベルのアクセスを提供し、操作を下位層に委任します。この層は、オープンファイルテーブルのエントリとプロセスごとのファイルディスクリプタを管理します。[ 8 ]ファイルアクセス、ディレクトリ操作、セキュリティ、および保護を提供します。[ 7 ]
仮想ファイルシステムはオプションのレイヤーであり、物理ファイルシステムの複数の同時インスタンスをサポートし、それぞれがファイルシステム実装と呼ばれます。[ 8 ]
物理ファイルシステム層は、ストレージデバイス(ディスクなど)への比較的低レベルのアクセスを提供します。データブロックの読み書き、バッファリングやその他のメモリ管理、ストレージメディア上の特定の場所へのブロックの配置制御などを行います。この層は、デバイスドライバまたはチャネルI/Oを使用してストレージデバイスを駆動します。[ 7 ]
ファイル名(またはファイルネーム)は、ファイルを利用するアプリケーションや場合によってはユーザーに対して、そのファイルを識別するために使用されます。
ファイル名は一意であるため、アプリケーションは特定の名前に対して必ず1つのファイルのみを参照できます。ファイルシステムがディレクトリをサポートしている場合、通常、ファイル名の一意性は各ディレクトリ内で強制されます。つまり、ストレージには同じ名前のファイルが複数存在できますが、同じディレクトリ内には存在できません。
ほとんどのファイルシステムはファイル名の長さを制限しています。
ファイルシステムによっては、ファイル名を大文字と小文字を区別して照合するものと、区別せずに照合するものとがあります。例えば、ファイル名MYFILEとファイル名は、myfile大文字と小文字を区別しない場合は同じファイルに対応しますが、大文字と小文字を区別する場合は異なるファイルに対応します。
最新のファイルシステムのほとんどは、ファイル名にUnicode文字セットの幅広い文字を含めることができます。ただし、デバイス、デバイスの種類、ディレクトリの接頭辞、ファイルパスの区切り文字、ファイルの種類などの特殊な属性を示すために使用される文字は制限される場合があります。
ファイルシステムは通常、ファイルをディレクトリ(フォルダとも呼ばれる)に整理することをサポートしており、ディレクトリはファイルをグループに分類します。
これは、ファイル名を目次内の索引、またはUnix系ファイルシステムのinodeに関連付けることによって実現できます。
ディレクトリ構造は、フラット(つまり線形)なものもあれば、ディレクトリ内にサブディレクトリと呼ばれるディレクトリを含めることで階層構造を可能にするものもある。
ディレクトリの任意の階層をサポートする最初のファイルシステムは、Multicsオペレーティングシステムで使用されました。[ 9 ] Unix ライクなシステムのネイティブ ファイルシステムも任意のディレクトリ階層をサポートしており、AppleのHierarchical File Systemと、クラシック Mac OS の後継であるHFS+、MS-DOS 2.0 以降のバージョンの MS-DOS およびMicrosoft WindowsのFATファイルシステム、Windows NTファミリーのオペレーティングシステムのNTFSファイルシステム、 OpenVMSのODS-2 (On-Disk Structure-2) およびFiles-11ファイルシステムの上位レベルなどがこれに該当します。
ファイルシステムは、データ(ファイルの内容)に加えて、関連するメタデータも管理します。メタデータには、以下のようなものが含まれますが、これらに限定されません。
ファイルシステムは、ファイルの内容とは別に、関連するメタデータを保存します。
ほとんどのファイルシステムは、1 つのディレクトリ内のすべてのファイルの名前を、そのディレクトリのディレクトリ テーブルという 1 つの場所に格納します。このディレクトリ テーブルは、他のファイルと同様に格納されることがよくあります。多くのファイルシステムでは、ファイルのメタデータの一部のみをディレクトリ テーブルに格納し、残りのメタデータはinodeなどの完全に別の構造に格納します。
ほとんどのファイルシステムは、特定のファイルに関連付けられていないメタデータも保存します。このようなメタデータには、未使用領域に関する情報(空き領域ビットマップ、ブロック可用性マップ)や不良セクタに関する情報が含まれます。多くの場合、割り当てグループに関するこのような情報は、割り当てグループ自体の中に保存されます。
NTFS、XFS、ext2、ext3 、一部のUFSバージョン、HFS+などのファイルシステムでは、拡張ファイル属性を使用して追加の属性を関連付けることができます。一部のファイルシステムでは、ドキュメントの作成者、ドキュメントの文字エンコーディング、画像のサイズなど、ユーザー定義の属性が提供されています。
ファイルシステムによっては、1つのファイル名に異なるデータコレクションを関連付けることができます。これらの個別のコレクションは、ストリームまたはフォークと呼ばれることがあります。AppleはMacintoshで長年フォークファイルシステムを使用しており、MicrosoftはNTFSでストリームをサポートしています。ファイルシステムによっては、1つのファイル名の下にファイルの複数の過去のリビジョンを保持します。ファイル名自体で最新バージョンを取得できますが、以前に保存されたバージョンには、「ファイル名;4」や「ファイル名(-4)」などの特別な命名規則を使用してアクセスし、4つ前のバージョンにアクセスできます。
ローカルファイルシステムは、ストレージのどの領域がどのファイルに属しているか、またどの領域が使用されていないかを追跡します。
ファイルシステムがファイルを作成する際、データ用の領域を割り当てます。一部のファイルシステムでは、初期領域割り当てと、ファイルのサイズが大きくなるにつれて追加される領域割り当てを指定できる、または必須となっています。
ファイルを削除すると、ファイルシステムはファイルの空き領域(別のファイルに使用可能な領域)が解放されたことを記録します。

ローカルファイルシステムは、信頼性と効率性を確保するためにストレージ領域を管理します。一般的に、ストレージデバイスの領域を、通常は複数の物理単位(つまりバイト)という粒度で割り当てます。たとえば、 1980年代初頭のApple DOSでは、140キロバイトのフロッピーディスク上の256バイトのセクタがトラック/セクタマップを使用していました。[ 10 ]
粒度が細かいため、粒度割り当ての倍数のサイズを持つまれなファイルを除き、各ファイルに未使用領域(スラック領域と呼ばれることもある)が生じます。 [ 11 ] 512バイトの割り当ての場合、平均未使用領域は256バイトです。64KB クラスタの場合、平均未使用領域は32KBです 。
一般的に、割り当て単位のサイズはストレージの設定時に決定されます。保存されるファイル数に比べてサイズが小さすぎると、アクセスオーバーヘッドが過剰になります。逆にサイズが大きすぎると、未使用領域が過剰になります。ストレージに格納されると予想されるファイルの平均サイズに基づいて割り当てサイズを選択すると、未使用領域を最小限に抑えることができます。

ファイルシステムがファイルを作成、変更、削除するにつれて、基盤となるストレージ表現が断片化される可能性があります。ファイルとファイル間の未使用領域は、連続していない割り当てブロックを占有することになります。
ファイルの内容を保存するために必要な領域を連続したブロックで割り当てることができない場合、ファイルは断片化されます。ファイルが削除されると、空き領域は断片化されます。[ 12 ]
断片化はエンドユーザーには見えず、システム自体は正常に動作します。しかし、ハードディスクドライブのように連続したブロックでより効率的に動作する一部のストレージハードウェアでは、断片化によってパフォーマンスが低下する可能性があります。ソリッドステートドライブなどの他のハードウェアは、断片化の影響を受けません。
ファイルシステムは、多くの場合、管理するデータへのアクセス制御をサポートしています。
アクセス制御の目的は、多くの場合、特定のユーザーが特定のファイルを読み取ったり変更したりすることを防止することにある。
アクセス制御は、プログラムによるアクセスを制限し、データが制御された方法で変更されるようにすることもできます。例としては、ファイルのメタデータやその他の場所に保存されたパスワード、およびパーミッションビット、アクセス制御リスト、または機能の形式によるファイル権限などが挙げられます。ファイルシステムユーティリティがメディアレベルでデータにアクセスして構造を再編成し、効率的なバックアップを提供する必要があるため、これらのユーティリティは通常、礼儀正しいユーザーには有効ですが、侵入者に対しては有効ではありません。
ファイルデータの暗号化方法は、ファイルシステムに組み込まれている場合があります。これは、ファイルシステムユーティリティがデータを効率的に管理するために暗号化シードを知る必要がないため、非常に効果的です。暗号化に依存するリスクとしては、攻撃者がデータをコピーして総当たり攻撃で復号化できる可能性があることが挙げられます。さらに、シードを紛失するとデータも失われます。

一部のオペレーティングシステムでは、システム管理者がディスククォータを有効にして、ユーザーによるストレージ容量の使用を制限できます。
ファイルシステムは通常、通常の操作時だけでなく、次のような例外的な状況においても、保存されたデータの一貫性を維持することを保証します。
例外的な状況からの復旧には、メタデータやディレクトリエントリの更新、バッファリングされたもののストレージメディアに書き込まれなかったデータの処理などが含まれる場合があります。
ファイルシステムは、次のような問題の分析を可能にするためにイベントを記録する場合があります。
多くのファイルシステムは、データをバイトストリームとしてアクセスします。通常、ファイルデータを読み取るには、プログラムがメモリバッファを用意し、ファイルシステムがメディアからデータを取得してバッファに書き込みます。書き込みでは、プログラムがバイトバッファを用意し、ファイルシステムがそれを読み取ってメディアに保存します。
一部のファイルシステム、あるいはファイルシステムの上に構築されたレイヤーでは、プログラムがレコードを定義できるため、プログラムはデータを整理されていないバイト列としてではなく、構造体として読み書きすることができる。
固定長レコード定義を使用する場合、n番目のレコードの位置を数学的に計算できるため、レコード区切り文字をデータから解析するよりも比較的高速です。
各レコードの識別子(キーとも呼ばれる)により、プログラムはストレージ内の位置に関係なくレコードの読み取り、書き込み、更新を行うことができます。このようなストレージでは、通常キーブロックとデータブロックを分離したメディアブロックの管理が必要です。ピラミッド構造を使用してレコードを検索することで、効率的なアルゴリズムを開発できます。[ 13 ]
通常、ファイルシステムは、ユーザーが様々なユーティリティプログラムを使って管理することができる。
一部のユーティリティを使用すると、ファイルシステムのインスタンスを作成、設定、削除できます。また、ファイルシステムに割り当てられた領域を拡張または切り詰めることもできます。
ディレクトリユーティリティは、ディレクトリエントリ(単数形:dentry)[ 14 ]の 作成、名前変更、削除、およびディレクトリに関連付けられたメタデータの変更に使用できます。ディレクトリユーティリティには、ディレクトリへの追加リンク(Unixではハードリンク)の作成、親リンク( Unix ライクなオペレーティングシステムでは"..")の名前変更、およびファイルへの双方向リンクの作成機能も含まれる場合があります。
ファイルユーティリティは、ファイルの作成、一覧表示、コピー、移動、削除、およびメタデータの変更を行います。データの切り捨て、領域割り当ての切り捨てまたは拡張、ファイルの追記、移動、およびインプレースでの変更も可能です。ファイルシステムの基盤となる構造によっては、ファイルの先頭への追記または先頭からの切り捨て、ファイルの途中へのエントリの挿入、またはファイルからのエントリの削除を行うメカニズムを提供する場合があります。ファイルシステムに削除復元機能がある場合、削除されたファイルの領域を解放するユーティリティもこのカテゴリに含まれます。
ファイルシステムによっては、空き領域の再編成、空き領域の安全な消去、階層構造の再構築といった操作を、アクティビティが最小限の時に実行するためのユーティリティを提供することで、これらの処理を延期するものがあります。ファイルシステムのデフラグメンテーションユーティリティはその一例です。
ファイルシステムユーティリティの最も重要な機能のいくつかは、管理機能であり、これには所有権の回避や基盤となるデバイスへの直接アクセスが含まれる場合があります。これには、高性能なバックアップとリカバリ、データレプリケーション、ファイルシステム内のさまざまなデータ構造や割り当てテーブルの再編成などが含まれます。
ユーティリティ、ライブラリ、およびプログラムは、ファイルシステムAPIを使用してファイルシステムに要求を行います。これには、データ転送、位置指定、メタデータの更新、ディレクトリの管理、アクセス指定の管理、および削除が含まれます。
小売システムでは、ストレージデバイス全体を単一のファイルシステムが占めるように構成されていることが多い。
別のアプローチとしては、ディスクをパーティション分割して、異なる属性を持つ複数のファイルシステムを使用できる方法があります。ブラウザのキャッシュやメールの保存に使用するファイルシステムは、小さな割り当てサイズで構成できます。これにより、ブラウザのアクティビティに典型的なファイルの作成と削除のアクティビティが、他のファイル割り当てに干渉しないディスクの狭い領域に留まります。別のパーティションは、比較的大きなブロックサイズでオーディオファイルやビデオファイルを保存するために作成できます。さらに別のパーティションは通常読み取り専用に設定され、定期的にのみ書き込み可能に設定できます。ZFSやAPFSなどの一部のファイルシステムは、共通の空きブロックプールを共有する複数のファイルシステムをサポートしており、各ファイルシステムに固定量のスペースを予約することなく、異なる属性を持つ複数のファイルシステムをサポートします。[ 15 ] [ 16 ]
3つ目のアプローチは、主にクラウドシステムで使用されるもので、「ディスクイメージ」を使用して、同じ属性を持つか否かにかかわらず、追加のファイルシステムを別の(ホスト)ファイルシステム内にファイルとして格納する方法です。一般的な例としては仮想化があります。ユーザーは、本番環境のWindows(NTFSを使用)上の仮想マシンで、実験的なLinuxディストリビューション( ext4ファイルシステムを使用)を実行できます。ext4ファイルシステムはディスクイメージ内に存在し、NTFSホストファイルシステム内ではファイル(ハイパーバイザと設定によっては複数のファイル)として扱われます。
単一システム上に複数のファイルシステムを持つことには、1つのファイルシステムが破損した場合でも、残りのファイルシステムは多くの場合無傷のままであるという利点があります。これには、システムファイルシステムがウイルスによって破壊された場合や、システムが起動しなくなった場合も含まれます。専用アクセスを必要とするファイルシステムユーティリティは、効率的に部分的に実行できます。さらに、デフラグメンテーションもより効果的に行える場合があります。ウイルススキャンやバックアップなどのシステムメンテナンスユーティリティも、部分的に処理できます。たとえば、前回のバックアップ以降にファイルが追加されていない場合は、ビデオを含むファイルシステムを他のすべてのファイルと一緒にバックアップする必要はありません。イメージファイルに関しては、マスター(オリジナル)イメージに書き込まれた「新しい」データのみを含む差分イメージを簡単に「スピンオフ」できます。差分イメージは、安全性の懸念(「使い捨て」システムとして、古いイメージを削除して新しいイメージを数秒で作成できるため、自動化された手順がなくても、破壊されたりウイルスに汚染されたりした場合でも迅速に復元できる)と、仮想マシンの迅速な展開(差分イメージはスクリプトを使用してバッチで迅速に生成できるため)の両方に使用できます。
ディスクファイルシステムは、ディスクストレージメディアが短時間でデータをランダムにアドレス指定できる能力を利用します。さらに、最初に要求されたデータに続くデータへのアクセス速度や、後続のデータも要求される可能性があることを考慮する必要があります。これにより、複数のユーザー(またはプロセス)が、データの順序に関係なく、ディスク上のさまざまなデータにアクセスできます。例としては、 FAT(FAT12、FAT16、FAT32)、exFAT、NTFS、ReFS、HFSおよびHFS+、HPFS、APFS、UFS、ext2、ext3、ext4、XFS、btrfs、Files-11、Veritas File System、VMFS、ZFS、ReiserFS、NSS、ScoutFSなどがあります。一部のディスクファイルシステムは、ジャーナリングファイルシステムまたはバージョン管理システムです。
ISO 9660とUniversal Disk Format (UDF)は、コンパクトディスク、DVD、Blu-rayディスクを対象とした一般的なフォーマットです。Mount Rainierは、Linuxカーネル2.6シリーズ以降、およびWindows Vista以降でサポートされているUDFの拡張機能で、DVDへの書き換えを容易にします。
フラッシュファイルシステムは、フラッシュメモリデバイスの特別な機能、パフォーマンス、および制限を考慮しています。ディスクファイルシステムは、基盤となるストレージメディアとしてフラッシュメモリデバイスを使用することがありますが、フラッシュデバイス専用に設計されたファイルシステムを使用する方がはるかに優れています。[ 17 ]
テープファイルシステムとは、ファイルをテープに保存するために設計されたファイルシステムおよびテープフォーマットのことです。磁気テープはシーケンシャルストレージメディアであり、ディスクに比べてランダムデータアクセス時間が著しく長いため、汎用ファイルシステムの作成と効率的な管理には課題があります。
ディスクファイルシステムでは、通常、マスターファイルディレクトリと、使用済みおよび空きデータ領域のマップが存在します。ファイルの追加、変更、削除を行うには、ディレクトリと使用済み/空きマップを更新する必要があります。データ領域へのランダムアクセスはミリ秒単位で計測されるため、このシステムはディスクに適しています。
テープは、非常に長いリール状の記録媒体を巻き取ったり巻き戻したりするために、直線運動を必要とします。このテープの動きは、読み書きヘッドをテープの一端からもう一端まで移動させるのに数秒から数分かかる場合があります。
そのため、マスターファイルディレクトリと使用マップは、テープを使用した場合、非常に低速で非効率的になる可能性があります。書き込み処理は通常、ブロック使用マップを読み取って書き込み可能な空きブロックを探し、使用マップとディレクトリを更新してデータを追加し、テープを進めてデータを正しい場所に書き込むという手順で行われます。ファイルへの書き込みが増えるたびに、マップとディレクトリを更新してデータを書き込む必要があり、ファイルごとに数秒かかる場合があります。
一方、テープファイルシステムでは、ファイルディレクトリをデータと混在させてテープ全体に分散させることが可能であり、これをストリーミングと呼ぶ。そのため、新しいデータを書き込むために時間のかかる繰り返しのテープ操作は不要となる。
しかし、この設計の副作用として、テープのファイルディレクトリを読み取るには、通常、テープ全体をスキャンして、散在するすべてのディレクトリエントリを読み取る必要があります。テープストレージに対応するほとんどのデータアーカイブソフトウェアは、テープカタログのローカルコピーをディスクファイルシステムに保存するため、テープメディアを再スキャンすることなく、テープにファイルをすばやく追加できます。ローカルのテープカタログコピーは、一定期間使用されない場合は通常破棄されるため、将来的にテープを使用するには、その時点でテープを再スキャンする必要があります。
IBMは、テープ用のファイルシステムとして「リニアテープファイルシステム」を開発しました。このファイルシステムのIBMによる実装は、オープンソース製品である「IBMリニアテープファイルシステム - シングルドライブエディション(LTFS-SDE)」としてリリースされています。リニアテープファイルシステムは、テープ上の専用パーティションを使用してインデックスのメタデータを記録するため、ディレクトリエントリがテープ全体に分散することに伴う問題を回避できます。
テープへのデータの書き込み、消去、フォーマットは、多くの場合、非常に時間のかかるプロセスであり、大容量テープでは数時間かかることがあります。[ a ]多くのデータテープ技術では、テープに新しいデータを上書きする前にテープをフォーマットする必要はありません。これは、シーケンシャルメディアへのデータの上書きが本質的に破壊的な性質を持つためです。
テープのフォーマットには時間がかかるため、通常はテープは事前にフォーマット済みで、テープの利用者は新しいテープを使用するたびに準備する手間を省くことができます。通常必要なのは、使用前にテープに識別用のメディアラベルを書き込むことだけですが、新しいテープを初めて使用する際に、ソフトウェアによってこのラベルも自動的に書き込まれる場合があります。
1970年代、ディスクやデジタルテープといった機器は、初期のマイクロコンピュータユーザーにとって高価すぎた。そこで、一般的なオーディオカセットテープを利用した、安価な基本データ保存システムが考案された。
システムがデータを書き込む必要がある場合、ユーザーはカセットレコーダーの「RECORD」ボタンを押し、次にキーボードの「RETURN」を押して、カセットレコーダーが録音を開始したことをシステムに通知するように指示されました。システムは、時間同期を提供するための音を書き込み、次にプレフィックス、データ、チェックサム、サフィックスをエンコードした音を変調しました。システムがデータを読み取る必要がある場合、ユーザーはカセットレコーダーの「PLAY」ボタンを押すように指示されました。システムはテープ上の音を聞き、同期として認識できる音のバーストが聞こえるまで待ちました。その後、システムは後続の音をデータとして解釈しました。データの読み取りが完了すると、システムはユーザーにカセットレコーダーの「STOP」ボタンを押すように通知しました。原始的な方式でしたが、(ほとんどの場合)機能しました。データは通常、名前のない形式で順次保存されましたが、一部のシステム(Commodore PETシリーズのコンピュータなど)ではファイルに名前を付けることができました。複数のデータセットを書き込むには、テープを早送りし、テープカウンターで次のデータ領域のおおよその開始位置を確認する必要がありました。ユーザーは、次のデータ領域の再生を開始する適切な位置を見つけるために、音声を聞き取る必要があったかもしれません。実装によっては、データに音声が混ざっているものもありました。
ファイル管理のもう1つの概念は、データベースベースのファイルシステムの考え方です。階層構造の管理の代わりに、またはそれに加えて、ファイルはファイルの種類、トピック、作成者、または同様の豊富なメタデータなどの特性によって識別されます。[ 18 ]
IBM DB2 for i [ 19 ] (以前は DB2/400 および DB2 for i5/OS として知られていた) は、オブジェクトベースのIBM i [ 20 ]オペレーティングシステム (以前は OS/400 および i5/OS として知られていた) の一部であるデータベースファイルシステムであり、単一レベルのストアを組み込んで IBM Power Systems (以前は AS/400 および iSeries として知られていた) 上で動作し、IBM i の元チーフサイエンティストである Frank G. Soltis によって設計されました。1978 年頃から 1988 年頃、Frank G. Soltis と IBM Rochester の彼のチームは、Microsoft などが後に達成できなかったデータベースファイルシステムなどの技術を設計し、適用することに成功しました。[ 21 ]これらの技術は非公式に「Fortress Rochester」として知られており、いくつかの基本的な側面では初期のメインフレーム技術から拡張されていましたが、技術的な観点からは多くの点でより進んでいました。
純粋なデータベースファイルシステムではないが、データベースファイルシステムのいくつかの側面を利用している他のプロジェクトをいくつか挙げる。
一部のプログラムは、複数のファイルシステム変更を行う必要があり、また、何らかの理由で変更が1つ以上失敗した場合は、変更を一切行わない場合があります。たとえば、ソフトウェアをインストールまたは更新するプログラムは、実行ファイル、ライブラリ、および/または構成ファイルを書き込むことがあります。書き込みの一部が失敗し、ソフトウェアが部分的にインストールまたは更新されたままになると、ソフトウェアが破損したり、使用できなくなったりする可能性があります。コマンドシェルなどの重要なシステムユーティリティの更新が不完全な場合、システム全体が使用不能な状態になることもあります。
トランザクション処理はアトミック性保証を導入し、トランザクション内の操作がすべてコミットされるか、トランザクションが中止されてシステムが部分的な結果をすべて破棄されることを保証します。つまり、クラッシュや停電が発生した場合でも、復旧後には保存された状態が一貫性を保ちます。ソフトウェアは完全にインストールされるか、失敗したインストールが完全にロールバックされますが、使用できない部分的なインストールがシステムに残ることはありません。トランザクションは分離性保証も提供します。つまり、トランザクション内の操作はトランザクションがコミットされるまでシステム上の他のスレッドから隠蔽され、システム上の干渉する操作はトランザクションと適切に直列化されます。
Windows は Vista 以降、トランザクション NTFSと呼ばれる機能でNTFSにトランザクション サポートを追加しましたが、現在ではその使用は推奨されていません。[ 22 ] UNIX システム向けのトランザクション ファイルシステムには、Valor ファイルシステム[ 23 ] 、 Amino [ 24 ] 、 LFS [ 25 ] 、 TxOS カーネル上のトランザクションext3ファイルシステム[ 26 ]など、多数の研究プロトタイプがあり、TFFS などの組み込みシステム向けのトランザクション ファイルシステムもあります。[ 27 ]
ファイルシステムトランザクションなしでは、複数のファイルシステム操作間で一貫性を確保することは困難、あるいは不可能です。ファイルロックは個々のファイルの同時実行制御メカニズムとして使用できますが、通常はディレクトリ構造やファイルメタデータを保護するものではありません。例えば、ファイルロックではシンボリックリンク上のTOCTTOU競合状態を防ぐことはできません。また、ファイルロックではソフトウェアアップグレードなどの失敗した操作を自動的にロールバックすることもできません。これにはアトミック性が必要です。
ジャーナリングファイルシステムは、ファイルシステム構造にトランザクションレベルの一貫性をもたらすための手法の一つです。ジャーナルトランザクションはOS APIの一部としてプログラムに公開されるものではなく、単一のシステムコールの粒度で一貫性を確保するために内部的にのみ使用されます。
データバックアップシステムは通常、トランザクション形式で保存されたデータの直接バックアップをサポートしていないため、信頼性が高く一貫性のあるデータセットの復旧が困難です。ほとんどのバックアップソフトウェアは、データセット全体内の複数のファイル間で共有されるトランザクション状態に関係なく、特定の時点以降に変更されたファイルを記録するだけです。この回避策として、一部のデータベースシステムは、その時点までのすべてのデータを含むアーカイブ状態ファイルを作成し、バックアップソフトウェアはそのファイルのみをバックアップし、アクティブなトランザクションデータベースとは直接やり取りしません。復旧には、バックアップソフトウェアによってファイルが復元された後、状態ファイルからデータベースを別途再構築する必要があります。
ネットワークファイルシステムは、リモートファイルアクセスプロトコルのクライアントとして機能し、サーバー上のファイルへのアクセスを提供するファイルシステムです。ローカルインターフェイスを使用するプログラムは、リモートのネットワーク接続されたコンピュータで階層ディレクトリとファイルを透過的に作成、管理、アクセスできます。ネットワークファイルシステムの例としては、NFS [ 28 ] AFS 、 SMBプロトコルのクライアント、およびFTPやWebDAVのファイルシステムのようなクライアントなどがあります。
共有ディスクファイルシステムとは、複数のマシン(通常はサーバー)がすべて同じ外部ディスクサブシステム(通常はストレージエリアネットワーク)にアクセスできるシステムのことです。ファイルシステムはそのサブシステムへのアクセスを調停し、書き込みの衝突を防ぎます。[ 29 ]例としては、 Red HatのGFS2、 IBM のGPFS(現在は Spectrum Scale として知られています)、DataPlow の SFS、SGIの CXFS 、Quantum CorporationのStorNext、Versity の ScoutFS などがあります。
一部のファイルシステムは、オペレーティングシステムの要素をファイルとして公開し、ファイルシステムAPIを介して操作できるようにします。これはUnix系オペレーティングシステムでは一般的であり、他のオペレーティングシステムでも程度は低いものの見られます。例としては、以下のようなものがあります。
フラットファイルシステムでは、サブディレクトリは存在せず、ファイルは階層構造なしにディスク上に保存されます。これはシンプルですが、ファイル数が増えるにつれて扱いにくくなり、関連するファイルをグループ分けするのが難しくなります。
メインフレームのDOS/360およびOS/360は、ディスクパック(ボリューム)上のすべてのファイルのエントリを、ボリューム目次(VTOC)と呼ばれるパック上のディレクトリに格納します。
RT-11などの一部のミニコンピュータのオペレーティングシステムは、トップレベルディレクトリが1つしかないフラットファイルシステムを採用していた。一方、RSX-11などの他のシステムは、トップレベルディレクトリとユーザーアカウント用のサブディレクトリをサポートしていたが、ユーザーアカウントディレクトリのサブディレクトリはサポートしていなかった。
ほとんどの8ビットマイクロコンピュータのオペレーティングシステムは、当初フラットファイルシステムを使用していました(例:Apple DOS、Atari DOS)。CP /Mマシンもフラットファイルシステムを使用しており、ファイルは16個のユーザー領域のいずれかに割り当てることができ、汎用ファイル操作はデフォルトですべての領域で動作するのではなく、1つの領域で動作するように絞り込まれます。これらのユーザー領域は、ファイルに関連付けられた特別な属性にすぎません。各領域に特定のクォータを定義する必要はなく、ディスクに空き容量がある限り、ファイルをグループに追加できます。
IBM PC DOS / MS-DOSのFATファイルシステムは、DOSバージョン2.0でサブディレクトリのサポートが追加されるまでは、フラットファイルシステムでした。
Macintosh向けの従来のMac OSは、バージョン2.1で階層型ファイルシステムが導入されるまで、フラットなMacintoshファイルシステムのみをサポートしていました。ファイル管理プログラムであるFinderは、部分的に階層化されたファイルシステムのような錯覚を生み出しました。この構造では、たとえ別のフォルダにあるように見えても、すべてのファイルに固有の名前が必要でした。
21世紀にフラットファイルシステムファミリーに加わったのが、 AmazonのS3です。これはリモートストレージサービスで、ユーザーがデータの保存方法をカスタマイズできるように、意図的にシンプルに設計されています。構成要素はバケット(容量無制限のディスクドライブを想像してください)とオブジェクト(標準的なファイルの概念に似ていますが、同一ではありません)のみです。オブジェクト名にほぼすべての文字(「/」を含む)を使用できること、および同一のプレフィックスに基づいてバケットの内容のサブセットを選択できることで、高度なファイル管理が可能になります。

コンピューティングにおいて、階層型ファイルシステムとは、ディレクトリを使用してファイルをツリー構造に整理するファイルシステムのことである。 [ 30 ]
階層型ファイルシステムでは、ディレクトリにはファイルと他のディレクトリ(サブディレクトリと呼ばれる)の両方に関する情報が含まれており、サブディレクトリはさらに他のサブディレクトリを指すことができ、以下同様です。[ 31 ]これはツリー構造、つまり階層として構成され、通常はルートが最上位に描かれます。ルートディレクトリは階層のベースであり、通常はディスク上の固定された場所に格納されます。
階層型ファイルシステムは、すべてのファイルに関する情報が単一のディレクトリに格納され、サブディレクトリが存在しないフラット型ファイルシステムとは対照的です。
現在、ほとんどすべてのファイルシステムは階層構造になっています。ファイルシステムとは、階層システムの具体的なインスタンスを指します。例えば、NTFS、HPFS、ext4はすべて、バッファリング、ファイル割り当て、ファイル復旧など、それぞれ異なる機能を備えた階層システムを実装しています。
オペレーティングシステム(OS)は通常、1つ以上のファイルシステムをサポートしています。OSとファイルシステムは非常に密接に連携しているため、両者を独立して説明するのは難しい場合があります。
OSは通常、ユーザーにファイルシステムへのアクセスを提供します。多くの場合、OSはUnixシェル、WindowsコマンドプロンプトとPowerShell、またはOpenVMS DCLなどのコマンドラインインターフェイスを提供します。また、 macOSのFinder、Windowsのファイルエクスプローラー、 GNOMEのGNOMEファイル、KDE PlasmaのDolphinなどのグラフィカルユーザーインターフェイスを備えたファイルブラウザーも提供することがよくあります。
Unix系オペレーティングシステムは仮想ファイルシステムを作成し、接続されているすべてのストレージデバイス上のすべてのファイルが単一の階層構造に存在するように見せます。つまり、これらのシステムではルートディレクトリが1つだけ存在し、システム上に存在するすべてのファイルはそのディレクトリのどこかに配置されます。Unix系システムは、ルートディレクトリとしてRAMディスクまたはネットワーク共有リソースを使用できます。
Unix系システムでは、各デバイスにデバイス名が割り当てられますが、これはデバイス上のファイルにアクセスする方法ではありません。別のデバイス上のファイルにアクセスするには、まず、それらのファイルがディレクトリツリーのどこに表示されるべきかをオペレーティングシステムに伝える必要があります。このプロセスは、ファイルシステムのマウントと呼ばれます。たとえば、CD-ROM上のファイルにアクセスするには、オペレーティングシステムに「このCD-ROMからファイルシステムを取得し、特定のディレクトリに表示してください」と指示する必要があります。オペレーティングシステムに指定されるディレクトリはマウントポイント と呼ばれ、たとえば/mediaのようになります。/mediaディレクトリは多くのUnix系システムに存在し(ファイルシステム階層標準で規定されています)、CD、DVD、USBドライブ、フロッピーディスクなどのリムーバブルメディアのマウントポイントとして使用することを目的としています。このディレクトリは空の場合もあれば、個々のデバイスをマウントするためのサブディレクトリが含まれている場合もあります。一般的に、ファイルシステムのマウントを承認できるのは管理者(つまりrootユーザー)のみです。
Unix系オペレーティングシステムには、マウントプロセスを支援し、新たな機能を提供するソフトウェアやツールがしばしば含まれています。これらの戦略の中には、その目的を反映して「自動マウント」と呼ばれるものもあります。
Linuxは多数のファイルシステムをサポートしていますが、ブロックデバイス上のシステムディスクによく使用されるファイルシステムとしては、ext*ファミリー(ext2、ext3、ext4)、XFS、JFS、btrfsなどがあります。フラッシュ変換レイヤー(FTL)やメモリテクノロジーデバイス(MTD)のない生のフラッシュメモリには、 UBIFS、JFFS2、YAFFSなどがあります。SquashFSは、一般的な圧縮読み取り専用ファイルシステムです。
以前のバージョンのSolarisでは、ブートファイルシステムと補助ファイルシステムに、デフォルトで(ジャーナリングやログ記録を行わない)UFSが使用されていました。Solarisは、UFSをデフォルトとしてサポートし、拡張しました。
他のファイルシステムのサポートと大幅な機能強化が時間とともに追加され、Veritas Software Corp. (ジャーナリング) VxFS、Sun Microsystems (クラスタリング) QFS、Sun Microsystems (ジャーナリング) UFS、Sun Microsystems (オープンソース、プール可能、128 ビット圧縮可能、エラー訂正) ZFS などが含まれる。
Solarisには、起動可能なVeritas VxFSの動作を可能にするカーネル拡張機能が追加されました。SunのSolaris 7では、UFSにログ記録(ジャーナリング)機能が追加されました。その後、 Solaris 10、Solaris Express、OpenSolaris、およびその他のオープンソース版Solarisオペレーティングシステムでは、起動可能なZFSがサポートされました。
論理ボリューム管理では、冗長性、容量、スループットの向上を目的として、ファイルシステムを複数のデバイスにまたがって使用できます。Solarisの従来の環境では、Solaris Volume Manager(旧称Solstice DiskSuite)が使用される場合があります。Solarisを含む複数のオペレーティングシステムでは、Veritas Volume Managerが使用される場合があります。最新のSolarisベースのオペレーティングシステムでは、 ZFSの仮想ストレージプールを活用することで、ボリューム管理の必要性が軽減されています。
macOS (旧称 Mac OS X)はApple File System (APFS)を使用しています。APFS は 2017 年に、従来の Mac OSから継承されたHFS Plus (HFS+)と呼ばれるファイルシステムに取って代わりました。Apple は HFS+ を「Mac OS Extended」とも呼んでいます。[ 32 ] HFS Plus はメタデータが豊富で大文字小文字を区別しないファイルシステムですが、(通常は)大文字小文字を区別しません。macOS は Unix をルーツとしているため、HFS Plus には Unix パーミッションが追加されました。HFS Plus の後のバージョンでは、ファイルシステム構造の破損を防ぐためにジャーナリングが追加され、外部のデフラグツールを必要とせずにファイルを自動的にデフラグするために、割り当てアルゴリズムに多くの最適化が導入されました。
ファイル名は最大255文字まで使用できます。HFS PlusはUnicodeを使用してファイル名を保存します。macOSでは、ファイルの種類は、ファイルのメタデータに保存されているタイプコード、またはファイル名の拡張子から取得できます。
HFS Plusには、Unixスタイルのハードリンク、Unixスタイルのシンボリックリンク、エイリアスの3種類のリンクがあります。エイリアスは、移動や名前変更が行われても元のファイルへのリンクを維持するように設計されており、ファイルシステム自体ではなく、ユーザーランドのファイルマネージャコードによって解釈されます。
2017年6月5日にAppleのWWDCイベントで発表されたmacOS 10.13 High Sierraは、ソリッドステートドライブ上でAppleファイルシステムを使用しています。
macOS は、NeXTSTEPを介してBSD Unix Fast File Systemから派生したUFSファイルシステムもサポートしていました。しかし、 Mac OS X Leopard以降、macOS は UFS ボリュームにインストールできなくなり、UFS ボリュームにインストールされた Leopard 以前のシステムを Leopard にアップグレードすることもできなくなりました。[ 33 ] Mac OS X Lion以降、UFS のサポートは完全に廃止されました。
macOS の新しいバージョンでは、Windows で一般的な従来のFATファイルシステム (16 と 32)の読み書きが可能です。また、Windows 用の新しいNTFSファイルシステムの読み取りも可能です。Mac OS X Snow Leopardより前のバージョンの macOS で NTFS ファイルシステムに書き込むには、サードパーティ製ソフトウェアが必要です。Mac OS X 10.6 (Snow Leopard) 以降では NTFS ファイルシステムへの書き込みが可能ですが、複雑なシステム設定の変更が必要です (この変更を自動化するサードパーティ製ソフトウェアが存在します)。[ 34 ]
最後に、macOS はMac OS X Snow Leopard バージョン 10.6.5 以降、exFATファイルシステムの読み書きをサポートしています。 [ 35 ]
OS/2 1.2では、高性能ファイルシステム(HPFS)が導入されました。HPFSは、異なるコードページでの大文字小文字を混在させたファイル名、長いファイル名(255文字)、ディスク領域のより効率的な使用、関連する項目をディスクボリューム上で近接して配置するアーキテクチャ、データの断片化の低減、エクステントベースの領域割り当て、ディレクトリ用のB+ツリー構造、および平均アクセス速度を向上させるためにルートディレクトリをディスクの中央に配置するなどの特長を備えています。ジャーナリングファイルシステム(JFS)は1999年にリリースされました。
PC-BSDはFreeBSDのデスクトップ版で、FreeNASと同様にFreeBSDのZFSサポートを継承しています。PC -BSDの新しいグラフィカルインストーラーは、ZFS上の/(ルート)およびRAID-Zプールのインストールと、Geliを使用したディスク暗号化を、最初から簡単かつ便利な(GUI )方法で処理できます。現在のPC-BSD 9.0+「Isotope Edition」は、ZFSファイルシステムバージョン5とZFSストレージプールバージョン28に対応しています。
ベル研究所の Plan 9 では、すべてをファイルとして扱い、すべてのオブジェクトにファイルと同様の方法でアクセスします (つまり、ioctlやmmapはありません)。ネットワーク、グラフィックス、デバッグ、認証、機能、暗号化、その他のサービスは、ファイルディスクリプタに対する I/O 操作を介してアクセスされます。9Pプロトコルは、ローカルファイルとリモートファイルの違いをなくします。Plan 9 のファイルシステムは、プロセスごとのプライベート名前空間を使用して構成されており、各プロセスが分散システムでリソースを提供する多数のファイルシステムを異なる視点で見ることができます。
Infernoオペレーティングシステムは、これらの概念をPlan 9と共有している 。

Windows は、 FAT、NTFS、exFAT、Live File System、およびReFSファイルシステムを使用します(最後の ReFS は、Windows Server 2012、Windows Server 2016、Windows 8、Windows 8.1、およびWindows 10でのみサポートされ、使用可能です。Windows は ReFS から起動することはできません)。
Windows は、ユーザー レベルでドライブ レターの抽象化を使用して、ディスクまたはパーティションを区別します。たとえば、パスC:\WINDOWS は、文字 C で表されるパーティション上のディレクトリWINDOWSを表します。ドライブ C: は、通常 Windows がインストールされ、起動されるプライマリハードディスク ドライブパーティションに最もよく使用されます。この「慣習」は非常に定着しており、オペレーティングシステムがインストールされているドライブが C であると想定する多くのアプリケーションにバグが存在します。ドライブ レターの使用、およびプライマリ ハードディスク ドライブ パーティションのドライブ レターとして「C」を使用する慣習は、文字 A と B が最大 2 台のフロッピー ディスク ドライブ用に予約されていたMS-DOSに遡ることができます。これは、1970 年代のCP/Mから派生し、最終的には 1967 年の IBM のCP/CMSに由来します。
FATファイルシステムファミリーは、 Windowsの全バージョン、MS-DOS / PC DOS、OS/2、DR-DOSなど、パーソナルコンピュータのほぼすべてのオペレーティングシステムでサポートされています。(PC DOSはMS-DOSのOEM版であり、MS-DOSは元々SCPの86-DOSをベースにしていました。DR-DOSはDigital ResearchのConcurrent DOSをベースにしており、これはCP/M-86の後継です。)したがって、FATファイルシステムは、ほとんどあらゆる種類と年代のコンピュータやデバイス間での汎用的なデータ交換フォーマットとして非常に適しています。
FATファイルシステムは、Standalone Disk BASICにおける(互換性のない)8ビットFATの前身と、短命に終わったMDOS/MIDASプロジェクトにそのルーツを持つ。
長年にわたり、ファイルシステムはFAT12からFAT16、そしてFAT32へと拡張されてきました。サブディレクトリ、コードページサポート、拡張属性、ロングファイル名など、さまざまな機能がファイルシステムに追加されています。Digital Researchなどのサードパーティは、削除追跡のオプションサポートや、ボリューム/ディレクトリ/ファイルベースのマルチユーザーセキュリティスキームを組み込み、ファイルやディレクトリのパスワード、読み取り/書き込み/実行/削除などのアクセス権限をサポートしています。これらの拡張機能のほとんどはWindowsではサポートされていません。
FAT12およびFAT16ファイルシステムには、ファイルシステムのルートディレクトリのエントリ数に制限があり、FATフォーマットされたディスクまたはパーティションの最大サイズにも制限がありました。
FAT32は、ファイルサイズが約4GBという制限を除けば 、FAT12とFAT16の制限を解消しているが、NTFSと比較すると依然として制限がある。
FAT12、FAT16、FAT32にもファイル名の文字数制限があり、拡張子(.exeなど)は3文字までとなっています。これは一般的に8.3文字のファイル名制限と呼ばれています。Windows 95およびWindows NT 3.5で導入された、FAT12、FAT16、FAT32のオプション拡張機能であるVFATは、長いファイル名(LFN)をFATファイルシステムに下位互換性を維持したまま保存することを可能にしました。
1993年にWindows NTオペレーティングシステムとともに導入されたNTFSは、 ACLベースのアクセス許可制御を可能にしました。NTFSがサポートするその他の機能には、ハードリンク、複数のファイルストリーム、属性インデックス、クォータ追跡、スパースファイル、暗号化、圧縮、およびリパースポイント(他のファイルシステムのマウントポイントとして機能するディレクトリ、シンボリックリンク、ジャンクション、リモートストレージリンク)などがあります。
exFATは、ファイルシステムのオーバーヘッドに関してNTFSよりもいくつかの利点があります。
exFATは、FAT12、FAT16、FAT32などのFATファイルシステムとの下位互換性はありません。このファイルシステムは、Windows XP、Windows Server 2003、Windows Vista、Windows 2008、Windows 7、Windows 8、Windows 8.1、Windows 10、Windows 11などの新しいWindowsシステムでサポートされています。
exFATはmacOSバージョン10.6.5(Snow Leopard)以降でサポートされています。[ 35 ] exFATのサポートを実装するにはライセンスが必要なため、他のオペレーティングシステムでのサポートは限られています。exFATはmacOSとWindowsの両方で完全にサポートされている唯一のファイルシステムで、4GBを超えるファイルを格納できます 。[ 36 ] [ 37 ]
Files-11は、 Digital Equipment CorporationのRSX-11、IAS、およびOpenVMSオペレーティングシステムで使用されているファイルシステムです。レコード指向のI/O、リモートネットワークアクセス、およびファイルバージョニングをサポートしています。オリジナルのODS-1レイヤーはフラットファイルシステムですが、ODS-2バージョンは階層型ファイルシステムであり、アクセス制御リストをサポートしています。
Files-11は、 TOPS-20やRSTS/Eといった以前のDigital Equipment Corporationのオペレーティングシステムで使用されていたファイルシステムと似ているが、それらよりもはるかに高度なものである。
VSAMの導入以前、OS/360システムではハイブリッド ファイルシステムが採用されていました。このシステムはリムーバブル ディスク パックを容易にサポートするように設計されていたため、1 つのディスク ( IBM 用語ではボリューム)上のすべてのファイルに関する情報は、ボリューム 目次(VTOC)と呼ばれるフラット システム ファイルに格納されていました。VTOC には、ファイルのすべてのメタデータが格納されます。その後、システム カタログの導入により階層的なディレクトリ構造が導入され、常駐ボリュームとリムーバブル ボリューム上のファイル (データセット) をオプションでカタログ化できるようになりました。カタログには、データセットを特定のボリュームに関連付ける情報のみが含まれています。ユーザーがオフライン ボリューム上のデータセットへのアクセスを要求し、適切な権限を持っている場合、システムは要求されたボリュームのマウントを試みます。カタログ化されたデータセットとカタログ化されていないデータセットの両方に、OPEN 要求に必要なボリューム ID が指定されていれば、カタログをバイパスして VTOC の情報を使用してアクセスできます。さらに後になって、アクセス速度を向上させるために VTOC にインデックスが作成されました。
VM/370のIBM Conversational Monitor System (CMS) コンポーネントは、仮想ディスク(ミニディスク)ごとに個別のフラットファイルシステムを使用します。ファイルデータと制御情報は分散して混在しています。アンカーとなるのは、マスターファイルディレクトリ(MFD) と呼ばれるレコードで、常にディスクの 4 番目のブロックに配置されます。当初、CMS は固定長の 800 バイトのブロックを使用していましたが、後のバージョンでは最大 4K のより大きなサイズのブロックを使用するようになりました。データレコードへのアクセスには 2 レベルの間接参照が必要で、ファイルのディレクトリエントリ (ファイルステータステーブル(FST) エントリと呼ばれる) が、個々のレコードのアドレスのリストを含むブロックを指し示します。
AS/400とその後継機種のデータは、単一レベルのストアにシステム仮想アドレス空間にマッピングされたシステムオブジェクトで構成されています。他のファイルシステムにあるディレクトリやファイルなど、多くの種類のオブジェクトが定義されています。ファイルオブジェクトは、他の種類のオブジェクトとともに、AS/400の統合リレーショナルデータベースのサポートの基盤を形成しています。
ファイルシステムは保存可能なデータ容量を制限する。これは一般的に、ファイルシステムが設計された時点におけるストレージデバイスの標準的なサイズと、近い将来に想定されるサイズによって決まる。
ストレージ容量はほぼ指数関数的に増加しているため(ムーアの法則を参照)、新しいストレージデバイスは、導入後わずか数年で既存のファイルシステムの限界を超えることがよくあります。そのためには、容量が絶えず増加する新しいファイルシステムが必要となる。
容量が増加すると、必要な機能も増え、それに伴って複雑さも増します。ファイルシステムの複雑さは、一般的に利用可能なストレージ容量に比例します。容量の問題はさておき、1980年代初頭の50KBから512KBのストレージ容量を持つ家庭用コンピュータのファイルシステムは、数百ギガバイトの容量を持つ現代のストレージシステムには適していません。同様に、現代のファイルシステムも、これらの初期のシステムには適していません。なぜなら、現代のファイルシステム構造の複雑さによって、初期のストレージシステムの限られた容量がすぐに消費されてしまうからです。
ファイルを現在とは異なるファイルシステムに保存することが、有利または必要となる場合があります。その理由としては、現在のファイルシステムの容量制限を超える容量要件の増加、ファイルシステムの制限を超えるパスの深さの増加、パフォーマンスや信頼性に関する考慮事項などが挙げられます。また、既存のファイルシステムをサポートしていない別のオペレーティングシステムへのアクセスを提供することも、理由の一つです。
場合によっては、その場で変換できますが、ファイルシステムを移行する方が、データのコピーを作成する必要があるため、より保守的で推奨されます。[ 41 ] Windows では、FAT および FAT32 ファイルシステムは convert.exe ユーティリティを使用して NTFS に変換できますが、逆はできません。[ 41 ] Linux では、ext2 を ext3 に変換(および逆変換)でき、ext3 を ext4 に変換(ただし逆変換は不可)できます。[ 42 ]また、ext3 と ext4 の両方をbtrfsに変換でき、元に戻す情報が削除されるまで逆変換できます。[ 43 ]これらの変換は、ファイル データ自体に同じ形式を使用し、メタデータを空き領域に移動することで可能になります。場合によっては、スパース ファイルサポートを使用します。[ 43 ]
移行には追加の容量が必要になるという欠点があるが、処理速度は速くなる可能性がある。最終的なファイルシステムを格納するメディアに未使用の空き容量がある場合が理想的だ。
例えば、FAT32ファイルシステムをext2ファイルシステムに移行する場合、まず新しいext2ファイルシステムを作成します。次に、FAT32ファイルシステムのデータをext2ファイルシステムにコピーし、古いファイルシステムを削除します。
元のファイルシステムを新しいファイルシステムが作成されるまで保持するのに十分な空き容量がない場合、別の方法として、作業領域(リムーバブルメディアなど)を使用する方法があります。この方法は時間がかかりますが、バックアップを作成できるという利点があります。
階層型ファイルシステムでは、ファイルへのアクセスは、ファイルを含むディレクトリの分岐リストであるパスによって行われます。ファイルシステムによって、パスの深さの制限は異なります。また、ファイルシステムには、個々のファイル名の長さにも制限があります。
ファイル名が長いファイルや、パスの階層が深いファイルをあるファイルシステムから別のファイルシステムにコピーすると、望ましくない結果が生じる可能性があります。これは、コピーを実行するユーティリティがその差異をどのように処理するかによって異なります。
ファイルシステムとは、オペレーティングシステムがディスクまたはパーティション上のファイルを追跡するために使用する方法とデータ構造のことです。つまり、ディスク上でファイルが整理される方法です。
は当面の間、依然として主要なストレージであり、SSDは容量の面で費用対効果が低い。
は「directory entry」の略です。dentryはルートからのパス内の特定のコンポーネントです。それら(ディレクトリ名またはファイル名)は、ファイルまたはディレクトリへのアクセスを提供します。
プールに追加し、その共有プールからストレージ領域を割り当てます。領域はすべてのファイルシステムとボリュームで利用可能であり、新しいストレージデバイスをプールに追加することで増加します。
はボリューム間での領域共有を導入しています。APFSでは、すべての物理ディスクはコンテナであり、内部に複数のボリュームを持つことができ、それらは同じ空き領域プールを共有します。