2010年5月2日 星期日

Linux 支援的檔案系統小評測 - 最後的選擇是...

轉貼自:http://tetralet.luna.com.tw/index.php?op=ViewArticle&articleId=214&blogId=1

前幾天公司的電源瞬斷,我的一台使用 reiserfs 的主機就此再也無法開機:『root 檔案系統損毀』。後來拔硬碟到另外一台電腦做 fsck 之後是復活了,但也嚇出了我一身的冷汗。長久以來總一直聽到有關 reiserfs 的種種負面評論,親身體驗之後才知道真的不是一般的恐怖。於是興起來把我所有主機裡的 reiserfs 丟掉的念頭。
要轉換檔案系統是很麻煩沒錯。但最麻煩的是:該選擇哪一種檔案系統才好?Google 了半天,幾乎各種檔案系統都有其支持者和種種見証及說法讓人無所適從,甚至種種測試報告及使用心得,其結論都大異其趣,還真叫人不知該聽信哪一個才好。於 是我決定自己動手測試,畢竟自己動手測過,感覺才會實在。


測試環境:

CPU:Intel(R) Pentium(R) 4 CPU 2.80GHz
RAM:1GB(其中約 600 MB 掛載為 tmpfs)
Kernel:2.6.29-RC1
Swap:(none)

參加測試的檔案系統簡介:

  • ext2:老牌 Linux 檔案系統,不支援 journaling。
  • ext3:當今各大 Linux 預設使用的檔案系統。支援 journaling。
  • ext3 (data):加上 journal_data 功能的 ext3。
  • ext4:ext3 的下一版本。已正式進入 kernel 2.6.28 中。
  • reiserfs:號稱最快的 FS。Linux 上第一個支援 journaling 的檔案系統。
  • reiserfs (data):加上 journal_data 功能的 reiserfs。
  • reiser4:reiserfs 的下一版。(尚未進入 kernel 中)
  • jfs:由 IBM 所開發的 journaling 型檔案系統。已停止開發。
  • xfs:由 SGI 所開發的 journaling 型檔案系統。
  • vfat:古老 DOS/Windows 檔案系統,不支援 journaling。
  • ntfs:現今 Windows 的主流檔案系統。在 Linux 上是經由 fuse 來支援 ntfs。
  • zfs:由 Sun 所開發的終極檔案系統。在 Linux 上是經由 fuse 來支援 zfs。
  • btrfs:下一代 Linux 預設使用的檔案系統。已進入 kernel 2.6.29 RC1 的測試分支中。

測試方式:

  • 把 Swap 關掉。這是為了避免 Swap 到硬碟會影響測試結果。
  • 將650 MB 掛載為 tmpfs。因為 1GB 的 RAM 太大了,故意減少 RAM 的空間。據說測試資料要是 RAM 的 2 倍,結果才會較準確。不過要有塞資料給 tmpfs,它才會真的佔用 RAM 的空間,所以敝人計劃要塞 Debian Etch 的 iso 檔進去,並把它當作資料來源。
  • 把 Debian Etch 的 iso 檔複製到 tmpfs 裡。
  • 掛載該 Debian Etch 的 iso 檔。因為 RAM 的讀取速度應該會遠大於硬碟的讀取速度,用 RAM 當資料來源比較不會影響到測試結果。
  • 開始將該 iso 裡的檔案及目錄複製到測試分割區裡。然後刪除約一半的檔案。如此重覆 24 次。這是模擬人們使用硬碟會不斷寫入刪除資料的動作,讓磁碟裡的資料散亂。最後將硬碟寫滿。
  • 再刪除一部份資料以空出空間做為測試用。如此硬碟裡的資料應該算是十分散亂了。
  • 開始測試資料的讀出、寫入、列出、搜尋、計算剩餘空間等等。並記錄其時間及 CPU Loading。

以下為測試結果:

剛開始寫入硬碟的速度:

File System Test Start
btrfs 不愧是下一代 Linux 預設使用的檔案系統,速度實在驚人,竟然連 reiser4 都追不上。
而 ext3 / jfs / xfs 就真的有待加強了。ext3 慢 btrfs 約 36%,jfs 慢 btrfs 約 40%,xfs 慢 btrfs 約 60%。
而加上了 journal_data 功能的 reiserfs 及 ext3 就更慢了,因為所有的資料都要寫入硬碟 2 次。
zfs 和 ntfs 由於是用 fuse 實作的,所以實在慢得可憐。

在磁碟裡的資料散亂後,寫入硬碟的速度:

File System Test End.png
看來,在磁碟裡的資料散亂後,btrfs 會有 fragment 的問題,速度上己被 reiser4 追過。但還是遙遙領先其它的檔案系統。
此時,ext3 慢 btrfs 約 27%,jfs 慢 btrfs 約 30%,xfs 慢 btrfs 約 60%。

fragment 的比率:

File System Defrag

