ZFS 的歷史
Z 文件系統(tǒng)(Z File System)(ZFS)是由 Matthew Ahrens 和 Jeff Bonwick 在 2001 年開發(fā)的。ZFS 是作為 太陽微系統(tǒng)(Sun MicroSystem) 公司的 OpenSolaris 的下一代文件系統(tǒng)而設(shè)計的。在 2008 年,ZFS 被移植到了 FreeBSD 。同一年,一個移植 ZFS 到 Linux 的項目也啟動了。然而,由于 ZFS 是 通用開發(fā)和發(fā)布許可證 (Common Development and Distribution License)(CDDL)許可的,它和 GNU 通用公共許可證 不兼容,因此不能將它遷移到 Linux 內(nèi)核中。為了解決這個問題,絕大多數(shù) Linux 發(fā)行版提供了一些方法來安裝 ZFS。
在甲骨文公司收購太陽微系統(tǒng)公司之后不久,OpenSolaris 就閉源了,這使得 ZFS 的之后的開發(fā)也變成閉源的了。許多 ZFS 開發(fā)者對這件事情非常不滿。 三分之二的 ZFS 核心開發(fā)者 ,包括 Ahrens 和 Bonwick,因為這個決定而離開了甲骨文公司。他們加入了其它公司,并于 2013 年 9 月創(chuàng)立了 OpenZFS 這一項目。該項目引領(lǐng)著 ZFS 的開源開發(fā)。
讓我們回到上面提到的許可證問題上。既然 OpenZFS 項目已經(jīng)和 Oracle 公司分離開了,有人可能好奇他們?yōu)槭裁床皇褂煤?GPL 兼容的許可證,這樣就可以把它加入到 Linux 內(nèi)核中了。根據(jù) OpenZFS 官網(wǎng) 的介紹,更改許可證需要聯(lián)系所有為當前 OpenZFS 實現(xiàn)貢獻過代碼的人(包括初始的公共 ZFS 代碼以及 OpenSolaris 代碼),并得到他們的許可才行。這幾乎是不可能的(因為一些貢獻者可能已經(jīng)去世了或者很難找到),因此他們決定保留原來的許可證。
ZFS 是什么,它有什么特性?
正如前面所說過的,ZFS 是一個先進的文件系統(tǒng)。因此,它有一些有趣的 特性 。比如:
- 存儲池
- 寫時拷貝
- 快照
- 數(shù)據(jù)完整性驗證和自動修復
- RAID-Z
- 最大單個文件大小為 16 EB(1 EB = 1024 PB)
- 最大 256 千萬億(256*1015 )的 ZB(1 ZB = 1024 EB)的存儲
讓我們來深入了解一下其中一些特性。
如何安裝 ZFS?
如果你想立刻使用 ZFS(開箱即用),那么你需要安裝 FreeBSD 或一個 使用 illumos 內(nèi)核的操作系統(tǒng) 。 illumos 是OpenSolaris 內(nèi)核的一個克隆版本。
事實上,支持 ZFS 是一些有經(jīng)驗的 Linux 用戶選擇 BSD 的主要原因 。
如果你想在 Linux 上嘗試 ZFS,那么只能在存儲文件系統(tǒng)上使用。據(jù)我所知,沒有任何 Linux 發(fā)行版可以在根目錄上安裝 ZFS,實現(xiàn)開箱即用。如果你對在 Linux 上嘗試 ZFS 感興趣,那么 ZFS on Linux 項目 上有大量的教程可以指導你怎么做。
存儲池
與大多數(shù)文件系統(tǒng)不同,ZFS 結(jié)合了文件系統(tǒng)和卷管理器的特性。這意味著,它與其他文件系統(tǒng)不同,ZFS 可以創(chuàng)建跨越一系列硬盤或池的文件系統(tǒng)。不僅如此,你還可以通過添加硬盤來增大池的存儲容量。ZFS 可以進行分區(qū)和格式化

