ReiserFS

**ReiserFS**，是一種檔案系統格式，作者是漢斯・瑞塞爾（Hans Reiser）及其團隊 Namesys，1997 年 7 月 23 日他將 ReiserFS 檔案系統在網際網路上公布。Linux 核心從 2.4.1 版本開始支援 ReiserFS。

ReiserFS 的命名是源自作者 Hans Reiser 的姓氏，這個日誌型檔案系統發展比 ext2/3 晚近許多。在技術上使用的是 B\*-tree 為基礎的檔案系統，其特色為能很高效率地處理大型檔案到眾多小檔案；實務上 ReiserFS 在處理檔案小於 1k 小檔案時，甚至效率可以比 ext3 快約 10 倍。

ReiserFS 原先是 Novell 公司的 SuSE Linux Enterprise 採用的預設檔案系統，直到 2006 年 10 月 12 日其宣稱將在未來的版本改採 ext3 為預設。Novell 公司否認這與 Hans Reiser 被控殺妻案有任何關聯。

## 功能特點

與本文撰寫的同期檔案系統相比，ReiserFS 有著許多其它檔案系統所沒有的優點。舉例來說：

* Metadata-only journaling（also block journaling, since Linux 2.6.8）, its most-publicized advantage over what was the stock Linux file system at the time, ext2.
* 線上調整大小（只能變大，線上、離線代表的是掛載中或非掛載中），可以使用磁碟管理機制如 LVM 的方式來修改，也可以不用。因為這個緣故，所以 Namsys 公司有提供在離線時調整大小的工具（可以調整放大空間，也可以縮小空間）。
* 後綴包裝（Tail Packing）減少內部磁碟空間分布破碎的情況。這個功能與別的檔案系統相比有著相當明顯的進步，另外值得一提的是，在 Reiser4 的發展裡頭，這個功能有更強大的進展，將同時保留長處並且不會影響到效能。

## 效能表現

和同樣在 Linux Kernel 2.4 版本下的 ext2 及 ext3 相比較，處理 4KB 以下的小檔案時（tail packing enable），ReiserFS 的速度快了 10 到 15 倍。這對於網路新聞服務、HTTP 快取、及電子郵件系統等需要處理大量小檔案的網路服務是相當重要的功能改進。

然而因為 ReiserFS 還在使用 BKL（the Big Kernel Lock）這個 global kernel-wide lock，在某些情況下，它無法良好的在某些多核心系統上面執行 scale 動作，這是因為某些核心的動作一次只能由一個核心進行動作。

## 批評

有些目錄的操作在 ReiserFS 上面並不同步，（包括像 unlink (2)），可能會導致一些重度依賴檔案鎖（file-based lock）機制的應用程式上面資料的毀損，這些應用程式像是 MTA 的 qmail、postfix 等等，如果這些應用程式在磁碟同步之前就有可能造成這樣的損害。

目前還沒有磁碟整理的應用程式是可以對 ReiserFS 這個檔案系統進行動作，雖然已經有工具是在做自動複製檔案內容以期獲得更多連續性的區塊，在 Reiser4 釋出的檔案系統會有一個 repacker 的工具可以對磁碟破碎的情況最佳化。

### 磁區檢查

ReiserFS 索引樹重建的的過程曾經引發過不少的爭議：如果檔案系統被毀壞的很嚴重，那內部的索引樹就失效了，再執行索引樹重建的操作更可能會讓讓這個毀壞的情況變得更嚴重、像是把索引指向不可預期的內容（8）。不過這個操作並不是正常操作的一部份，也不是一個正常的檔案系統檢查，在這種操作執行之前，就應該會有明確提示出現，由管理員確認後才可能發生。

儘管如此，為避免錯誤引導檔案系統的處理，我們並不建議在一個 ReiserFS v3 的分割區上面儲存一個原始未經加密或壓縮改變形態的 ReiserFS v3 的影像檔。在格式化一個現有的 ReiserFS v3 的分割區也可能會留下資料困擾重建的操作並且讓舊系統上的檔案重現。這個漏洞讓惡意的使用者有機會困擾重建程式。在 metadata 經過檔案系統檢查之後還會維持舊有的狀態，再破壞這個地方就會讓檔案內容以不可預期的方式結合包含著檔案系統的 metadata。

好訊息是，它的下一代繼承者，ReiserFS 4 克服了這一點問題點。

### 較早的爭議問題

ReiserFS 在 Linux kernel 2.4.16 之前的版本被 Namesys 視作不穩定的版本，不被當成可以使用產品，特別是在 NFS 的應用上面。ReiserFS 早先的應用（這裡指的是 Linux kernel 2.6.2 之前）被看作是一堆地雷。像是，檔案很容易就會在系統崩潰的時候意外的接上一堆沒有用的垃圾，不過現在在 ReiserFS 裡面的日誌型檔案系統的應用已經有一定的穩定。

## 架構設計

ReiserFS 在一個單一複合 B + 樹中儲存檔案的亞資料資訊（stat item）、目錄檔案資訊（directory items）、索引節點中的塊列表（indirect items），這些資訊都有唯一的標識號作為 B + 樹的索引值。分配給 B + 樹節點磁碟塊稱為「格式化的內部塊」。分配給葉子節點的磁碟塊稱為「格式化的葉子塊」（葉子節點中的資訊是首尾相連，緊密儲存的）。其他的塊一概稱為「未格式化塊」，用來儲存檔案內容。如果一個節點帶有太多目錄項或者太大塊列表的目錄檔案資訊，就會被拆分到它右邊的鄰居節點中。所有的塊分配過程會被跟蹤記錄到位於固定位置的空閒塊點陣圖中。

相對的，ext2 和其它 Berkeley FFS-like 的檔案系統則只簡單的使用一個固定的方程式來計算節點的劃分大小，這樣的方式限制了檔案系統可以包含的檔案的數量。大多數這種類型的檔案系統也簡單地以線性表的方式儲存目錄項，在檔案搜尋及更新的時間隨檔案系統的規模增加而線性增加。在 ReiserFS 中的單一 B + 樹設計避免了這些問題，而且更具有彈性。

## 註解參照

## 外部連結

* ReiserFS and Reiser4 wiki（頁面存檔備份，存於網際網路檔案館）
* Namesys web site（archived version from 2007 October）
* Theodore Ts'o critiques the ReiserFS block journaling implementation
* convertfs（頁面存檔備份，存於網際網路檔案館），a utility which performs in-place conversion between any two file systems with sparse file support
* An overview of the ReiserFS on-disk format
* Florian Buchholz's The structure of the Reiser file system，a very detailed description of the ReiserFS disk structures.
* Gentoo Forum Link（頁面存檔備份，存於網際網路檔案館） - Discussion on ReiserFS fragmentation, including a script for measuring fragmentation and defragmenting files.
* Reiser4 Future Vision
* Windows utilities to access ReiserFS: RFSGUI & RFSTOOL
* Filesystems（ext3, reiser, xfs, jfs）comparison on Debian Etch [1]（頁面存檔備份，存於網際網路檔案館）