這是資料在最剛開始及最後時,寫入速度的比較。jfs 的表現令人驚豔,但也慢了約 13%;btrfs 和 xfs 就有待加強了,約慢了 23% 左右。
ntfs 和 zfs 也許不是 defragment 做得好,而可能是因為碟裡的資料是否散亂已不是速度的瓶頸 - 用 fuse 來實作的速度實在太慢了,慢到連磁碟 I/O 變慢了都不太影響到測試結果。 XD

讀出、寫入、列出、搜尋、計算剩餘空間等等的效能表現:

File System Performance
reiserfs 不愧是檔案系統的效能之王,佔據了前 1、2 名。而 jfs 則慢了 reiser4 約 40% 左右,xfs 則是慢了 reiser4 約 65% 左右。差距實在很大。
不過在本測試中,操作的多是一些 < 10MB 的小的檔案,對於像是 xfs 這類適用於 > 500MB 大檔案的檔案系統其實並不公平。但個人認為 Linux 系統裡本來就是充斥著小檔案,所以其實也有必要如此測試才行。
敝人也試著用 > 500MB 的大檔案來進行測試,除了 ntfs 和 zfs 之外,最慢的 jfs 也只比最快的 reiser4 慢約 13%,個人認為差距沒有想像中大。
據 說 xfs 在操作 > 1TB 的檔案的速度是其它檔案系統完全比不上的:xfs 要刪除一個 1TB 的檔案和刪除 1KB 的檔案所花費的時間是一樣的;但若是 ext3 則可能要刪上幾個小時。但因為敝人實在沒有什麼操作 1TB 檔案的機會,所以這個功能對敝人而言實在是英雄無用武之地。
另外,每個人、甚至每個目錄操作檔案系統的習慣都不同,有的目錄(像 /var)常在做讀寫動作;而 像 /usr 就讀取比較多,/home 則用ls、讀寫的機會比較高,find 和 du 因為會耗費大量磁磁 I/O 敝人就不常用...一個測試要能完全模擬人們使用磁碟的習慣是不可能的。所以這個測試一定有其不準確的地方,僅供參考。

CPU 使用量:

File System CPU Loading
如 圖,藍色的是 %user,紅色的是 %system,而黃色的是 %iowait。大部份的檔案系統的 %user 都不到2%,差距實在不大;ntfs 和 zfs 是運作在 user space,所以數據才會如此嚇人。而在 %system 上,xfs / jfs /ext3 都約在 10% 上下,其實算是不錯的了。reiserfs 約是 20%,而 btrfs 則是33%,應該是還有很多的調整空間。xfs 竟然還有 18% 是 idle 的,實在太驚人了。要不是 xfs 有著一些較為不足之處,其實敝人光看這個數據,真的會直接轉用 xfs。

磁碟空間使用量:

File System Disk Usage

這個數據是指,當 zfs 塞滿後,用同樣的資料量去塞別的檔案系統,會佔用多少硬碟空間。
xfs/btrfs/reiserfs/vfat/ntfs/jfs 的比率十分接近,而 ext2/3/4 的表現就很糟了。使用ext2/3/4 會無謂得浪費很多硬碟空間,在本測試中,ext3 會比 xfs 多佔用 12% 的硬碟空間,ext3 據說要再保留 10%的硬碟空間否則效能會嚴重下滑,想想真的是太超過了。zfs 則是磁碟空間使用量最大的。
另 外,圖中 btrfs 的硬碟使用率極佳,但在個人的測試裡,btrfs 只到約 86% 就回應已無可用空間,但 btrfs 不是支援動態inode 嗎?真令人百思不解。最下方那條 btrfs (guess) 是假設,若那 14% 是被 btrfs 暗槓掉的話,那麼 btrfs 真正的使用空間應該會再多上 16%,那麼它的使用空間就會比 zfs 更多了。

請注意,隨著分割區大小的不同,以上的數據將會跟著不同。

敝人對以上各種檔案系統的評語:

ext2:

  • 在隨身碟上可以考慮使用這個格式,以減少磁碟讀寫,延長隨身碟使用年限。
  • 無謂得浪費很多硬碟空間。

ext3:

  • 因架構上的優勢及長年的開發測試,據說有著最可靠的回復能力。
  • 在掛載硬碟時,可用 -o journal_data 啟用 data journaling 功能。那麼,在寫入磁碟時,會先把資料內容先寫入journal 裡,然後再真的寫到磁碟上,如此能有效再進一步降低資料丟失的機率。不過因為資料會寫入磁碟 2 次,效能也會因而大幅下滑。
  • 沒有 undelete 功能。
  • 在開機時會視情況進行自我檢查。有時會等上半小時。非常令人不耐。ext4 據說有試著解決這個問題了。
    可用:


    tune2fs -c 0 -i 1m /dev/hdXY
    來關閉 max-mount-counts,讓它不會在掛載多次後便進行 fsck;並設定 interval-between-checks 為 1 個月。
  • 除了 journal 會佔用大量的硬碟空間之外,有人建議至少要保留 10% 的未使用空間,否則會造成 ext3 效能低落。

