軟 RAID 和硬 RAID 各有什麼優劣?
最近在配置一套伺服器,對性能要求不高但需要做 RAID1,請問從方便性和安全性的方面考慮是使用硬 RAID 還是軟 RAID?
P.S. 我們沒有買 RAID 卡,用的是主板的 RAID 功能
不太同意樓上大部分的回答,
OS崩潰,嵌入式系統就不叫OS?當然lsi 很多都是Power的CPU,有CPU就得有系統。FPGA也一樣。單細胞動物就不是動物?病毒就不是生物?OS崩潰,Raid就Over,請問是否Raid卡掛了,你整個Raid就Over? 那太不穩定了吧?Raid信息既然有保護的作用,由此可得,信息存儲應該是存儲在硬碟上。Raid 1+0 軟硬raid 差別不大,甚至硬raid控制器的吞吐量不如x86的系統,從而吞吐量會比不上軟Raid。
Raid 5,6則是硬raid完勝。why?(當然這個前提不包括Solaris ZFS文件系統,以及使用Linux 3.09之後的內核的相關係統)簡單通過Raid5來進行比較。Raid 5基本原理是異或運算來實現。
XOR (0, 1) = 1XOR (1, 0) = 1XOR (0, 0) = 0
XOR (1, 1) = 0
硬碟1 硬碟2 硬碟3
| 101 | 010 | 011 |XOR (101, 010, 011) = 100
過程如下:XOR (101,010) = 111 , XOR (111, 011) = 100 校驗盤P| 101 | 010 | 011 | 100 || 101 | 掛了 | 011 | 100 |
還原010XOR (101, 011, 100) = 010當然實際過程比這個要複雜的多的多。Raid 5讀寫數據流程是,讀寫也是基於Raid stripe size, 相當於是一個數據快是Raid最小基礎單元。像人體細胞一樣。
Raid5 寫一份數據,需要下列操作,普通硬碟只要1次寫操作。
控制器讀取舊的數據塊, 讀取舊的校驗塊。 並和新計算出來的進行比對,如果有修改,則要改寫舊塊為新塊(數據快和校驗塊)。 如果只是同等內容修改,沒有用到新的塊。就到此為止了。 簡單的例子是,我新建一個文本文檔,只有一個字元A,沒有空格,空行,tab。我修改A為B,然後保存,文件大小是不變的。如果我把A改成兩個字母「AB」,再保存。相當於申請新的空間來保存另外一個字元B。(此例子只能用來理解,不能代表100%Raid控制器和文件系統是這樣存儲數據) 如果有追加的數據 則還要寫入新的數據塊和新的校驗塊。這一段參考wiki,但是它沒有寫出追加和修改的區別,我這裡寫出來了。所謂硬體Raid控制器也是一套私有系統,自己的CPU,內存,以及存儲數據的單元。只是很小,根據LSI的文檔,同一代高中低端的晶元也是這樣劃分的。根據CPU,內存頻率,當然也有軟體演算法升級和以及某些功能license。其實和intel,nvidia沒啥區別。
注意cache的速度比硬碟快很多。100倍或更多。當然和硬體有關。
硬體raid控制器優勢,有電池或者SLC的SSD來對cache進行保護。(不清楚有沒有無良廠商使用MLC的),相當於給你的台式機內存加裝電池,或者類似win7的關機休眠功能,關機後,內存仍可以得到供電。重新開機後,打開的程序都還在。所以有了電池或者SSD作為cahce,所以硬體raid控制器可以把上述Raid5頻繁讀寫操作往cache裡面塞,主要針對讀寫量不連續磁碟塊的寫操作和以及校驗操作,如果夠大的話,會預讀一部分校驗數據到緩存裡面。順序讀寫磁碟速度是可以接受的(相對來說,極少磁碟額外尋道時間)。所以,我寫10次校驗數據不連續的寫操作,可能都是寫到帶電池的高速緩存中,同樣連續的寫操作,cache會保存校驗數據,但是個人覺得連續寫操作不經過cache效率會更高。
同樣,軟raid,控制調度是OS內核,Xeon E5 E7怎麼都比Power 800要牛B的多吧,注意注意,高速cache不是內存哦。因為你的伺服器內存木有電池哦,所以軟Raid則會使用同步IO操作(帶fsync, O_SYNC標誌的操作)。結果就是相當於沒有內存,因為每次要等磁碟確認響應,相當於你把你的硬Raid控制器調整為write through模式。相當於你的Raid沒有那塊高速cache。
於是,校驗寫一次,雖然經過內存,但是kernel要求要求軟raid驅動給一個數據寫入的確認,軟raid驅動會把這個請求仍給硬碟,要求我(軟raid驅動)剛才寫入1,2,3,4號盤的數據是不是都寫入了。如果寫入了給一個確認。它會等到最後才執行完的那塊硬碟給出確認後,再回復kernel,啊,數據寫完了。
廢話這麼多,硬體raid可以在高速緩存中合併非連續寫和校驗寫為連續的寫操作。
軟體raid則要確認每一次數據和校驗寫是否都寫入到磁碟上去了,還要額外附加一些讀操作,7200或者15000的磁頭要轉啊轉,延時啊。所以軟Raid用來做Raid 1+0 或者Raid 1是和硬體Raid沒有太多區別,可能性能會更好。
但是用來做有校驗的Raid 4,5,6. 則會導致寫性能瓶頸。當然如果你做Raid4,校驗盤用一塊同容量SSD來替代,也是不錯的。哈哈。在來一個例子理解,比如軟raid要出差,目前在帝都北京,但是明天要去武漢,後天又要回北京,最後還要去深圳,去完了還要返回北京,客戶都約好了,不能改時間。
但是硬raid比較靈活,提前和客戶排好了班,先去深圳,再去武漢,最後回北京。雖然OS自己有自己的IO調度隊列,但是被fsync,O_SYNC這種同步IO標誌限制了,沒辦法必須寫到此盤,因為沒有帶電池的內存。(不帶電存儲的高速cache)
但是Linux 3.09之後,情況不是這樣了,3.09引入dm-cache,3.10引入bcache
簡單而言,就是可以使用一個block device塊設備,作為另一個塊設備的write back cache。也就是說,我用一塊高速SSD + 若干的硬碟做軟raid,也有高速寫cache了。硬體raid慢慢要失去優勢了。後續我也看好btrfs加入raid5,6的支持,當然在沒有raid7,8出現的情況下。之前還提到了Sun的存儲,Sun有一個系列Sun ZFS Storage
為什麼Sun的SAN存儲都是軟Raid + SSD,就可以實現和硬Raid匹敵的速度呢?因為ZFS裡面或者說Solaris內核裡面,早就實現了linux 3.10的bcache的功能。所以SUN真是先驅者。確認了用更廉價的硬體是可以搭建出和硬體raid匹敵的硬體。本人非硬體驅動,電子電路工程師,少部分只是看程序YY的答案,回答難免有誤。歡迎大嬸指正。
建議你使用軟RAID。現在的硬體跑軟體RAID 1/0/1+0基本都沒問題。不要認為你晶元組自帶的RAID功能就是「硬RAID」。因為實質上,晶元組提供的RAID功能需要靠CPU進行計算,和操作系統的軟RAID相同,都是軟RAID。真正的硬RAID是有專門的處理器處理信息的。你這需求直接上軟RAID就行,至於RAID信息,無論是硬RAID還是軟RAID都是存放在硬碟頭幾個扇區的。根本就不存在「重裝系統後所有資料消失」的情況。PS:如果你要上RAID5等RAID類型,強烈建議你用硬RAID,畢竟硬RAID的RAID卡具有自己的處理器(計算校驗值時不會佔用主機CPU資源),還有緩存,寫入速度不至於太難看。PSS:軟RAID可以使用INTEL RST提供的(BIOS中設置),也可以用Windows的動態磁碟/存儲空間,OS X磁碟工具中提供的軟RAID,(Linux沒玩過,不清楚)。
太明顯了,硬體RAID獨立於系統,例如win/linux都可以用,是本身有自己的CPU和內存等。而軟RAID是基於系統驅動模擬出來的,佔用主機的CPU資源。唯一的好處應該就是便宜了。
如果是伺服器,一般是有帶硬體RAID的,而PC機則更多是軟RAID,例如現在PC機集成的Intel的RAID,就是BIOS中開和關的,就是軟RAID的一種。
如果是raid0/1建議用硬raid,反正卡便宜(h200什麼的)或者用intel自帶的,適合追求性能數據不重要的場合。卡壞掉的時候數據恢復是個麻煩事情。如果是raid5/6建議直接用zfs的raidz/z2/z3,有快照數據備份方便,擴容簡單,硬碟控制器壞掉直接掛到別的機器直接import即可,硬碟狀態用郵件通知隨時知道硬碟掛掉。缺點是性能受限,不適合1000M/s以上的高速SSD陣列。
俺從1998年開始用Linux核心的軟RAID5。一直很滿意,直到現在在家裡的一個四個2T盤組成的四盤位陣列依舊是用Fedora 22/23跑在ATOM D525上。
如果你看不起軟體RAID非要硬體RAID卡,也很好,但是一定要買帶電池後備的。當需要遷移系統時,硬 RAID 可以直接 Ghost ;但是軟 RAID 沒法 Ghost 備份。
如果對性能不高,就用硬體RAID就可以了。如果是高速存儲設備,譬如NVMe SSD,我現在還沒看到過能扛得住的硬體RAID方案。單SSD差不多80萬IOPS/讀3GB每秒/寫1.6GB每秒,兩塊卡讀就是6GB每秒(注意是Bytes, 不是bits)的吞吐量峰值,160萬次IO每秒,硬體RAID卡直接就成為性能瓶頸了。
還是那句話,如果對性能要求不高,而且板載的RAID控制器靠譜的話,就用板載的吧,越簡單越好。
我來個通俗版的說明:硬體RAID獨立於系統, 一般是獨立的硬體,本身有自己運算處理晶元比如CPU;內存等。
軟RAID一般是通過軟體來實現,基於系統驅動來工作的,還是需要電腦本身的CPU 幫助運算。自己沒有運算處理功能
HostRaid 是一種Software RAID,軟RAID不是OS里提供的RAID功能.
raid 5及以上最好用硬raid,帶cache和電池,raid1同樓上,可軟可硬。
既然提及安全性角度,既然要用RAID,那麼數據的保障是第一要素那麼,建議你還是用硬體RAID,獨立RISC晶元與內存,高級的還帶電池,防止意外掉電的數據寫入如果軟體RAID就用ZFS文件系統實現,而非intel主板上的RAID功能
最好上硬RAID,除非你這個伺服器只做文件伺服器。
軟raid 靈活,功能不爽的話,升級軟體即可,不過計算RAID校驗碼,需要佔用CPU資源;硬raid有專門的硬體處理RAID校驗碼計算,性能更高。但是現在基於x86的伺服器,CPU都很強大,軟的慢不到哪裡去。所以用軟RAID的話,成本更低。主板的RAID功能,也應該是軟的RAID吧,只是BIOS里的軟體幫忙做了而已。(沒有驗證,屬於個人分析)我一般喜歡用Linux自帶的RAID,感覺很好很強大。
我的理解是:軟raid是基於你的OS的,一旦OS崩潰,遇到病毒入侵或者OS的系統文件被誤刪或者丟失之類的,你的raid就over了,數據什麼的也就沒了,基於raid的數據保護就更不用提了。硬raid是基於硬體的,即便你的OS崩潰了,數據還在,raid功能還在。或者你某一塊硬碟宕機了,照樣可以正常運行系統。一般的伺服器都自帶板載raid,可以做raid0,raid1.一般做raid5以上才需要外插raid卡。外插raid卡價格高。你既然是做raid1,那就做硬raid。
推薦閱讀:
※raid有哪幾種有什麼區別?希望講通俗點。
※NVMe SSD RAID是什麼樣的體驗?
TAG:RAID |