日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

ZFS時代FreeBSD系統(tǒng)的數(shù)據(jù)冗余策略

我相信很多人都遇到過硬盤卡殼、掉鏈子的情況 。當(dāng)然,這篇文檔的主旨不是告訴你怎么樣可以繞過那些老爺子寫的課本上說的金科玉律──重要的數(shù)據(jù)都應(yīng)該有備份──如果你的數(shù)據(jù)最終丟失了,那么我的問題是:你的備份呢?
但是,即使你有經(jīng)常備份的習(xí)慣,有些數(shù)據(jù)還是會難免出現(xiàn)一些沒有及時備份而導(dǎo)致丟失的情況 。我的觀點(diǎn)是,沒有備份計(jì)劃的數(shù)據(jù)都不是重要數(shù)據(jù),不要等到數(shù)據(jù)丟失了再去后悔,但是我們顯然應(yīng)該采取各種各樣的手段來阻止沒有及時備份的那一小部分?jǐn)?shù)據(jù)的丟失 。
硬盤
大家一起默念:它很便宜!它會壞掉!
是的,實(shí)戰(zhàn)經(jīng)驗(yàn)會告訴你,它很便宜!它也會壞掉!不管這個硬盤是來自什么廠商,也不管它是SATA、SCSI、SAS或者是傳統(tǒng)的ATA接口,它出現(xiàn)故障只是時間早晚的問題 。
為了解決這個問題,人們提出了廉價磁盤冗余陣列(RAID)的概念 。例如,使用兩塊相同容量的磁盤組成 RAID-1 (MIRROR) 陣列,可以在其中任意一塊出現(xiàn)問題時,從另一塊中取出數(shù)據(jù) 。而如果有至少3塊硬盤,便可以組成 RAID-5 (注:還有其他RAID級別可以用3塊硬盤組成冗余結(jié)構(gòu)),只損失 1/n 的容量(n為硬盤數(shù)量)來得到帶冗余的存儲,使得存儲可靠性得以提高 。
除了改善可靠性之外,RAID還可以用來改善讀寫性能 。例如用多塊硬盤組成 RAID-0 陣列,可以將讀寫性能提高 n 倍,等等 。我們并不討論這些RAID級別 。
【ZFS時代FreeBSD系統(tǒng)的數(shù)據(jù)冗余策略】不幸會發(fā)生
和很多人已經(jīng)想到的一樣──不要高興的太早......
帶數(shù)據(jù)冗余的 RAID 的一個基本假設(shè)是,磁盤是不騙人的,它有兩種狀態(tài):好、壞,并且,主機(jī)(或RAID控制器)能夠可靠地識別這種狀態(tài) 。
很不幸,這句話只對了一半 。一塊磁盤要么是好的、要么是壞的(這里,"壞的"的定義是讀寫時會發(fā)生任何錯誤),但是主機(jī)未必能夠識別這種狀態(tài) 。
更為嚴(yán)重的是,有些時候主機(jī)甚至連讀出來的數(shù)據(jù)是否是正確的這件事都不知道!當(dāng)你發(fā)現(xiàn)自己的程序在其它機(jī)器上都很正常,但是在某臺機(jī)器上總是神秘的崩潰的時候,你就要看看是不是那臺機(jī)器的內(nèi)存或者其他存儲器出現(xiàn)問題了 。
經(jīng)歷了大量痛苦的數(shù)據(jù)恢復(fù)工作之后,終于有人想出了一個主意:把數(shù)據(jù)的校驗(yàn)和放到別的地方,例如,引用這塊數(shù)據(jù)的地方,并且將元數(shù)據(jù)保存多份 。解決問題的方法有很多,一種是花更多的錢去買更好的硬件,而另一種,則是采用一些合理的技術(shù)手段來降低硬件發(fā)生問題時的影響──你不是不可靠嗎?那么我檢查你,確認(rèn)你的數(shù)據(jù)是對的我才接受;你不是容易丟失數(shù)據(jù)嗎?那我就多存幾份,多到將真的丟失數(shù)據(jù)的概率降到可以接受的水平為止 。
這種技巧是廣大勞動人民在長期的科研實(shí)踐中總結(jié)出來的,并且在歷史上有著相當(dāng)廣泛的應(yīng)用 。例如,傳統(tǒng) BSD 系統(tǒng)中的伯克利快速文件系統(tǒng)(FFS,在現(xiàn)代 FreeBSD 版本中稱為 UFS)會保存大量的關(guān)鍵元數(shù)據(jù)──超級塊和柱面組映射表的副本,而這些副本在布局的時候,被保證不會放在磁盤的相同盤面、柱面或扇區(qū)上,從而保證了磁盤在失去一個盤面、被劃傷一個柱面,或者被子彈擊穿時,仍然會有可用的超級塊副本存在,從而能夠恢復(fù)部分?jǐn)?shù)據(jù) 。
不過,簡單地把所有數(shù)據(jù)保存多份有時是不需要的 。首先,它會影響寫入性能,并損害寫操作的原子性 。其次,存儲設(shè)備盡管越來越便宜,但它總歸還是要錢的,你不會希望把錢均勻的用在不同的數(shù)據(jù)上面──舉個例子,你花12個小時寫了一些代碼,這些代碼丟了你會很心疼;但是你的程序有bug,運(yùn)行5分鐘之后吐了一個2GB的core文件,這個文件丟了,你可能會覺得無所謂,至少沒有丟掉代碼那樣心疼 。那么,假如有3份存儲資源,我想多數(shù)人不會給兩種文件各分配1.5份,因?yàn)楹苊黠@,給代碼分配2份,而給core文件分配1份,使得代碼數(shù)據(jù)能夠有更高的冗余度,是比較合算的做法 。

推薦閱讀