使用ZFS的十條理由及特性
1. 再也不需要fsck, scandisk
不管你是在用Linux,UNIX還是Windows,相信大家都有過類似的體會:當系統(tǒng)意外斷電或者非法關(guān)機,系統(tǒng)重起后發(fā)現(xiàn)文件系統(tǒng)有inconsistent的問題,這時 候就需要fsck或者scandisk 來修復,這段時間是非常耗時而且最后不一定能夠修復成功。更糟糕的是,如果這是一臺服務(wù)器需要做fsck的時候,只能offline(下線),而且現(xiàn)有應(yīng)用往往都是大硬盤,相應(yīng)fsck修 復時間也很長,這對許多使用該服務(wù)器的用戶來說幾乎不能忍受的。
而使用ZFS后大家可以徹底拋棄fsck這種工具,因為ZFS是一個基于COW(Copy on Write)機制的文件系統(tǒng)。COW是不會對硬盤上現(xiàn)有的文件進行重寫,保證所有硬盤上的文件都是有效的。所以不會有這種inconsistent的概念,自然就不需要這種工具了。
2. 管理簡單
ZFS作為一個全新的文件系統(tǒng),全面拋棄傳統(tǒng)File System + Volume Manager + Storage的架構(gòu),所有的存儲設(shè)備是通過ZFS Pool進行管理,只要把各種存儲設(shè)備加 入同一個ZFS Pool,大家就可以輕松的在這個ZFS Pool管理配置文件系統(tǒng)。大家再也不用牢記各種專業(yè)概念,各種命令newfs, metinit及各種Volume Manager的用法。在ZFS中我們只需要兩個命令,zpool(針 對ZFS Pool管理)和zfs(針對ZFS文件系統(tǒng)的管理),就可以輕松管理128位的文件系統(tǒng)。舉個例子,我們經(jīng)常會遇到系統(tǒng)數(shù)據(jù)增長過 快,現(xiàn)有存儲容量不夠,需要添加硬盤,如果依照傳統(tǒng)的Volume Manager管理方式,那我 們需要預先要考慮很多現(xiàn)有因素,還要預先根據(jù)應(yīng)用計算出需要配置的各種參數(shù)。在ZFS情況下,我們的系統(tǒng)管理員可以徹底解放,再也不需要這種人為的復雜 考慮和計算,我們可以把這些交給ZFS,因為ZFS Pool會自動調(diào)節(jié),動態(tài)適應(yīng)需求。我們只需一個簡單的命令為 這個ZFS Pool加入新的硬盤就可以了:
zpool add zfs_pool mirror c4t0d0 c5t0d0
基于這個動態(tài)調(diào)節(jié)的ZFS Pool之上的所有的文件系統(tǒng)就可以立即使用到這個新的硬盤,并且會自動的選擇最優(yōu)化的參數(shù)。而且ZFS同時也提供圖形化的管理界面
3.沒有任何容量限制
ZFS(Zettabyte File System)文件系統(tǒng)就如其名字所預示,可以提供真正的海量存儲,在現(xiàn)實中幾乎不可能遇到容量問題。在現(xiàn)有的64位kernel(內(nèi) 核)下,它可以容納達到16 Exabytes(264)大小的單個文件,可以使用264個存儲設(shè)備,可以創(chuàng)建264個文件系統(tǒng)。
4.完全保證 數(shù)據(jù) 的正確和完整
由于ZFS所有的數(shù)據(jù)操作都是基 于Transaction(事務(wù)),一組相應(yīng)的操作會被ZFS解 析為一個事務(wù)操作,事務(wù)的操作就代表著一組操作要么一起失敗,要么一起成功。而且如前所說,ZFS對 所有的操作是基于COW(Copy on Write), 從而保證設(shè)備上的數(shù) 據(jù)始終都是有效的,再也不會因為系統(tǒng)崩潰或者意外掉電導致數(shù)據(jù)文件的inconsistent。
還有一種潛在威脅 數(shù)據(jù)的可能是來自于硬件設(shè)備的問題,比如磁 盤,RAID卡的硬件問題或者驅(qū)動bug?,F(xiàn)有文件系統(tǒng)通常遇到這個問題,往往只是簡單的把錯誤數(shù)據(jù)直接交給上層應(yīng)用,通常我們把這個問題稱作Silent Data Corruption。而在ZFS中,對所有數(shù)據(jù)不管是用戶數(shù)據(jù)還是文件系統(tǒng)自身的metadata數(shù) 據(jù)都進行256位的Checksum(校 驗),當ZFS在提交數(shù)據(jù)時會進行校驗,徹底杜絕這種Silent Data Corruption情況。
5.提供優(yōu)異 性能和擴展性
和傳統(tǒng)File System + Volume Manager + Storage架構(gòu)不同,ZFS則是直接基于存儲設(shè)備提供所有的功能,因此有自己獨有的創(chuàng)新特性,性能自然非比尋常。
Dynamic Striping vs. Static Striping
由于ZFS是基于COW和一個全局動態(tài)的ZFS Pool,任何一次寫 操作,都是對一塊新數(shù)據(jù)塊(Block)的一次寫操作。ZFS從ZFS Pool中動態(tài)挑選出一個最優(yōu)的設(shè)備,并且以一個transaction(事 務(wù))線性寫入,充分有效地利用了現(xiàn)有設(shè)備的帶寬,我們把這個特性稱為Dynamic Striping。而相對應(yīng)的Static Striping則是傳統(tǒng)文件系統(tǒng)所使用的方式,Static Striping需要管理員預先對這組Stripe進行正確地計算人為 設(shè)置,而且如果加入新的設(shè)備則需要再次人為的計算和設(shè)置,更為嚴重的是如果人為計算錯誤,則會直接影響系統(tǒng)的性能。而在使用Dynamic Striping這種特性之后,我們根本不需要人為介入,ZFS會自動調(diào)整,智能的為你 提供最佳的設(shè)備,最快的操作方式。
支持多種 大小的數(shù)據(jù)塊(Multiple Block Size)
ZFS支持多種大小的數(shù)據(jù)塊定義,從512字節(jié)到1M字節(jié)。和傳統(tǒng)文件系統(tǒng)往往都是固定大小數(shù)據(jù)塊不同,ZFS則是可以動態(tài)的根據(jù)不同 大小的文件進行計算,動態(tài)的選擇最佳的數(shù)據(jù)塊。
因為不同大小數(shù)據(jù) 塊,直接影響到實際使用硬盤容量和讀取速度。如果使用較小的數(shù)據(jù)塊,存儲文件所導致的碎片則較少,讀寫小文件更快一些,但是會導致需要創(chuàng)建更多的metadata,讀寫大文件則會更費時。如果使用較大的數(shù)據(jù)塊,使用的metadata較少,更利于讀寫大文件,但是會導致更多的碎片。ZFS根據(jù)實際調(diào)查現(xiàn)有文件使 用的情況,分析出一個選擇數(shù)據(jù)塊大小的算法,動態(tài)的根據(jù)實際文件大小確定最佳的數(shù)據(jù)塊。所以ZFS是 非常智能的,在不需要系統(tǒng)管理員介入,就可以得到一個自我調(diào)優(yōu)的結(jié)果。當然ZFS也支持用戶對單個文件或者整個文件系統(tǒng) 所使用的數(shù)據(jù)塊大小的自定義設(shè)置。
智能預讀取(Intelligent Prefetch)
多數(shù)的操作系統(tǒng)都 有這種將數(shù)據(jù)預先讀取的功能,而ZFS則是建立在文件系統(tǒng)上直接提供的一種更加智能的數(shù)據(jù)預讀取功能。它不僅可以智能地識別出多種讀取模式, 進 行提前讀取數(shù)據(jù),而且可以對每個讀取數(shù)據(jù)流進行這種預讀取智能識別,這個對許多流媒體提供者來說是件非常好的事情。
在擴展性上,和現(xiàn)有文件系統(tǒng)多是基于一個受限的靜態(tài)模型不同,ZFS是采用ZFS Pool這個動態(tài)概念,它的metadata也是動態(tài),并且讀寫操作都是可并行的,并且具有優(yōu)先級概念,所以即使在大數(shù)據(jù)量,多設(shè)備的情況下仍可以保證性能的線性增長。
6.自我修復功能
ZFS Mirror 和 RAID-Z
傳統(tǒng)的硬盤Mirror及RAID 4,RAID 5陣列方式都會遇到前面提到過的問題:Silent Data Corruption。如果發(fā)生了某塊硬盤物理問題導致數(shù)據(jù)錯誤,現(xiàn)有的Mirror,包括RAID 4,RAID 5陣列會默默地把這個錯誤數(shù)據(jù)提交給上層應(yīng)用。如果這個錯誤發(fā)生在Metadata中,則會直接導致系統(tǒng)的Panic。 而且還有一種更為嚴重的情況是:在RAID 4和RAID 5陣列中,如果系統(tǒng)正在計算Parity數(shù)值,并再次寫入新數(shù)據(jù)和新Parity值的時候發(fā)生斷電,那么整個陣列的所有存儲的數(shù)據(jù)都毫無意義了。
在ZFS中則提出了相對應(yīng)的ZFS Mirror和RAID-Z方式,它在負責讀取數(shù)據(jù)的時候會自動和256位校驗碼進行校驗,會主動發(fā)現(xiàn)這種Silent Data Corruption,然后通過相應(yīng)的Mirror硬 盤或者通過RAID-Z陣列中其他硬盤得到正確的數(shù)據(jù)返回給上層應(yīng)用,并且同時自動修復原硬盤的Data Corruption 。
Fault Manager
在Solaris 10中,包含 一個ZFS診斷引擎和Solaris的 Fault Manager(這也是Solaris 10的 另一個新特性)交互,可以實時地診斷分析并且報告ZFS Pool和存儲設(shè)備的錯誤,用戶可以通過Fault Manager及時得到一個非常友善的消息。這個診斷引擎雖然不會采取主動的行為去修復或者解決 問題,但是會在消息中提示系統(tǒng)管理員可采取的動作。類似下面一個ZFS報錯消息,其中REC-ACTION就是建議采取的動作:
SUNW-MSG-ID: ZFS-8000-D3, TYPE: Fault, VER: 1, SEVERITY: Major
EVENT-TIME: Fri Mar 10 11:09:06 MST 2006
PLATFORM: SUNW,Ultra-60, CSN: -, HOSTNAME: neo
SOURCE: zfs-diagnosis, REV: 1.0
EVENT-ID: b55ee13b-cd74-4dff-8aff-ad575c372ef8
DESC: A ZFS device failed. Refer to http://sun.com/msg/ZFS-8000-D3 for more information.
AUTO-RESPONSE: No automated response will occur.
IMPACT: Fault tolerance of the pool maybe compromised.
REC-ACTION: Run 'zpool status -x' and replace the bad device.
7. 安全
在安全上,ZFS支持類似NT風格NFSv4版的ACL(讀取控制列表)。而且前面所提到的256位驗證碼,用戶可選擇多種驗證方式,包括SHA-256驗證算法,從而在物理存儲單元級別上保證數(shù)據(jù)的安全性。
8. 超強功能
ZFS作為“最后一個文件系統(tǒng)”,涵蓋了基本的文件系統(tǒng)和Volume管理的功能,同時 一并提供許多企業(yè)級別的超強功能:Quota(配額),Reservation(預留), Compression(壓 縮), Snapshot(快照),Clone(克?。2⑶宜俣确浅?臁S辛诉@個文件系統(tǒng),大家再也不需要任何Volume Manager了。
9.兼容性
ZFS是一個完全兼容POSIX規(guī)范的文件系統(tǒng),所以處于上層的應(yīng)用程序是完全不受影響。ZFS也提供一個Emulated Volume模塊,可以把任何一個ZFS文件系統(tǒng)作為普通的塊設(shè)備使用。同時ZFS也可以使用基于Volume Manager構(gòu)建的Volume作為存儲設(shè)備單 元。這樣在不需要修改應(yīng)用程序,不修改已有文件系統(tǒng)下,給了大家最大的自由度去獲得ZFS提供的各種特性。
10.開源
ZFS是Sun Microsystems公 司作為OpenSolaris的一個開源項目運作并且完全免費使用,這就代表著我們不僅同時可以享受商業(yè)公司的高質(zhì)量,也可以獲得開源模式的優(yōu)點。
雖然目前只有Solaris支持該文件系統(tǒng),但是這種開源的模式必定會促進更多基于ZFS的應(yīng)用。現(xiàn)在已經(jīng)有國外開發(fā)者正在將ZFS移植到Linux和Mac OS上來。如果想要體驗一下ZFS,由于目前它和Solaris 10綁定在一起,所以需要下載最新版的Solaris 10 6/06 (http://www.sun.com/software/solaris/get.jsp)。
附加說明
這篇文章論述了 ZFS 的優(yōu)點。現(xiàn)在,讓我來告訴你一個關(guān)于 ZFS 很現(xiàn)實的問題。使用 RAID-Z 會很貴 ,因為你需要購買大量的磁盤來增大存儲空間。
你已經(jīng)使用過 ZFS 了嗎?你的使用經(jīng)驗是什么樣的?
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接