在自行組合 storage 時(不論分開購買或買 Dell/HP/IBM),很常見的就是陣列卡作 HBA 去建立磁碟陣列 RAID,用以建立一個更大或更高容錯能力的儲存系統,而這技術廿多年前已經開發出來。
經歷時間洗禮,現存主要會用到的 RAID level 就是:0/1/5/6/10/50/60,除了 "0" 以外全部都有不同程度容錯能力,維基對此有詳細解說,我不在此重覆。
使用 "0" 以外的模式,當然是為了減低 server 的下線時間(down time),平常單獨使用硬碟,它掛了你的 server 也得停機,但是 RAID 的出現容許若干硬碟損壞但又能繼續保持 server 運作,並可及時換碟重新組合,確是一個很好的做法。但隨著時間轉變,以及硬碟技術發展迅速,傳統陣列面對的問題逐漸浮現,可以簡單地歸納一下:
1. 陣列建立時間(rebuild time):磁碟陣列的組合時間是與硬碟的大小,以及 HBA 的速度(如軟件 RAID 則與處理器能力有關)有關,數據多寡並不重要,因為陣列組成時即使是空白位置也照樣處理,如果有硬碟 bad sector 的話也會對陣列有影響。現時 SATA 硬碟都已經發展到單碟 6TB,使用大容量硬碟就要極大量時間去組陣列,以 4TB 為例,組一個大型陣列慢一點的話隨時超過 24 小時才完成,好像在 RAID 5 有硬碟損壞後,重組期間如發生第二顆硬碟損壞整組陣列會立即報廢!可是出現第二顆硬碟問題的機會很大,同一批次硬碟特性接近,此外硬碟重組時整個陣列內的硬碟會出現超乎想像的讀寫壓力,令損壞機會大增。Dell 在 2012 年已經建議用戶不要使用 > 1TB 硬碟作以及不要再用 RAID 5 即為此原因。
2. RAID 6 或更高 level 是針對 RAID 5 問題而來,容許陣列中最多壞 2 顆硬碟,但隨著硬碟容量增加,專家估計 2019 年時 RAID 6 也會與現在的 RAID 5 有同一命運。但 2019 年之前....先別開心,有另一更大問題出現,就是不可回復的讀取錯誤(unrecoverable read error,URE)。前面提到,重組是包括有數據及無數據的部份,硬碟越大,碟中出現有不可存取的位置的機會也會增加,假設重組時其中一顆硬碟某空白位置有 bad sector 令讀取失敗,即使明知這部份應該無數據但也不能重組下去!此刻你的 RAID 陣列可以拿去報銷了!!這些都是企業常見問題,原本為了減低下線時間的陣列變得無作用...
3. 非同步寫入問題:RAID 寫入數據時同時也寫校驗碼(parity),傳統 RAID 都是先寫數據再寫 parity,那麼如果寫入數據後, parity 還未寫入時停電會如何?於是陣列中會出現不知是否正確的資料,陣列重組時所有錯資料都會拿來使用,這就麻煩了。而這個就是著名的 write hole 問題,所有容錯的 RAID 都要面對這問題.....(所以才有 RAID 專用電池)
大約十年前 Solaris 系統上出現了 ZFS 檔案系統(可於 OpenSolaris 及 *BSD 上使用),嚴格來說不應與 RAID 作比較,因為磁碟陣列並非檔案系統,陣列上你還要建立如 NTFS/EXT4/XFS/HPFS 等等檔案系統才可用。不過 ZFS 內置類似磁碟陣列的模式,可以討論這部份....
ZFS 檔案系統精髓之一就是 copy on write 技術:所有寫入操作,不會直接覆蓋原有數據,先讀原有位置的數據到記憶體,要寫入的資料寫到另一磁碟空間,再以重新調整指標(pointer)去做新的數據轉向後才把舊記憶體移走,這個動作可以直接解決陣列中 write hole 問題,令寫入數據保障更佳。不過因為這樣,ZFS 建立時不允許使用全部 100% 磁碟空間。
另外記憶體的操作間接把系統記憶體當成類似緩存(cache)的用途,配合檔案系統壓縮,硬碟效能會看上去大增的(例如我試過舊 80GB 硬碟只有 70MB/s 讀取速度,再 ZFS 壓縮後可以變成 200MB/s......
大家看 S 牌 Q 牌那些在做磁碟管理時可以隨意增加磁碟吧,這是傳統陣列所不容許的,但 ZFS 容許這樣做,而且也同時接受以 SSD 做 L2ARC/ZIL 去提升 ZFS 陣列內的讀寫速度,這個很像 S 牌那個 SSD加速了,不用外加,ZFS 就自帶這功能。
ZFS 的陣列只針對數據,所以數據越少重組時間越短。如果有 unrecoverable read error 在空白位置那根本不會理,如 error 出現於數據位置,由於陣列有校驗碼,而校驗碼與數據寫入在前面提過的 copy on write 基制下早已得到保障,數據必能回復,這使得 ZFS 陣列更加可靠。
不過基於 licensing 問題,Oracle 只開放 ZFS 技術資料但卻不容許於別的系統直接使用他們的 ZFS 代碼(所以成熟版本的 ZFS 只在 Solaris/BSD 出現),使得 Linux 上需要重新開發,現時 ZoL(ZFS on Linux)已經到達一個可使用階段(商業上仍未成熟),同時間另一邊廂有另一新檔案系統 - BtrFS 也是用來代替傳統 RAID 及 EXT4 的。
現時已有不少使用 Solaris/BSD 作 storage server OS 的人,紛紛把他們機器中的 SAS RAID 卡更新 firmware 以便卡能運作於 IT 模式(Initiator Target)中,亦即是該 RAID card 已失去 RAID 功能,只能當做一普通硬碟控制器。
不過由於 ZFS 主要靠記憶體操作,所以對記憶體容量要求很高,而且必須使用 ECC 去確保數據安全。
downtodo wrote:
樓主可以做個測試嗎?
速度是否只有短暫時間,遇到大量資料就回歸正常了。
應該只是針對讀取。
很多高階RAID卡都有 CACHE RAM 也是用ECC記憶體。
我正在想怎比較好,有兩顆同型號硬碟,一個 ZFS 另一個 EXT/XFS 不知如何,要試試才知道
不過與 RAID card cache 不同的是,ZFS 使用的記憶體很多,之前我還在用 HP N54L + 8GB ECC 時,我分配給 ZFS 用的就有 6GB!!RAID card 沒可能這麼多 cache memory,而且 ZFS 還能配搭 SSD 做 L2ARC 去增加讀取速度,或是 SSD 做 ZIL 增加寫入速度(也就是先 cache 常用的到 RAM,次級的到 SSD),對大量存取場合幫助是很大。所以我相信要寫入一個大於 ZFS ARC 的檔案才有可能會變慢(因為 RAM 不夠),但我的新機已經有 16GB ECC,最低限度也會有 12-14GB 分配過去.....
fakeman1999 wrote:
在自行組合 storage...(恕刪)
感謝分享.
小弟並未使用過 ZFS, 其實對於絕大部份的 file system 架構及原理並不熟悉, 大多是系統原生搭配何種 FS 就使用, 幾年來一直有網友提及 ZFS file system 的優異之處, 但卻不了解既然是較其他 file system 更杰出, 但為何採用此 file system 的設備如此的少?
如 fakman 兄所提及的, 或許它需要非常多的記憶體搭配才能運作的很好, 又或者採用其他 file system 的設備, 在效能及穩定性上也有一定的水準, 使得 ZFS 在推廣上並不是那麼順利?
另外之前也曾經聽聞 ZFS killer, btrfs file system, 不曉得 fakeman 兄對於 btrfs 的看法為何?
FB: Pctine
ZFS 無法有效推廣不外乎受限版權,再加上作業系統無法普及化(也不可能普及)。
Microsoft ReFS 如果繼續修正,渴望能普及化,畢竟 MS 系統佔多數,
至於 Linux ... 如果上述兩大都沒開放授權,只能自搞。
ReFS win8 之後的系統能讀寫,只有在 Server 系統上能建立 ReFS。
RAID 衰弱 ???
不,反而興起,NAS 普及化就是很好的例子,早些年只有口袋有錢才能搞,現在就算
沒錢,使用桌機系統都能組軟體 RAID5。
硬體的搭配在配上 檔案系統格式,相得益彰。
ZFS 對於 MS 用戶也沒甚麼好談,無法使用無法直接讀取,只能透過網路連結達到讀寫。
工業用途比較多吧,畢竟工業用途有不少都是 Sun 系統。
內文搜尋

X