文件系統

電腦的文件系統是一種存儲和組織電腦數據的方法，它使得對其存取和查找變得容易，文件系統使用文件和樹形目錄的抽象邏輯概念代替了硬碟和光碟等物理設備使用數據塊的概念，使用者使用文件系統來保存數據不必關心數據實際保存在硬碟（或者光碟）的地址為多少的數據塊上，只需要記住這個文件的所屬目錄和文件名。在寫入新數據之前，使用者不必關心硬碟上的那個塊地址沒有被使用，硬碟上的存儲空間管理（分配和釋放）功能由文件系統自動完成，使用者只需要記住數據被寫入到了哪個文件中。

文件系統通常使用硬碟和光碟這樣的存儲設備，並維護文件在設備中的物理位置。但是，實際上文件系統也可能僅僅是一種訪問資料的界面而已，實際的數據可能是通過網路協議（如NFS、SMB、9P等）提供的或者暫存於記憶體上，甚至可能根本沒有對應的文件（如proc文件系統）。

嚴格地說，文件系統是一套實現了數據的存儲、分級組織、存取和獲取等操作的抽象數據類型（Abstract data type）。

## 概述

<image>

文件系統是一種用於向使用者提供底層數據存取的機制。它將設備中的空間劃分為特定大小的塊（或者稱為簇），一般每塊512位元組。數據存儲在這些塊中，大小被修正為占用整數個塊。由文件系統軟體來負責將這些塊組織為文件和目錄，並記錄哪些塊被分配給了哪個文件，以及哪些塊沒有被使用。

不過，文件系統並不一定只在特定存儲設備上出現。它是數據的組織者和提供者，至於它的底層，可以是磁碟，也可以是其它動態生成數據的設備（比如網路設備）。

### 文件名

在文件系統中，文件名是用於定位存儲位置。大多數的文件系統對文件名的長度有限制。在一些文件系統中，文件名是大小寫不敏感（如「AAA」和「aaa」指的是同一個文件）；在另一些文件系統中則大小寫敏感。大多現今的文件系統允許文件名包含非常多的Unicode字符集的字符。然而在大多數文件系統的界面中，會限制某些特殊字符出現在文件名中。（文件系統可能會用這些特殊字符來表示一個設備、設備類型、目錄前綴、或文件類型）然而，這些特殊的字符會允許存在於用雙引號內的文件名。方便起見，一般不建議在文件名中包含特殊字符。

### 檔案相關資料（Metadata）

其它文件保存資訊常常伴隨著文件自身保存在文件系統中。文件長度可能是分配給這個文件的區塊數，也可能是這個文件實際的字節數。文件最後修改時間也許記錄在文件的時間戳中。有的文件系統還保存文件的創建時間，最後存取時間及屬性修改時間。（不過大多數早期的文件系統不記錄文件的時間資訊）其它資訊還包括文件設備類型（如：區塊數，字符集，套接口，子目錄等等），文件所有者的ID，組ID，還有存取權限（如：只讀，可執行等等）。

### 安全訪問

針對基本文件系統操作的安全訪問可以通過訪問控制列表或capabilities實現。研究表明訪問控制列表難以保證安全，這也就是研發中的文件系統傾向於使用capabilities的原因。然而目前多數商業性的文件系統仍然使用訪問控制列表。

## 類型

### 磁碟文件系統

磁碟文件系統是一種設計用來利用數據存儲設備來保存電腦文件的文件系統，最常用的數據存儲設備是磁碟驅動器，可以直接或者間接地連接到電腦上。例如：檔案配置表（FAT12、FAT16、FAT32、exFAT）、New Technology File System、分層檔案系統HFS、HFS Plus、延伸檔案系統（ext1、ext2、ext3、ext4）、ODS、btrfs、XFS、UFS、ZFS。有些文件系統是行程文件系統（也有譯作日誌文件系統）或者追蹤文件系統。

#### 光碟

ISO 9660和UDF被用於CD、DVD與藍光光碟。

### 快閃記憶體文件系統

快閃記憶體文件系統是一種設計用來在快閃記憶體上儲存文件的文件系統。隨著行動裝置的普及和快閃記憶體容量的增加，這類文件系統越來越流行。

