ZFS的寫入和讀取行為,實際硬體測試結果 | ||||||||||
在測試ZFS的過程中,發現一些ZFS與一般RAID加上檔案系統的組合,有著差異相當大的寫入和讀取行為,非常的有趣和吸引人。 但是進一步在網路上尋找相關ZFS資料時,發現大多文章只是拿官方的宣傳稿介紹ZFS,或是只專注於說明系統架設的過程。而針對ZFS的寫入讀取行為,找不到詳細說明。 官方的"Solaris ZFS Administration Guide"也只針對ZFS管理方面說明,雖然最後在官方ZFS開發人員的blog上有找到一些說明,但是屬於較深入的部份,較基本的ZFS寫入讀取行為部份一樣缺乏。 所以我根據之前實際測試的結果,加上自己的分析整理出這篇關於ZFS寫入讀取行為的基本說明。 以下的結果來自實際的硬體測試結果,測試的紀錄請自行參閱我過去的測試中相關註解。 總共測試了三種組態,分別是單一mirror,兩組mirror,或是一組raidz1。分別在正常下,硬碟故障下,以及從故障情況下復原後的ZFS寫入讀取行為。 資料用ABCDEFGH英文字母代表,每一個字母代表容量相同,但是內容不同的資料。測試時故障硬碟使用關機拔SATA線的方式模擬,故障復原則使用另外準備的空白硬碟替換拆下來的硬碟。 |
1 | zpool底下有兩顆硬碟,組成mirror的組態,ZFS的寫入讀取行為。 | |||||||||||
zpool | ||||||||||||
mirror | ||||||||||||
c2t0d0 | ||||||||||||
c2t1d0 | ||||||||||||
首先是正常情況下的寫入和讀取行為 | ||||||||||||
zpool status | vdev type | disc | disc status | (順序由左至右) | ||||||||
寫入資料AB | ||||||||||||
硬碟內資料狀態 | 寫入資料 | 分配硬碟資料 | 寫入資料 及產生checksum | 硬碟內資料狀態 | ||||||||
online | mirror | c2t0d0 | online | n/a | AB | AB | AB | AB | ||||
c2t1d0 | online | n/a | AB | AB | AB | |||||||
AB同時寫入mirror的兩顆硬碟,速度是一顆硬碟的水準,寫入行為與RAID1相似。 | ||||||||||||
zpool status | vdev type | disc | disc status | (順序由左至右) | ||||||||
讀取資料AB | ||||||||||||
硬碟內資料狀態 | 讀取資料 及檢查checksum | 合併硬碟資料 | 讀取資料 | 硬碟內資料狀態 | ||||||||
online | mirror | c2t0d0 | online | AB | A | A+B | AB | AB | ||||
c2t1d0 | online | AB | B | AB | ||||||||
從mirror的兩顆硬碟分別讀取A及B,檢查checksum之後再加以合併,速度是兩顆硬碟合併,讀取行為與RAID0相似。 | ||||||||||||
再來是mirror中有一個硬碟故障的情況下。 | ||||||||||||
zpool status | vdev type | disc | disc status | (順序由左至右) | ||||||||
讀取資料AB | ||||||||||||
硬碟內資料狀態 | 讀取資料 及檢查checksum | 合併硬碟資料 | 讀取資料 | 硬碟內資料狀態 | ||||||||
degrade | mirror | c2t0d0 | fail | n/a | n/a | AB | AB | n/a | ||||
c2t1d0 | online | AB | AB | AB | ||||||||
mirror的其中一顆硬碟無法讀出資料,所以從另一顆讀取AB,速度是一顆硬碟水準,故障中讀取行為與RAID1相似。 | ||||||||||||
zpool status | vdev type | disc | disc status | (順序由左至右) | ||||||||
寫入資料CD | ||||||||||||
硬碟內資料狀態 | 寫入資料 | 分配硬碟資料 | 寫入資料 及產生checksum | 硬碟內資料狀態 | ||||||||
degrade | mirror | c2t0d0 | fail | n/a | CD | n/a | n/a | n/a | ||||
c2t1d0 | online | AB | CD | CD | ABCD | |||||||
mirror的其中一顆硬碟無法寫入資料,所以CD只寫入其中一顆硬碟,速度是一顆硬碟水準,故障中寫入行為與RAID1相似。 | ||||||||||||
zpool status | vdev type | disc | disc status | (順序由左至右) | ||||||||
讀取資料CD | ||||||||||||
硬碟內資料狀態 | 讀取資料 及檢查checksum | 合併資料 | 讀取資料 | 硬碟內資料狀態 | ||||||||
degrade | mirror | c2t0d0 | fail | n/a | n/a | CD | CD | n/a | ||||
c2t1d0 | online | ABCD | CD | ABCD | ||||||||
mirror的其中一顆硬碟無法讀出資料,所以從另一顆讀取CD,速度是一顆硬碟水準,故障中讀取行為與RAID1相似。 | ||||||||||||
使用空白硬碟接回原來拔下來的故障硬碟位置,zpool開始進行resilver重建。 | ||||||||||||
zpool status | vdev type | disc | disc status | (順序由左至右) | ||||||||
Resilver重建 | ||||||||||||
硬碟內資料狀態 | ZFS根據日誌決定必須重建的資料 | 讀取資料 及檢查checksum | 寫入資料 及產生checksum | 硬碟內資料狀態 | ||||||||
Resilver | mirror | c2t0d0 | resilver | n/a | ABCD | n/a | ABCD | ABCD | ||||
c2t1d0 | online | ABCD | ABCD | n/a | ABCD | |||||||
ZFS會根據檔案系統的日誌決定必須重建的資料,所以只會重建degrade期間變動的資料,新硬碟只缺少ABCD,所以只寫入ABCD進入新硬碟,不會重建整顆硬碟的容量,這是ZFS的一大特點,這部份與一般RAID1有相當大的差異。重建速度在理想情況下就是單顆硬碟的寫入速度上限。 值得一提的是,ZFS再遇到硬碟故障時,會因為故障方式不同,以及換上新硬碟時,是同一個SATA接口互換硬碟,還是用額外的SATA接口接上重建用的新硬碟,都會讓重建行為不同,因為內容複雜,我打算另外寫一篇文章說明。 | ||||||||||||
Resilver重建完成後 zpool online | ||||||||||||
zpool status | vdev type | disc | disc status | (順序由左至右) | ||||||||
讀取資料AB | ||||||||||||
硬碟內資料狀態 | 讀取資料 及檢查checksum | 合併資料 | 讀取資料 | 硬碟內資料狀態 | ||||||||
online | mirror | c2t0d0 | online | ABCD | A | A+B | AB | ABCD | ||||
c2t1d0 | online | ABCD | B | ABCD | ||||||||
從mirror的兩顆硬碟分別讀取A及B,檢查checksum之後再加以合併,速度是兩顆硬碟合併,讀取行為與RAID0相似。 | ||||||||||||
zpool status | vdev type | disc | disc status | (順序由左至右) | ||||||||
讀取資料CD | ||||||||||||
硬碟內資料狀態 | 讀取資料 及檢查checksum | 合併資料 | 讀取資料 | 硬碟內資料狀態 | ||||||||
online | mirror | c2t0d0 | online | ABCD | C | C+D | CD | ABCD | ||||
c2t1d0 | online | ABCD | D | ABCD | ||||||||
從mirror的兩顆硬碟分別讀取C及D,檢查checksum之後再加以合併,速度是兩顆硬碟合併,讀取行為與RAID0相似。 | ||||||||||||
假如要簡單的說明ZFS在mirror組態下的寫入和讀取行為,正常下寫入像RAID1讀取像RAID0,異常下寫入和讀取都像RAID1。 因為沒有測試過類似JBOD組態,完全沒有容錯功能的zpool組態,可能要用VM測一下。 | ||||||||||||
2 | zpool底下有4顆硬碟,組成兩組mirror的組態,ZFS寫入讀取行為。 | |||||||||||
zpool | ||||||||||||
mirror | ||||||||||||
c2t0d0 | ||||||||||||
c2t1d0 | ||||||||||||
mirror | ||||||||||||
c2t2d0 | ||||||||||||
c2t3d0 | ||||||||||||
首先是正常情況下的寫入和讀取行為 | ||||||||||||
zpool status | vdev type | disc | disc status | (順序由左至右) | ||||||||
寫入資料ABCD | ||||||||||||
硬碟內資料狀態 | 寫入資料 | 分配vdev資料 | 分配硬碟資料 | 寫入資料 及產生checksum | 硬碟內資料狀態 | |||||||
online | mirror | c2t0d0 | online | n/a | ABCD | AB | AB | AB | AB | |||
c2t1d0 | online | n/a | AB | AB | AB | |||||||
mirror | c2t2d0 | online | n/a | CD | CD | CD | CD | |||||
c2t3d0 | online | n/a | CD | CD | CD | |||||||
ABCD分成AB和CD分別寫入兩組mirror,速度是兩顆硬碟同時寫入的水準,行為與RAID10相似。 | ||||||||||||
zpool status | vdev type | disc | disc status | (順序由左至右) | ||||||||
讀取資料ABCD | ||||||||||||
硬碟內資料狀態 | 讀取資料 及檢查checksum | 合併 硬碟資料 | 輸出 mirror 資料 | 合併 vdev 資料 | 讀取資料 | |||||||
online | mirror | c2t0d0 | online | AB | A | A+B | AB | AB+CD | ABCD | |||
c2t1d0 | online | AB | B | |||||||||
mirror | c2t2d0 | online | CD | C | C+D | CD | ||||||
c2t3d0 | online | CD | D | |||||||||
從兩組mirror的4顆硬碟分別讀取A、B、C和D,檢查checksum之後再加以合併,速度是4顆硬碟合併,行為與RAID0相似。 | ||||||||||||
再來是兩組mirror中,有一組mirror的其中一個硬碟故障的情況下。 | ||||||||||||
zpool status | vdev type | disc | disc status | (順序由左至右) | ||||||||
讀取資料ABCD | ||||||||||||
硬碟內資料狀態 | 讀取資料 及檢查checksum | 合併 硬碟資料 | 輸出 mirror 資料 | 合併 vdev 資料 | 讀取資料 | |||||||
degrade | mirror | c2t0d0 | fail | n/a | n/a | AB | AB | AB+CD | ABCD | |||
c2t1d0 | online | AB | AB | |||||||||
mirror | c2t2d0 | online | CD | C | C+D | CD | ||||||
c2t3d0 | online | CD | D | |||||||||
故障mirror的其中一顆硬碟無法讀出資料,所以從另一顆讀取AB,所以AB的讀取速度是一顆硬碟水準。另一組mirror正常,所以從兩顆硬碟分別讀取C及D,檢查checksum之後再加以合併,所以CD的讀取速度是兩顆硬碟合併。但是讀取ABCD的總和速度受到故障mirror的限制,所以只有兩顆硬碟的合併水準。 | ||||||||||||
zpool status | vdev type | disc | disc status | (順序由左至右) | ||||||||
寫入資料EFGH | ||||||||||||
硬碟內資料狀態 | 寫入資料 | 分配vdev資料 | 分配硬碟資料 | 寫入資料 及產生checksum | 硬碟內資料狀態 | |||||||
degrade | mirror | c2t0d0 | fail | n/a | EFGH | n/a | n/a | n/a | n/a | |||
c2t1d0 | online | AB | n/a | AB | ||||||||
mirror | c2t2d0 | online | CD | EFGH | EFGH | EFGH | CDEFGH | |||||
c2t3d0 | online | CD | EFGH | EFGH | CDEFGH | |||||||
zpool在degrade狀態下寫入全新資料EFGH時,ZFS的特色就出現了。 因為其中一組mirror在degrade狀態下,失去了容錯能力,ZFS會掠過這一組失去容錯能力的mirror,把新資料EFGH寫入另一組容錯能力正常的mirror。EFGH同時寫入正常mirror中的兩顆硬碟,速度是一顆硬碟的水準。同時zpool屬於degarde狀態中,但是新資料EFGH仍然保有容錯能力。 可以發現ZFS在這時犧牲寫入速度,以寫入資料的安全性為第一優先,不會像一般的RAID1+0,因為RAID0部份的關係,在degrade狀態下,新寫入的資料沒有容錯能力。 | ||||||||||||
zpool status | vdev type | disc | disc status | (順序由左至右) | ||||||||
讀取資料EFGH | ||||||||||||
硬碟內資料狀態 | 讀取資料 及檢查checksum | 合併 vdev 硬碟資料 | 輸出 mirror 資料 | 合併 vdev 資料 | 讀取資料 | |||||||
degrade | mirror | c2t0d0 | fail | n/a | n/a | n/a | n/a | EFGH | EFGH | |||
c2t1d0 | online | AB | n/a | |||||||||
mirror | c2t2d0 | online | CDEFGH | EF | EF+GH | EFGH | ||||||
c2t3d0 | online | CDEFGH | GH | |||||||||
因為zpool在degrade狀態下寫入的全新資料EFGH只存在於容錯正常的mirror中。 從正常的mirror讀取EFGH的行為就和單一mirror相同了,從mirror的兩顆硬碟分別讀取EF及GH,檢查checksum之後再加以合併,速度是兩顆硬碟合併,讀取行為與RAID0相似。 | ||||||||||||
使用空白硬碟接回原來拔下來的故障硬碟位置,zpool開始進行resilver重建。 | ||||||||||||
zpool status | vdev type | disc | disc status | (順序由左至右) | ||||||||
Resilver重建 | ||||||||||||
硬碟內資料狀態 | ZFS根據日誌決定必須重建的資料 | 讀取資料 及檢查checksum | 寫入資料 及產生checksum | 硬碟內資料狀態 | ||||||||
Resilver | mirror | c2t0d0 | resilver | n/a | AB | n/a | AB | AB | ||||
c2t1d0 | online | AB | AB | n/a | AB | |||||||
mirror | c2t2d0 | online | CDEFGH | n/a | n/a | CDEFGH | ||||||
c2t3d0 | online | CDEFGH | n/a | n/a | CDEFGH | |||||||
ZFS同樣會根據檔案系統的日誌決定必須重建的資料,所以只會重建degrade期間變動的資料,新硬碟只缺少AB,而故障期間的新資料EFGH已經在正常的mirror中有容錯,所以ZFS不會再針對EFGH進行重建,所以只寫入AB進入新硬碟,不會重建整個zpool下的資料,大幅縮短重建時間,這也是ZFS的一大特點,與一般RAID和檔案系統各自獨立的情況下是辦不到的。重建速度在理想情況下就是單顆硬碟的寫入速度上限。 我再重複提一次的是,ZFS再遇到硬碟故障時,會因為故障方式不同,以及換上新硬碟時,是同一個SATA接口互換硬碟,還是用額外的SATA接口接上重建用的新硬碟,都會讓重建行為不同,因為內容複雜,我打算另外寫一篇文章說明。 | ||||||||||||
Resilver重建完成後 zpool online | ||||||||||||
zpool status | vdev type | disc | disc status | (順序由左至右) | ||||||||
讀取資料ABCD | ||||||||||||
硬碟內資料狀態 | 讀取資料 及檢查checksum | 合併 vdev 硬碟資料 | 輸出 mirror 資料 | 合併 vdev 資料 | 讀取 資料 | |||||||
online | mirror | c2t0d0 | online | AB | A | A+B | AB | AB+CD | ABCD | |||
c2t1d0 | online | AB | B | |||||||||
mirror | c2t2d0 | online | CDEFGH | C | C+D | CD | ||||||
c2t3d0 | online | CDEFGH | D | |||||||||
從兩組mirror的4顆硬碟分別讀取A、B、C和D,檢查checksum之後再加以合併,速度是4顆硬碟合併,行為與RAID0相似。 | ||||||||||||
zpool status | vdev type | disc | disc status | (順序由左至右) | ||||||||
讀取資料EFGH | ||||||||||||
硬碟內資料狀態 | 讀取資料 及檢查checksum | 合併 vdev 硬碟資料 | 輸出 mirror 資料 | 合併 vdev 資料 | 讀取資料 | |||||||
online | mirror | c2t0d0 | online | AB | n/a | n/a | n/a | EFGH | EFGH | |||
c2t1d0 | online | AB | n/a | |||||||||
mirror | c2t2d0 | online | CDEFGH | EF | EF+GH | EFGH | ||||||
c2t3d0 | online | CDEFGH | GH | |||||||||
因為EFGH只存在於其中一組的mirror中。 從正常的mirror讀取EFGH的行為就和單一mirror相同了,從mirror的兩顆硬碟分別讀取EF及GH,檢查checksum之後再加以合併,速度是2顆硬碟合併,讀取行為與RAID0相似。 | ||||||||||||
假如要簡單的說明ZFS在兩組mirror組態下的寫入和讀取行為,正常下寫入像RAID1+0讀取像RAID0,異常下寫入和讀取則要看資料配置的狀況,但是可以發現ZFS以確保寫入資料的安全為第一優先。 再進一步,萬一是壞兩顆硬碟,剛好兩個mirror各壞一顆硬碟,全壞在同一組mirror的情況下,ZFS的寫入和讀取行為會如何變化,也很值得用VM測試一下。 | ||||||||||||
3 | zpool底下有3顆硬碟,組成單一raidz1的組態,ZFS寫入讀取行為。 | |||||||||||
zpool | ||||||||||||
raidz1 | ||||||||||||
c2t0d0 | ||||||||||||
c2t1d0 | ||||||||||||
c2t2d0 | ||||||||||||
zpool status | vdev type | disc | disc status | (順序由左至右) | ||||||||
寫入資料AB | ||||||||||||
硬碟內資料狀態 | 寫入資料 | 分配資料 產生檢查碼P | 寫入資料 及產生checksum | 硬碟內資料狀態 | ||||||||
online | raidz1 | c2t0d0 | online | n/a | AB | A | A | A | ||||
c2t1d0 | online | n/a | B | B | B | |||||||
c2t2d0 | online | n/a | P(AB) | P(AB) | P(AB) | |||||||
A、B和P(AB)同時分別寫入3顆硬碟,所以寫入速度是2顆硬碟的合併,寫入行為與RAID5相似。 | ||||||||||||
zpool status | vdev type | disc | disc status | (順序由左至右) | ||||||||
讀取資料AB | ||||||||||||
硬碟內資料狀態 | 讀取資料 及檢查checksum | 合併 硬碟資料 | 讀取資料 | 硬碟內資料狀態 | ||||||||
online | raidz1 | c2t0d0 | online | A | A | A+B+ P(AB) | AB | A | ||||
c2t1d0 | online | B | B | B | ||||||||
c2t2d0 | online | P(AB) | P(AB) | P(AB) | ||||||||
分別從3顆硬碟讀取A、B和P(AB),還原資料AB,所以讀取速度是2顆硬碟的合併,讀取行為與RAID5相似。 | ||||||||||||
再來是raidz1其中一個硬碟故障的情況下。 | ||||||||||||
zpool status | vdev type | disc | disc status | (順序由左至右) | ||||||||
讀取資料AB | ||||||||||||
硬碟內資料狀態 | 讀取資料 及檢查checksum | 合併 硬碟資料 | 讀取資料 | 硬碟內資料狀態 | ||||||||
degrade | raidz1 | c2t0d0 | fail | n/a | n/a | B+ P(AB) | AB | n/a | ||||
c2t1d0 | online | B | B | B | ||||||||
c2t2d0 | online | P(AB) | P(AB) | P(AB) | ||||||||
其中一顆硬碟故障,所以從正常的2顆硬碟讀取B和P(AB),還原資料AB,所以讀取速度是2顆硬碟的合併,讀取行為與RAID5相似。 | ||||||||||||
zpool status | vdev type | disc | disc status | (順序由左至右) | ||||||||
寫入資料CD | ||||||||||||
硬碟內資料狀態 | 寫入資料 | 分配資料 產生檢查碼P | 寫入資料 及產生checksum | 硬碟內資料狀態 | ||||||||
degrade | raidz1 | c2t0d0 | fail | n/a | CD | n/a | n/a | n/a | ||||
c2t1d0 | online | B | C | C | B,C | |||||||
c2t2d0 | online | P(AB) | D | D | P(AB)D | |||||||
因為一顆硬碟故障,所以C和D同時分別寫入正常的2顆硬碟,所以寫入速度是2顆硬碟的合併,寫入行為與RAID5相似。 | ||||||||||||
zpool status | vdev type | disc | disc status | (順序由左至右) | ||||||||
讀取資料CD | ||||||||||||
硬碟內資料狀態 | 讀取資料 及檢查checksum | 合併 硬碟資料 | 讀取資料 | 硬碟內資料狀態 | ||||||||
degrade | raidz1 | c2t0d0 | fail | n/a | n/a | C+D | CD | n/a | ||||
c2t1d0 | online | B,C | C | B,C | ||||||||
c2t2d0 | online | P(AB),D | D | P(AB),D | ||||||||
其中一顆硬碟故障,所以從正常的2顆硬碟讀取C和D,還原資料CD,所以讀取速度是2顆硬碟的合併,讀取行為與RAID5相似。 | ||||||||||||
使用空白硬碟接回原來拔下來的故障硬碟位置,zpool開始進行resilver重建。 | ||||||||||||
zpool status | vdev type | disc | disc status | (順序由左至右) | ||||||||
resilver重建 | ||||||||||||
硬碟內資料狀態 | ZFS根據日誌決定必須重建的資料 | 讀取資料 及檢查checksum | 還原資料 | 分配資料 產生檢查碼P | 寫入資料 及產生checksum | 硬碟內資料狀態 | ||||||
Resilver | raidz1 | c2t0d0 | resilver | n/a | AB,CD | n/a | AB,CD | A,P(CD) | A,P(CD) | A,P(CD) | ||
c2t1d0 | online | B,C | B,C | B,C | n/a | B,C | ||||||
c2t2d0 | online | P(AB),D | P(AB),D | P(AB),D | n/a | P(AB),D | ||||||
可能分別從正常的兩顆硬碟讀取資料,還原出AB和CD,再從AB和CD重新產生要寫入新硬碟的重建資料,基本上和一般RAID5相似,但是ZFS同樣會根據檔案系統的日誌決定必須重建的資料,所以只會重建degrade期間變動的資料。 因為我只能從iostat的讀取寫入資訊來推測ZFS行為,沒辦法直接知道ZFS寫入的詳細順序,所以raidz1比較複雜的重建順序,可能不太正確。 | ||||||||||||
Resilver重建完成後 zpool online | ||||||||||||
zpool status | vdev type | disc | disc status | (順序由左至右) | ||||||||
讀取資料AB | ||||||||||||
硬碟內資料狀態 | 讀取資料 及檢查checksum | 合併 硬碟資料 | 讀取資料 | 硬碟內資料狀態 | ||||||||
online | raidz1 | c2t0d0 | online | A,P(CD) | A | A+B+ P(AB) | AB | A,P(CD) | ||||
c2t1d0 | online | B,C | B | B,C | ||||||||
c2t2d0 | online | P(AB),D | P(AB) | P(AB),D | ||||||||
分別從3顆硬碟讀取A、B和P(AB),還原資料AB,所以讀取速度是2顆硬碟的合併,讀取行為與RAID5相似。 | ||||||||||||
zpool status | vdev type | disc | disc status | (順序由左至右) | ||||||||
讀取資料CD | ||||||||||||
硬碟內資料狀態 | 讀取資料 及檢查checksum | 合併 硬碟資料 | 讀取資料 | 硬碟內資料狀態 | ||||||||
online | raidz1 | c2t0d0 | online | A,P(CD) | P(CD) | P(CD)+C+D | AB | A,P(CD) | ||||
c2t1d0 | online | B,C | C | B,C | ||||||||
c2t2d0 | online | P(AB),D | D | P(AB),D | ||||||||
分別從3顆硬碟讀取P(CD)、C和D,還原資料CD,所以讀取速度是2顆硬碟的合併,讀取行為與RAID5相似。 | ||||||||||||
假如要簡單的說明ZFS在單一raidz1組態下的寫入和讀取行為,大約和RAID5相似。 但是我打算進一步用VM測試4顆硬碟以上組成的單一raidz1組態,故障一顆和故障兩顆硬碟時的寫入和讀取行為。 因為在官方的ZFS介紹中"ZFS – The Last Word in File Systems",raidz1的stripe width並不是固定大小,說明圖片中的stripe也不是固定依硬碟數量分割,是動態的分配。加上測試出到兩組mirror存在時,會只把資料寫入正常的mirror以確保安全性的特殊行為。 所以我異想天開懷疑4顆硬碟組成的raidz1會在一顆硬碟故障時,寫入資料時會重新以剩下的3顆硬碟為基準產生stripe,以確保資料有容錯。因為我的測試是由3顆硬碟組成raidz1,故障1顆後,剩下的兩顆無法產生raidz1的資料分配。所以測試不出這種行為。 很值得測試一下確定ZFS是否在確保資料安全上有積極成這樣。 | ||||||||||||
整理一下我個人的ZFS寫入讀取行為測試結論 1. ZFS會以寫入資料安全為第一優先,所以寫入資料的安全性很高。 2. 因為ZFS是檔案系統和RAID合一的架構,ZFS可以在硬碟異常時動態的改變寫入資料的分配,也可以在重建時只重建必要的部份,縮短資料在危險狀態下的時間。 3. 相對於寫入行為,讀取行為則十分的大膽,只要checksum檢查ok,就敢送出資料,因此mirror組態的讀取行為和RAID0相似,非常高速。 4. 但是也因為動態的寫入分配行為,讀取的行為和效能也因為動態的資料分佈,並不是那麼穩定。 目前還缺少的資料 1. raidz1由4顆以上硬碟組成時,硬碟故障下的寫入和讀取行為,ZFS是否會發生我異想天開的保護寫入資料行為(以剩下的硬碟分配寫入資料形成raidz1,確保資料有容錯),這可以用VM測試。 2. 沒有任何容錯的硬碟組態下,和有兩組raidz1的組態下,的寫入和讀取行為,同樣可以用VM測試。 |
沒有留言:
張貼留言