FlossDoc: 請協力 GPLv3 的中文翻譯工作。

XFS

FlossDoc,自由中文開源知識庫

(重定向自SGI XFS)
Jump to: navigation, search

XFS 是一個由 SGI (Silicon Graphics, Inc) 創建原供其 IRIX 作業系統使用的日誌式檔案系統 (journaling file system),後被移植至 Linux 中。XFS 特別善長於大型檔案的處理和提供流暢的資料傳遞。[1]

目录

特點

64-bit 檔案系統

作為一個 64-bit 檔案系統,XFS 檔案系統的大小上限可達 8 EiB。但在 32-bit 系統的 Linux 上,只能支援最 16 TiB 的容量。

日誌功能 (journaling)

XFS 提供 metadata 日誌功能,令斷電或系統當掉時仍能保除檔案系統一致性。其邏輯性 (logical) 日誌記錄將會進行的高階 (high level) 檔案系統操作,而非一般物理 (physical) 日誌儲存更動區塊的複本。而日誌的更新亦以非同步 (asynchronous) 進行以避免降低檔案系統速度。

Allocation Group

UFSExt2 差不多,XFS 把整個檔案系統劃分多個大小相同叫作 allocation group 的區域。每個 allocation group 獨立管理自己的 inode 和未使用空間,提供 scalability 和並行性 (parallelism) — 多個線程 (thread) 和進程 (process) 可以同時對同一檔案系統進行存取。

大小比整個檔案系統小的 allocation group 可以減少磁頭移動的距離,加快檔案的存取。

Striped allocation

如果在 striped RAID 使用 XFS,可以在格式化是指定 stripe 單位 (stripe unit),讓 XFS 把 inode 分配和內部日誌 (internal log) 和 stripe 單位對齊,以加大 throughput。

Extent based allocation

XFS 支援 Extent,檔案的存放使用多個連續的區塊。記錄存放檔案內容的區塊就記錄每段 extent 的起始區塊位置和長度,而非傳統記錄每個區塊位置,節省不少 metadata 空間。加上讀取檔案內容和分配空間時可以一次處理多個區塊,減少輸入/輸出操作次數,大大加快系統效能。Extent 的使用亦減低 external fragmentation 的機會。

此外,XFS 亦使用 Extent 式結構記錄未使用空間,並在每個 allocation group 都使用兩個 B+ tree 對未使用 extent 作索引,一個以未使用 extent 大小作索引,另一個以其起始區塊位置作索引。這方法大大提供高分配檔案空間的效率。

Delayed allocation

XFS 在分配檔案空間時採取 lazy evaluation techniques。寫入檔案資料時,XFS 盡量先存入記憶體中的緩衝區而非立即要求分配檔案系統空間。而直正的空間分配工作只在資料被清入磁碟時才進行。這令檔案系統更能準確掌握檔案需要的空間大小,更大機會存放在連續的區塊,減低 external fragmentation 和提高檔案系統效能。

Sparse 檔案

XFS 支援 sparse 檔案,容許長度極大但內容大部份為零的檔案不佔用過多的磁碟空間。

大型檔案

XFS 使用 B+ tree 索引檔案內容的 extent,令存取大型檔案任何位置都可以在迅間完成。令 XFS 在處理大型檔案方面[2][3]和 Scalability 有極佳的表現[4][3]

Extended attributes

XFS 透過 extended attribute 提供 multiple data streams。令 XFS 可以輕易地擴充支援包括 POSIX ACL 等多個功能。每個 extended attribute 的屬性名稱可以為最多 256 位元組的字串,而屬性內容可達 64 KiB 的二位元資料。檔案的 extended attribute 更可以分為只有 root 可以更改和可供一般使用者更改兩類。

有使用 extended attribute 的 XFS 需由 xfsdump 和 xfsrestore 等工具備份才可以保存各檔案的 extended attribute。

Online defragmentation

XFS 有提供工具 xfs_fsr (XFS filesystem reorganizer) 可以對一個掛載和使用中的 XFS 檔案系統進行 defragmentation。

線上改變大小 (Online resizing)

XFS 有提供工具 xfs_growfs 可以增加一個掛載和使用中的 XFS 檔案系統的大小 (不可以減小)。

