作者 | louwrentius@gmail.com
譯者 | 蘇本如,責(zé)編 | 郭芮
頭圖 | CSDN 下載自視覺中國
出品 | CSDN(ID:CSDNnews)
以下為譯文:
我在互聯(lián)網(wǎng)上經(jīng)??吹竭@樣的說法:RAID很危險(xiǎn),RAID磁盤陣列在重建過程中失敗的可能性幾乎是100%,因?yàn)橛脖P驅(qū)動(dòng)器已經(jīng)變得非常大。
我覺得沒有什么比這種說法更離譜了,所以我寫了這篇文章來反駁這種荒誕的說法。
對(duì)于家庭用戶和小型企業(yè)來說,RAID磁盤陣列仍然是在一個(gè)地方存儲(chǔ)大量數(shù)據(jù)的可靠和高效的方法。
對(duì)RAID可靠性的認(rèn)識(shí)
互聯(lián)網(wǎng)上有很多關(guān)于居家用戶突然發(fā)現(xiàn)他們的RAID磁盤陣列失效的可怕故事。這些故事可能導(dǎo)致了人們普遍對(duì)RAID持消極態(tài)度。
你可能會(huì)指責(zé)我責(zé)怪受害者,但在很多情況下,我確實(shí)想知道這些事件到底是由于用戶錯(cuò)誤、運(yùn)氣不佳或真正由于RAID導(dǎo)致的問題。我們都知道,報(bào)道總有一種偏見:你不會(huì)聽到無數(shù)沒有問題的人的聲音。
無論如何,對(duì)RAID的傷害已經(jīng)造成了,但我仍然認(rèn)為(軟件)RAID是完美的。
關(guān)于不可恢復(fù)讀取錯(cuò)誤(URE)的荒謬說法
這個(gè)問題是從2007年ZDNET上發(fā)表的一篇糟糕的文章開始的。
在那篇文章中,有人認(rèn)為,隨著驅(qū)動(dòng)器變得更大,但是由于沒有同時(shí)變得更加可靠,你將看到更多的不可恢復(fù)讀取錯(cuò)誤(URE)。更多的容量意味著更多的扇區(qū),因此任何一個(gè)驅(qū)動(dòng)器出現(xiàn)問題的風(fēng)險(xiǎn)變得更大。
不可恢復(fù)讀取錯(cuò)誤(URE)是硬盤驅(qū)動(dòng)器無法讀取扇區(qū)的嚴(yán)重事件。對(duì)于我這樣的老人來說,這聽起來像是“壞扇區(qū)”的定義。那篇文章認(rèn)為,平均每讀取12.5TB的數(shù)據(jù)就會(huì)遇到一個(gè)URE錯(cuò)誤。
根據(jù)ZDNET上這篇文章的邏輯,從14 TB驅(qū)動(dòng)器復(fù)制所有數(shù)據(jù)可能是一個(gè)不可能完成的任務(wù),因?yàn)樵谕瓿蓮?fù)制之前,你可能會(huì)遇到一個(gè)錯(cuò)誤的扇區(qū)。
這對(duì)于RAID磁盤陣列來說是一個(gè)非常大的問題。RAID磁盤陣列重建包括完整讀取所有剩余驅(qū)動(dòng)器的內(nèi)容。所以在RAID重建期間,你一定會(huì)遇到URE錯(cuò)誤。
好消息是你不必?fù)?dān)心這些。因?yàn)檫@不是真的。
實(shí)際上,硬盤并不是那么不可靠。相反地。我認(rèn)為它們非??煽俊H绻悴淮_認(rèn),你可以參考Backblaze 2020年第1季度硬盤統(tǒng)計(jì)報(bào)告。
那篇臭名昭著的ZDNET文章的預(yù)言并沒有實(shí)現(xiàn)。硬盤驅(qū)動(dòng)器的URE規(guī)范描述的是最壞的情況,它似乎更多的是關(guān)于營銷(一種區(qū)分企業(yè)驅(qū)動(dòng)器和消費(fèi)者驅(qū)動(dòng)器的方法)而不是現(xiàn)實(shí)。
如果ZDNET上的那篇文章是真的,那么我自己應(yīng)該會(huì)遇到很多URE錯(cuò)誤,因?yàn)樵S多RAID陣列的scrub/patrol讀取已在不同的RAID陣列中完成。
RAID從來沒有停止工作,而且將會(huì)繼續(xù)發(fā)展。
清理(Scrubbing)可以抵御不良扇區(qū)的影響
當(dāng)一個(gè)只能容忍一個(gè)硬盤驅(qū)動(dòng)器出現(xiàn)故障的RAID磁盤陣列中的一個(gè)驅(qū)動(dòng)器出現(xiàn)故障時(shí),非常重要的一點(diǎn)是,所有剩余的硬盤都不能再出現(xiàn)任何讀取錯(cuò)誤。由于這個(gè)陣列不再有冗余,由壞扇區(qū)引起的任何讀取錯(cuò)誤都可能意味著整個(gè)陣列丟失,或者至少某些文件損壞。
每個(gè)RAID磁盤陣列都支持“清理”。它是一個(gè)RAID陣列中每個(gè)扇區(qū)都被讀取的過程,這實(shí)際上會(huì)導(dǎo)致所有硬盤驅(qū)動(dòng)器的所有扇區(qū)都會(huì)被讀取。
清理(Scrub)是預(yù)先檢查壞扇區(qū)的過程。如果在一個(gè)硬盤驅(qū)動(dòng)器上發(fā)現(xiàn)壞扇區(qū),則可以更換該硬盤驅(qū)動(dòng)器,以便在將來可能的重建過程中不會(huì)造成問題。更換硬盤驅(qū)動(dòng)器本身將導(dǎo)致磁盤陣列的重建,但是如果清理沒有發(fā)現(xiàn)任何其他硬盤驅(qū)動(dòng)器上有壞扇區(qū),重建將不會(huì)出現(xiàn)問題。
一個(gè)沒有經(jīng)過常規(guī)清理的RAID磁盤陣列隨時(shí)可能有災(zāi)難性的后果。壞扇區(qū)可能在另一個(gè)硬盤驅(qū)動(dòng)器上累積,當(dāng)一個(gè)硬盤驅(qū)動(dòng)器實(shí)際發(fā)生故障時(shí),整個(gè)磁盤陣列可能會(huì)因?yàn)槭S嘤脖P驅(qū)動(dòng)器(其中一個(gè))上未檢測到的壞扇區(qū)而丟失。
如果要在RAID磁盤陣列上以可靠的方式存儲(chǔ)數(shù)據(jù),則需要確保對(duì)磁盤陣列進(jìn)行定期的清理。即使你不使用RAID,我還是建議每個(gè)月對(duì)你擁有的每個(gè)硬盤進(jìn)行一次長時(shí)間的SMART測試。
默認(rèn)情況下,Ubuntu會(huì)對(duì)Linux軟件RAID磁盤陣列一周進(jìn)行一次清理。有關(guān)這方面的詳細(xì)信息,請(qǐng)查看/etc/cron.d/mdadm的內(nèi)容。
如果你在Linux上使用ZFS,而且運(yùn)行的Linux發(fā)行版是Ubuntu,你的磁盤陣列會(huì)在每個(gè)月的第二個(gè)周日自動(dòng)進(jìn)行一次清理。
默認(rèn)情況下,Synology或QNAP等NAS供應(yīng)商都啟用了數(shù)據(jù)清理。請(qǐng)根據(jù)你的特定NAS手冊(cè)來調(diào)整清理頻率。我建議每個(gè)月至少安排一次清理,且在夜間進(jìn)行。
為什么RAID 5被認(rèn)為是有害的?
坦白說,我也很好奇。
我注意到網(wǎng)上有很多人聲稱不應(yīng)該使用RAID 5,但是這一點(diǎn)我不能茍同。這完全取決于具體情況。在成本和風(fēng)險(xiǎn)之間找到平衡是很重要的。
這篇文章可以追溯到2003年,它提倡不要使用RAID 5,但是它關(guān)注的是企業(yè)環(huán)境,然而即使在企業(yè),我也看到了RAID 5的價(jià)值。
對(duì)于具有5個(gè)或更少驅(qū)動(dòng)器的小型RAID磁盤陣列,我認(rèn)為RAID 5非常適合。特別是如果你運(yùn)行一個(gè)4托架的小型NAS,那么使用RAID 5將完全有意義。你可以在容量和可用性成本之間獲得很好的平衡。
不建議創(chuàng)建更大的RAID 5陣列。與單個(gè)硬盤驅(qū)動(dòng)器相比,具有8個(gè)硬盤驅(qū)動(dòng)器的RAID磁盤陣列發(fā)生硬盤驅(qū)動(dòng)器故障的可能性要高8倍。這樣做的話,你就將單個(gè)硬盤驅(qū)動(dòng)器出現(xiàn)故障的風(fēng)險(xiǎn)放大了8倍。對(duì)于較大的陣列,雙驅(qū)動(dòng)器故障將成為一個(gè)嚴(yán)重的風(fēng)險(xiǎn)。
這就是為什么對(duì)更大的RAID磁盤陣列建議使用RAID 6,因?yàn)镽AID 6可以容忍兩個(gè)同時(shí)發(fā)生的驅(qū)動(dòng)器故障。我以前使用過RAID 6,現(xiàn)在我使用RAIDZ2(ZFS)作為當(dāng)前NAS的基礎(chǔ)。
我仍然在我的一臺(tái)服務(wù)器上運(yùn)行了一個(gè)8個(gè)硬盤驅(qū)動(dòng)器的RAID 5,它承載的數(shù)據(jù)不太重要,我仍然想保留這些數(shù)據(jù),我希望不丟失它們,但并非不惜一切代價(jià)。這都是關(guān)于風(fēng)險(xiǎn)和成本之間的平衡。請(qǐng)同時(shí)閱讀這篇文章的后記,你會(huì)喜歡的。
確實(shí),在重建過程中,硬盤驅(qū)動(dòng)器的壓力會(huì)更大,但除非RAID磁盤陣列也被大量使用,否則硬盤驅(qū)動(dòng)器上的負(fù)載不會(huì)太大:數(shù)據(jù)是按順序讀取的,這對(duì)硬盤驅(qū)動(dòng)器來說非常容易。
RAID的重建性能主要由硬盤驅(qū)動(dòng)器的大小決定,而不是由RAID磁盤陣列中的硬盤驅(qū)動(dòng)器數(shù)量決定。
幾年前,我運(yùn)行了一個(gè)帶有20個(gè)1 TB硬盤驅(qū)動(dòng)器的RAID 6,它在5小時(shí)內(nèi)完成了重建。最近,我在RAID 5中測試了8個(gè)硬盤驅(qū)動(dòng)器的重建(使用相同的硬盤驅(qū)動(dòng)器),它也花費(fèi)了將近5個(gè)小時(shí)(4小時(shí)45分)。
RAID寫漏洞(write hole)
RAID 5/6的“寫漏洞”經(jīng)常被認(rèn)為是你應(yīng)該害怕的東西。
基于奇偶校驗(yàn)的RAID(如RAID 5和RAID 6)可能會(huì)受到一個(gè)稱為“寫漏洞”的問題的影響。簡而言之:如果計(jì)算機(jī)突然斷電,對(duì)RAID陣列的寫操作可能會(huì)中斷。這可能會(huì)導(dǎo)致對(duì)RAID陣列的部分寫入,使其處于不一致的狀態(tài)。
作為補(bǔ)充說明,我始終建議使用UPS(電池備份)來保護(hù)你的NAS,以便你的服務(wù)器可以在電池耗盡而斷電之前以干凈的方式關(guān)閉。
ZFS RAIDZ不受“寫漏洞”問題的影響,因?yàn)樗趯?shù)據(jù)寫入實(shí)際陣列之前先將數(shù)據(jù)寫入日志。
Linux MDADM軟件RAID還通過使用位圖(默認(rèn)情況下啟用)來防止“寫漏洞”現(xiàn)象。
硬件RAID還通過使用緩存的電池備份來防止這種情況。計(jì)算機(jī)重新開機(jī)后,高速緩存內(nèi)存中的數(shù)據(jù)就會(huì)被寫入磁盤。
對(duì)重要的數(shù)據(jù)設(shè)置警報(bào)
我認(rèn)為關(guān)于RAID的可怕故事都是基于這樣的一個(gè)事實(shí):人們可能永遠(yuǎn)沒有注意到關(guān)于RAID的任何問題,直到為時(shí)已晚,因?yàn)樗麄儚奈丛O(shè)置過任何類型的警報(bào)報(bào)(通過電子郵件或其他方式)。
理想情況下,你還應(yīng)該確保系統(tǒng)監(jiān)視硬盤驅(qū)動(dòng)器的智能數(shù)據(jù),并在關(guān)鍵數(shù)字(如:重新分配的扇區(qū)計(jì)數(shù)和當(dāng)前掛起的扇區(qū)計(jì)數(shù))開始上升時(shí)發(fā)出警報(bào)。
這也是個(gè)人反思的時(shí)刻。你在運(yùn)行RAID磁盤陣列嗎?你是否設(shè)置了警報(bào)?或者你的RAID磁盤陣列是否會(huì)在此時(shí)失敗而你卻不知道呢?
不管怎么說,我認(rèn)為缺乏合適的警報(bào)是使RAID陷入困境的一個(gè)“好”方法。事實(shí)上,任何不受監(jiān)控的存儲(chǔ)解決方案都將是一場等待發(fā)生的災(zāi)難。
為什么人們選擇不使用RAID?
如果RAID磁盤陣列發(fā)生故障,所有數(shù)據(jù)都將丟失。人們對(duì)這種風(fēng)險(xiǎn)感到不安。他們可以接受丟失一些硬盤驅(qū)動(dòng)器的數(shù)據(jù),但不能是全部。
Unraid和SnapRAID等解決方案使用一個(gè)或多個(gè)專用硬盤來存儲(chǔ)冗余(奇偶校驗(yàn))數(shù)據(jù)。其他硬盤驅(qū)動(dòng)器是用你選擇的文件系統(tǒng)格式化的,可以作為普通硬盤驅(qū)動(dòng)器訪問。雖然我沒有使用這個(gè)產(chǎn)品的經(jīng)驗(yàn),但StableBit DrivePool的工作方式似乎與此類似。
如果你有六個(gè)硬盤驅(qū)動(dòng)器,即五個(gè)硬盤用于存儲(chǔ)數(shù)據(jù)和一個(gè)硬盤用作存儲(chǔ)奇偶校驗(yàn)位,那么兩個(gè)硬盤驅(qū)動(dòng)器的失效將導(dǎo)致數(shù)據(jù)丟失,就像RAID 5一樣。但是,其余四個(gè)驅(qū)動(dòng)器上的數(shù)據(jù)仍然是完整的。數(shù)據(jù)丟失僅限于一個(gè)硬盤驅(qū)動(dòng)器上的數(shù)據(jù)。
這樣就降低了在常規(guī)軟件RAID上會(huì)發(fā)生的“全有或者全無”的風(fēng)險(xiǎn)。我自己并不認(rèn)為這些風(fēng)險(xiǎn)沒有那么大,但Unraid和snapraid是流行的產(chǎn)品,我認(rèn)為它們是合理的替代品。。
Mergerfs也可能是一個(gè)有趣的選項(xiàng),盡管它只支持鏡像。
備份仍然很重要
將數(shù)據(jù)存儲(chǔ)在任何類型的RAID磁盤陣列上都不能替代備份。
如果要保護(hù)數(shù)據(jù),你仍然需要將數(shù)據(jù)復(fù)制到其他存儲(chǔ)區(qū)。你可能會(huì)選擇只備份所有數(shù)據(jù)的一個(gè)子集,但至少你要承擔(dān)知情的風(fēng)險(xiǎn)。
結(jié)束語
希望在以上部分,我已經(jīng)充分說明了為什么RAID仍然是一個(gè)有效和可靠的數(shù)據(jù)存儲(chǔ)選項(xiàng)。
如果你想發(fā)表任何觀點(diǎn),請(qǐng)?jiān)谠u(píng)論中分享。
附注
在撰寫本文時(shí),我對(duì)我的包含8個(gè)硬盤驅(qū)動(dòng)器的RAID 5陣列(基于2 TB硬盤)進(jìn)行了一次清理。我的服務(wù)器只有在我需要的時(shí)候才開機(jī),關(guān)機(jī)的時(shí)候,很容易錯(cuò)過它們的定期清理窗口。
為了驗(yàn)證我的觀點(diǎn),我做了一次清理實(shí)驗(yàn)。你瞧,其中一個(gè)驅(qū)動(dòng)器被從我的Linux軟件RAID陣列中踢了出來:
接送出現(xiàn):
這個(gè)硬盤驅(qū)動(dòng)器顯然被踢出了,因?yàn)樗龅搅藟纳葏^(qū)。對(duì)智能數(shù)據(jù)(SMART data)的快速檢查顯示,已有300多個(gè)扇區(qū)被重新映射,但其中存儲(chǔ)的數(shù)據(jù)無法恢復(fù),從而導(dǎo)致讀取錯(cuò)誤。
這項(xiàng)清理工作顯然已經(jīng)完成,因?yàn)镽AID仍然可以工作。
在將這個(gè)有缺陷的硬盤驅(qū)動(dòng)器替換為備用硬盤驅(qū)動(dòng)器后,我啟動(dòng)了重建過程,耗時(shí)4小時(shí)20分鐘。我的RAID 5重建完成,現(xiàn)在一切都很好。
如果這樣的事件還不能讓你明白清理的重要性,那我真的無話可說了。
1.有時(shí)我讀到人們用來存儲(chǔ)的硬件時(shí),我就會(huì)想起John Glenn(譯注:傳奇宇航員,第一個(gè)繞地球飛行的美國人)的這句話:“如果你準(zhǔn)備好發(fā)射,并且你知道你坐在200萬個(gè)部件的上面,我完全能體受你的感受,因?yàn)檫@些部件都是由政府合同中出價(jià)最低的人建造的。”
2.ZFS的工作方式不同,它只讀取包含實(shí)際數(shù)據(jù)的扇區(qū)。
3.當(dāng)你向RAIDZ(2/3)VDEV添加更多硬盤驅(qū)動(dòng)器時(shí),ZFS重建或“resilver”的速度似乎會(huì)變慢。我不確定最近的ZFS版本是否仍然如此。
4.ZFS和MDADM都會(huì)因?yàn)槭褂萌罩?位圖來影響性能。兩種解決方案都支持使用SSD來加速日志/位圖以消除性能影響。大多數(shù)家庭用戶可能不需要這個(gè)。
5.對(duì)于舊而小的硬盤驅(qū)動(dòng)器來說,它能夠存儲(chǔ)的最小存儲(chǔ)單元,通常是4K或512字節(jié)。
6.硬盤驅(qū)動(dòng)器最好在一個(gè)有著良好空調(diào)環(huán)境的數(shù)據(jù)中心工作,你在家里可能沒有這種環(huán)境。但是只要你能夠?qū)⒂脖P的溫度控制在一定范圍內(nèi),我認(rèn)為這沒什么大不了的。
7.ZFS既是一個(gè)RAID解決方案,又是一個(gè)文件系統(tǒng),可以準(zhǔn)確地告訴你哪個(gè)文件受到了影響。這是一個(gè)很好的功能。