ext4:

  • 向前相容於 ext3,但有著更可靠的 checksumming in journal 功能。
  • 在個人測試中,速度可逼進 ext2。
  • 和 ext3 類似的,會無謂得浪費很多硬碟空間。
  • 加快了 fsck 的速度。
  • 可線上重整。

reiserfs:

  • 速度飛快。這也是之前敝人選擇這種檔案系統的主因。
  • 和 ext3 一樣,也支援 data journaling 功能。不過效能也會大幅下滑。
  • 有些目錄的操作是非同步的,不太適合用於某些系統(像 postfix)上。
  • 會佔用較多的 CPU 及記憶體。較適合用於較新的電腦上。
  • 回復能力較差。常常有人抱怨說,硬碟裡的資料在不正常斷電後就一去不回了。
  • 掛載及卸載速度很慢,嚴重影響到開機速度。
  • 個人在使用時,偶爾偶爾在搬移檔案時會出現 Disk I/O 100% 超過 30 秒的怪事。
  • 隨著主要開發者入獄,開發工作幾近停頓了。

reiser4:

  • 改進了 reiserfs 的眾多缺點,且速度比 reiserfs 更快!
  • 隨著主要開發者入獄,開發工作幾近停頓,應該不可能進入 kernel 了。

xfs:

  • 在操作一些充斥著小檔案的目錄,或是在大量新增或移除檔案或目錄時,速度很慢。因此不太建議使用在 / 上。
  • 在操作 > 200MB 的檔案時有其優勢。但個人以 600MB 的檔案實測結果是相差無幾。
  • 可線上重整磁區。

  • 只要使用時日一久,效能下降得很嚴重。
  • 沒有 undelete 功能。
  • 有報告指出,在強迫關機後,甚至只是 umount,檔案可能因而損壞且難以復原。
  • 在所有的檔案系統中,佔用最少的 CPU Loading。
  • 掛載及卸載速度極快。
  • 仍在開發維護中。

jfs:

  • 佔用較低的 CPU Loading。
  • 綜合比較起來,速度會比起 ext3 快上一些些。
  • 據說其修復能力可以和 ext3 比擬。
  • 磁碟較不容易有 fragment 的問題。
  • 掛載及卸載速度極快。
  • 可將 journal 放到另一顆硬碟上,不過在實作上是有點麻煩。
  • 在刪除大量檔案時速度很慢。
  • 雖然 IBM 開發這個磁碟系統時間超過 10 年,但在它在 Linux 真正普及之前就已停止開發了,所以使用的人並不多。所以是否有潛在的問題也未可知。
  • Debian Installer 預設就會提供 fsck.jfs。

vfat:

  • 還是很常見於數位相機、數位攝影機、手機等等攜帶裝置中。
  • 速度中下,且不支援 journaling。
  • 磁碟 fragment 的問題很嚴重。

ntfs:

  • 因為是經由 fuse 來支援 ntfs 的,所以速度很慢很慢。但對於還在使用 Window/Linux 雙系統的使用者而言,它仍是一個很重要的工具程式。
  • 在個人測試中常導致 Kernel Panic。

zfs:

  • 雖然號稱是終極檔案系統,但因為授權的因素而無法進入 kernel 中,因而是經由 fuse 來支援 zfs 的,所以速度很慢很慢。在 Linux 上幾乎沒有競爭力。

btrfs:

  • 基本上是為了向 zfs 看齊而開發出來的 Linux 終極檔案系統。
  • 支援一些很先進的磁碟功能,像是磁碟快照、磁碟陣列、動態掛載等等。
  • 在速度上也是傲視群倫。
  • 更可靠的 checksumming in journal 功能。
  • 有對 SSD 做最佳化。
  • 可線上重整磁區。
  • 尚在測試實驗階段,連基本架構都未定案。
於是,幾經考慮,在 btrfs 推出之前,在 ext3、reiserfs、jfs 和 xfs 等 4 種檔案系統之間,敝人的首選應該會是jfs - CPU Loading 低、硬碟使用率高、效能中上、回復能力佳。至於 IBM 已停止開發 jfs 一事,我想只好先不管了。

不過,關於資料回復一事,其實以上的評論大多來自網路一些使用者本身的使用經驗。但同是 ext3,有些人說它的回復能力是其它檔案系統所比不上的,但也有使用者回報他的 ext3 死了無數次。所以這些評論請頂多當作參考,不要太過相信呀!
而要讓磁碟資料長保安康,請確保:
  • 記憶體務必好好測過。有問題的記憶體是硬碟資料殺手。
  • 請安裝 UPS。電腦常不正常關機肯定會影響到磁碟資料的。
  • 要進行可能會 kernel panic 的動作,像測試 kernel module 前,請先祈禱。
  • 備份、備份、備份,永遠不嫌少。
然後,再加點運氣,也許那些磁碟資料真能跟著您直到天長地久、海枯石爛呢!

沒有留言:

張貼留言

Related Posts with Thumbnails