Atomic disk quotas

XFS 支援 disk quota。

缺點

  • 未有反刪除工具 (undelete utility)
  • 檔案系統大小只能增不能減
  • 在目錄中新增和刪除目錄項目的操作相對其他檔案系統較慢[5]
  • 處理檔案失敗時,檔案內容可能會被清為零,不能修復[6]

歷史

1993 SGI 開始開發 XFS
1994 SGI 將 XFS 正式引入 IRIX 5.3。
2000-05 SGI 宣佈將 XFS 以 GNU GPL 開放並移植至 Linux。
2001-05 SGI 正式推出穩定可應用在 Linux 2.4 系列核心的 XFS 1.0 for Linux。
2003-12-08 Linux 2.6.0 正式發佈,亦是第一個正式併入 XFS 的 Linux 內核。同時 XFS 宣佈併入 Linux 2.4 系列內核。
2004-02-18 Linux 2.4.25 正式發佈,亦是第一個正式併入 XFS 的 2.4 內核。
2005-12 FreeBSD 開始支援讀取 XFS 檔案系統
2006-06 FreeBSD 開始試驗對寫入 XFS 的支援。

SGI IRIX 在 XFS 之前是使用建基於 UFS 和使用 Extents 的 EFS (Extent File System)。然而在 90 年代初,由於磁碟容量和速度的劇增,SGI 察覺 EFS 漸漸不能應付當時的需要。1993 年,SGI 開始了新的檔案系統 XFS 的開發工作。當初 SGI 開發 XFS 時是基於以下的考慮[7]

  • 高流量視像和音效 streaming
  • 支援視像和高解析影像軟件需要的大型檔案
  • 支援儲存大量資料
  • 支援大量檔案 (即是大型目錄)

1994 年 SGI 將 XFS 正式引入 IRIX 5.3。由那天開始,XFS 漸漸成為 SGI 由工作站至超級電腦等所有 IRIX 產品的檔案系統。[8]

2000 年 5 月,SGI 宣佈將 XFS 以 GNU General Public License 開放並移植至 Linux。差不多一年後,SGI 正式推出穩定可應用在 Linux 2.4 系列核心的 XFS 1.0 for Linux。[9] 然而 Linux 穩定版核心正式支援 XFS 要到兩年多後的 Linux 2.6.0 和 2.4.25。[10][11]

GNU/Linux 外,FreeBSD 亦在 2005 年 12 月開始支援讀取 XFS 檔案系統[12],亦在 2006 年 6 月開始試驗對寫入 XFS 的支援。[1]

使用 XFS

GNU/Linux 中,管理 XFS 的工作主要使用 xfsprogs 中的一系列工具。

參考資料

  1. 1.0 1.1 Wikipedia. “XFS”.
  2. Justin Piszcz (2004-05). “Benchmarking Filesystems”. Linux Gazette 2004(102). - 對 Ext2、Ext3、ReiserFS、XFS 和 JFS
  3. 3.0 3.1 hansivers (2006-04-21). “Filesystems (ext3, reiser, xfs, jfs) comparison on Debian Etch”. Debian Administration.
  4. M. Benoit (2003-10-29). “File System Benchmarks”. NetNation Communications. - 對 Ext3、XFS、ReiserFS 和 Reiser4
  5. Simon Kongshøj (2003-07-25). “Filesystem performance tweaking with XFS”. Linux@Everything2.com.
  6. Krishna Pradeep Tamma & Shreepadma Venugopalan (2005). “Failure Analysis of SGI XFS File System
  7. Hagen, William von (2001). “Linux Filesystems”. Sams Publishing. ISBN 06-723-2272-2
  8. Robbins, Daniel (Jan 1, 2002). “Advanced filesystem implementor's guide, Part 9: Introducing XFS”. IBM developerWorks.
  9. The SGI XFS Team (Dec 8, 2003). “Announce: XFS Release 1.0 for Linux'”'. The SGI XFS Team.
  10. Tosatti, Marcelo (Dec 8, 2003). “XFS merged in 2.4”. Linux Kernel Mailing List.
  11. SGI.“XFS News”. SGI Developer Central Open Source.
  12. XFS for FreeBSD

相關頁面

相關連結

Personal tools