檔案系統
此條目可參照英語維基百科相應條目來擴充。 |
計算機的文件系統是一種存儲和組織計算機數據的方法,它使得對其存取和查找變得容易,文件系統使用文件和樹形目錄的抽象邏輯概念代替了硬盤和光盤等物理設備使用數據塊的概念,用戶使用文件系統來保存數據不必關心數據實際保存在硬盤(或者光盤)的地址為多少的數據塊上,只需要記住這個文件的所屬目錄和文件名。在寫入新數據之前,用戶不必關心硬盤上的那個塊地址沒有被使用,硬盤上的存儲空間管理(分配和釋放)功能由文件系統自動完成,用戶只需要記住數據被寫入到了哪個文件中。
文件系統通常使用硬盤和光盤這樣的存儲設備,並維護文件在設備中的物理位置。但是,實際上文件系統也可能僅僅是一種訪問資料的界面而已,實際的數據可能是通過網絡協議(如NFS、SMB、9P等)提供的或者暫存於內存上,甚至可能根本沒有對應的文件(如proc文件系統)。
嚴格地說,文件系統是一套實現了數據的存儲、分級組織、存取和獲取等操作的抽象數據類型(Abstract data type)。
概述
[編輯]文件系統是一種用於向用戶提供底層數據存取的機制。它將設備中的空間劃分為特定大小的塊(或者稱為簇),一般每塊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。有些文件系統是行程文件系統(也有譯作日誌文件系統)或者追蹤文件系統。
光碟
[編輯]閃存文件系統
[編輯]閃存文件系統是一種設計用來在閃存上儲存文件的文件系統。隨着移動設備的普及和閃存容量的增加,這類文件系統越來越流行。
儘管磁盤文件系統也能在閃存上使用,但閃存文件系統是閃存設備的首選,理由如下:
- 擦除區塊:閃存的區塊在重新寫入前必須先進行擦除。擦除區塊會占用相當可觀的時間。因此,在設備空閒的時候擦除未使用的區塊有助於提高速度,而寫入數據時也可以優先使用已經擦除的區塊。
- 隨機訪問:由於在磁盤上尋址有很大的延遲,磁盤文件系統有針對尋址的優化,以儘量避免尋址。但閃存沒有尋址延遲。
- 寫入平衡(Wear levelling):閃存中經常寫入的區塊往往容易損壞。閃存文件系統的設計可以使數據均勻地寫到整個設備。
日誌文件系統具有閃存文件系統需要的特性,這類文件系統包括JFFS2和YAFFS。也有為了避免日誌頻繁寫入而導致閃存壽命衰減的非日誌文件系統,如exFAT。
數據庫文件系統
[編輯]文件管理方面的一個新概念是一種基於數據庫的文件系統的概念。不再(或者不僅僅)使用分層結構管理,文件按照他們的特徵進行區分,如文件類型、專題、作者或者亞數據進行區分。於是文件檢索就可以按照SQL風格甚至自然語言風格進行。
網絡文件系統
[編輯]網絡文件系統(NFS,Network File System)是一種將遠程主機上的分區(目錄)經網絡掛載到本地系統的一種機制。
與操作系統的關係
[編輯]DOS / Microsoft Windows支援的檔案系統
[編輯]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 及以前 | 可讀/可寫 | 不支援 | 不支援 | 可讀/可寫 |
2000 Windows XP Windows Vista Server 2003 Server 2008 (R2) Windows 7 Windows 8 Server 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[2]及Solaris的ZFS。
macOS(Mac OS X)的文件系統
[編輯]從1998年到2016年間使用HFS+,再早採用HFS。從2016年發布的macOS Sierra起,使用蘋果文件系統(APFS)。
Bell實驗室的PLAN9文件系統
[編輯]OpenVMS的文件系統
[編輯]OpenVMS為Wang Mainframe所使用的Operation System,以搭配Wang王安博士發明的Magnetic Drum的儲存設備。
IBM大型機MVS的文件系統
[編輯]參見
[編輯]參考文獻
[編輯]- ^ (英文) Giampaolo, Dominic. Practical File System Design with the Be File System (PDF). Morgan Kaufmann. 1999 [2010-12-27]. ISBN 1-55860-497-9. (原始內容 (PDF)存檔於2017-02-13).
- ^ (英文) AdvFS內部設計文件(AdvFS Design Docs). SourceForge.net. [2010-12-27]. (原始內容存檔於2020-06-02).