儘管磁碟文件系統也能在快閃記憶體上使用，但快閃記憶體文件系統是快閃記憶體設備的首選，理由如下：

- 擦除區塊：快閃記憶體的區塊在重新寫入前必須先進行擦除。擦除區塊會占用相當可觀的時間。因此，在設備空閒的時候擦除未使用的區塊有助於提高速度，而寫入數據時也可以優先使用已經擦除的區塊。
- 隨機訪問：由於在磁碟上尋址有很大的延遲，磁碟文件系統有針對尋址的優化，以儘量避免尋址。但快閃記憶體沒有尋址延遲。
- 寫入平衡（Wear levelling）：快閃記憶體中經常寫入的區塊往往容易損壞。快閃記憶體文件系統的設計可以使數據均勻地寫到整個設備。

日誌文件系統具有快閃記憶體文件系統需要的特性，這類文件系統包括JFFS2和YAFFS。也有為了避免日誌頻繁寫入而導致快閃記憶體壽命衰減的非日誌文件系統，如exFAT。

### 資料庫文件系統

文件管理方面的一個新概念是一種基於資料庫的文件系統的概念。不再（或者不僅僅）使用分層結構管理，文件按照他們的特徵進行區分，如文件類型、專題、作者或者亞數據進行區分。於是文件檢索就可以按照SQL風格甚至自然語言風格進行。

例如BFS和WinFS。

### 網路文件系統

網路文件系統（NFS，Network File System）是一種將遠程主機上的分區（目錄）經網路掛載到本地系統的一種機制。

## 與作業系統的關係

### DOS / Microsoft Windows支援的檔案系統

<image>

Windows｜FAT12/FAT16｜FAT32/VFAT｜FAT64/exFAT｜NTFS

Windows 3.x或更早（MS-DOS 6.22）（PC-DOS 7.0）｜可讀/可寫｜不支援｜不支援｜不支援

Windows 95｜可讀/可寫｜不支援｜不支援｜不支援

Windows 95（OSR2以後）Windows 98（含SE）ME｜可讀/可寫｜可讀/可寫｜不支援｜不支援

Windows NT 4.0 及以前｜可讀/可寫｜不支援｜不支援｜可讀/可寫

2000Windows XPWindows VistaServer 2003Server 2008 (R2)Windows 7Windows 8Server 2012 (R2)Windows 8.1 Windows 10｜可讀/可寫｜可讀/可寫｜可讀/可寫｜可讀/可寫

Windows CE｜可讀/可寫｜可讀/可寫｜可讀/可寫｜不支援

注意：除非NT4安裝了FAT32 For Windows NT 4.0否則該系統不支援FAT32

### Linux支援的檔案系統

隨著Linux的不斷發展，它所支持的文件系統也在迅速擴充，Linux系統核心可以支持十多種文件系統類型：Btrfs、JFS、ReiserFS、exFAT、ext、ext2、ext3、ext4、XFS、ISO 9660、Minix、MSDOS、UMSDOS、VFAT、NTFS（Linux Kernel內建的NTFS驅動程式，寫入功能不穩定）、HPFS、NFS、SMB、SysV、PROC等。

注意：部分Linux發行版的Kernel預設不編譯Kernel內建的NTFS文件系統支援，常見的在Linux下讀寫NTFS的解決方法是安裝NTFS-3G或ufsd等NTFS驅動程序。部分Linux發行版對NTFS的支援度並不高。

### UNIX及BSD作業系統下的文件系統

柏克萊加州大學開發早期的伯克利快速文件系統（Berkeley Fast File System），再由各UNIX廠商開發不同的文件系統，包括IRIX上的XFS、IBM AIX的JFS、HP HP-UNIX的VxFS、迪吉多Tru64的AdvFS及Solaris的ZFS。

### macOS（Mac OS X）的文件系統

從1998年到2016年間使用HFS+，再早採用HFS。從2016年發布的macOS Sierra起，使用蘋果文件系統（APFS）。

### OpenVMS的文件系統

OpenVMS為Wang Mainframe所使用的Operation System，以搭配Wang王安博士發明的Magnetic Drum的儲存設備。