磁盤接口的性能決定着磁盤數據傳輸的速率,一般磁盤設備接口的讀寫標準如下:
|
正如我們所知道的,不同的硬盤數據存儲的性能和內部機制存在着大大小小的差異:
IDE:
l 指把控制器與盤體集成在一起的硬盤驅動器,我們常說的IDE 接口,也叫ATA接口(並行);
l 並行雙通道;
SATA:
u SATA是Serial ATA的縮寫,即串行ATA。它是一種電腦總線,主要功能是用作主板和大量存儲設備(如硬盤及光盤驅動器)之間的數據傳輸之用。
u 串行高傳輸速率;
u 支持熱插拔;
u 採用了點對點傳輸協議,每一個硬盤與主機通信時都獨佔一個通道,系統中所有的硬盤都是對等的,因此,在串行ATA中將不存在“主/ 從”盤的區別,用戶也不用再費事去設置硬盤的相關跳線了。
SCSI:
一種總線型的系統接口,每個SCSI總線上可以連接包括SCSI控制卡在內的8/16個SCSI設備;
支持冗餘磁盤陣列(RAID)等多種設備;
SCSI磁盤自身攜帶有類似與CPU的小型控制設備,可以解放CPU,結合獨立總線使得SCSI設備的CPU佔用率很低,大大的提高傳輸速率;
每個SCSI ID上最多有32個LUN,一個LUN對應一個邏輯設備;
窄SCSI接口(8 target)
控制器端也佔用一個target。
當CPU向SCSI設備發送指令/存儲數據時,SCSI設備怎麼知道目標磁盤是哪一個?
CPU發來的數據的首部包含了目標設備的targetID和LUN ID等控制信息,通過控制器的解釋後,控制器會一步步將該指令/數據定向到目標設備。
在小型計算機/服務器中,它們可以妥妥的滿足用戶/系統的需求;但是對於大型公司的數據存儲,IO存取的速率會遠遠超過單個磁盤提供的的標準性能,這就這就形成了一個IO瓶頸。那麼,這種瓶頸該如何打破呢?
RAID應運而生,它是指將多個獨立的物理硬盤按照不同的方式組合起來,形成一個虛擬的硬盤;
如上所示,系統內部中的IDE磁盤性能較低,在無法滿足系統正常運行所需需求的情況下,就需要對磁盤性能進行提升。特別是對於一些公司內部重要的服務器,正在運行中,但是又不可能停下來,換一塊更大的硬盤,然後繼續運行,這樣的話,公司的損失是巨大的;那麼只有在系統運行的情況下進行冗餘技術和熱備、熱換;
我們可以在計算機的外部提供一個控制器,該控制器支持SCSI接口,通過SCSI接口的總線,我們可以接上更多的硬盤,這些硬盤是並行的,所以會大大提高傳輸速率;
但在與CPU來看,外部磁盤設備相當於一個整體,數據存儲是通過控制器2來實現分發和鏡像的。
根據RAID組織的不同方式可以將RAID分成不同的級別:
RAID 0:條帶
l RAID0是以條帶的形式將數據均勻分佈在陣列的各個磁盤上
RAID 1:鏡像
l RAID1以鏡像爲冗餘方式,對虛擬磁盤上的數據做多份拷貝,放在成員磁盤上
RAID2:
l 採用校驗冗餘
à 把數據分散爲位或塊,加入漢明碼,間隔寫入到磁盤陣列的每個磁盤中
à 在成員磁盤上的地址都一樣
l 採用了並行存取方式
l 花費大,成本昂貴
RAID 3:
數據塊被分爲更小的塊並行傳輸到各個成員磁盤上,同時計算XOR校驗數據存放到專用的校驗磁盤上
RAID 4:校驗碼
數據被分爲更大的塊並行傳輸到各個成員磁盤上,同時計算XOR校驗數據存放到專用的校驗磁盤上
修復:假如其中一塊磁盤壞掉了,可以使用一塊新的磁盤代替壞掉的磁盤,並根據校驗磁盤計算出壞掉磁盤的數據,並將數據寫入新的磁盤,這個過程就叫磁盤修復
如果在磁盤修復過程中出現了差錯,導致磁盤修復失敗,那麼磁盤中的數據將徹底丟失,永遠無法找回
冗餘能力:壞掉一塊磁盤,可以修復;同時壞掉2+塊磁盤,將無法修復
RAID 5:輪流校驗碼
採用獨立存取的陣列方式,校驗信息被均勻的分散到陣列的各個磁盤上
冗餘能力:壞掉一塊磁盤,可以修復;同時壞掉2+塊磁盤,將無法修復
RAID 6:
l 帶有兩種分佈存儲的檢驗信息的磁盤陣列,它是對RAID5的擴展,主要是用於要求數據絕對不能出錯的場合,使用了二種奇偶校驗方法,需要N+2個磁盤
常用的RAID6技術:
l RAID6 P+Q
l RAID6 DP
RAID 7:Jbod
l 將多個小型磁盤疊加,組合成一個更大的磁盤
l 不提供數據校驗和鏡像備份
l 對數據存儲速率沒有提升,對數據的可用性也沒有保障
冗餘能力:壞掉一塊磁盤,所有的數據都將丟失
RAID 10:
先鏡像,再條帶化
冗餘能力:左右兩邊同時各壞掉至少一個編號不一致的磁盤,數據完全丟失
若左邊/右邊的磁盤全部壞掉了,可以通過相應磁盤的鏡像恢復
RAID 01:
先條帶化,再鏡像
冗餘能力:每組鏡像磁盤各壞掉一個,數據可以恢復
假如其中一組中的所有磁盤都壞掉了,數據將完全丟失
RAID 50:
l RAID5和RAID0的結合,先實現RAID5,再條帶化
冗餘能力:
最強
常用RAID級別比較:
RAID 0 |
RAID 1 |
RAID 5 |
RAID JBOD |
性能提升: 讀,寫 冗餘能力(容錯能力): 無 空間利用率:n 至少2塊盤
|
性能表現:寫性能下降,讀性能提升 冗餘能力:有 空間利用率:1/2 至少2塊盤 |
性能表現:讀,寫提升 冗餘能力:有 空間利用率:(n-1)/n 至少需要3塊
|
性能表現:無提升 冗餘能力:無 空間利用率:100% 至少需要2塊 |
RAID 01 |
RAID 10 |
RAID 50 |
|
性能表現:讀、寫提升 冗餘能力:有 空間利用率:1/2 至少需要4塊
|
性能表現:讀、寫提升 冗餘能力:有 空間利用率:1/2 至少需要4塊 |
性能表現:讀、寫提升 冗餘能力:有 空間利用率:(n-2)/n 至少需要6塊
|
|
硬件RAID和軟件RAID:
通常情況下所說的RAID指的是硬件RAID,軟件RAID是指模擬RAID創建的軟件設備;
硬件RAID:
SATA+SAS/SCSI
可以提高讀寫速率,並保證數據的冗餘
硬件RAID一般獨立於計算機/服務器,屬於外部獨立設備,它是通過兩個控制器之間的總線和計算機/服務器進行數據傳輸和通信的。
硬件RAID需要在BIOS進行配置,對於已經組合的RAID陣列磁盤,操作系統識別到的只是一個普通的磁盤設備,即/dev/sdaN;假如在BIOS已經配置好了RAID,操作系統卻無法識別,很可能是RAID驅動的問題,這就需要聯繫硬件廠商獲取RAID驅動了。
某些RAID芯片上帶有緩存,可以提高數據讀寫的速率,但是遇到突然斷電的情況,數據可能會丟失,所以還有一些更高級的RAID芯片,在內部嵌入電池,在突然斷電情況下,依然可以保證數據全部都寫入硬盤才關機,從而保證了數據的安全性。
軟件RAID(邏輯RAID):
假設計算機內部存在多個磁盤,操作系統裝載OS盤上,在其他磁盤格式化成文件系統之前,內核可以識別當前系統中的其他磁盤;
內核中又一個模塊MD(multi disks),它可以讀取磁盤的配置信息,並識別哪些磁盤可以用來組合成爲RAID磁盤,然後將指定磁盤組合起來,形成RAID
邏輯RAID就是通過MD來實現的,Md模擬一個假的RAID設備,並創建對應的設備文件/dev/mdN;
存儲數據時,內核讀取配置文件識別該設備後,在內核內部由MD模塊負責將數據以RAID設備的格式分別發送到各個磁盤上去。
邏輯RAID的實質
在用戶空間和內核空間之間創建一個假的RAID設備,這個RAID設備可以模擬RAID設備工作;這個RAID設備對於用戶看來,是一個RAID設備,但對於內核看來,還是N個獨立的磁盤。
邏輯RAID性能取決於CPU
假設操作系統崩潰,內核也就沒有了,此前配置的RAID信息也會消失,以RAID形式存儲在磁盤上的數據也就不能訪問了。
邏輯RAID數據安全性防範
邏輯RAID磁盤設備必須標識爲fd類型,這樣存儲數據的時候,會在數據之外存儲一些元數據(黃色小方塊表示元數據),重裝操作系統時,內核中的md模塊可以通過重新掃描該fd設備,將該fd設備組合成原先的RAID設備。
邏輯RAID管理命令
madam命令:RAID管理工具
模式化的命令:
創建模式
-C
專用選項:
-l:級別
-n#: 設備個數
-a{yes|no}: 是否自動爲其創建設備文件
-c:CHUNK大小, 2^n,默認爲64K
-x#: 指定空閒盤個數
管理模式
--add,--remove, --fail,--stop
-a,-r, -f,-S
mdadm/dev/md# --fail /dev/sda7
監控模式
-F
增長模式
-G
裝配模式
-A
<p>查看RAID陣列的詳細信息</p><p>mdadm <strong>-D</strong>/dev/md#</p><p> --detail</p><p></p><p>將當前RAID信息保存至配置文件,以便以後進行直接裝配:</p><p>mdamd -D --scan > /etc/mdadm.conf</p>
<p>查看當前系統當前狀態下所有啓用的RAID設備信息:</p><p>cat /proc/mdstat</p>
<p>提高RAID陣列磁盤性能</p><p>Mke2fs –j –E stride=16 –b 4096 /dev/mdN</p>其中stride=CHUNK/block size