RAID
RAID:RedundantArrays of Inexpensive/Independant Disks 即磁盤陣列
RAID可以通過一些技術將多個小的磁盤整合成爲一個較大的磁盤設備;而這個較大的磁盤功能可不止是存儲而已,它還具有數據保護的功能
RAID的分類:
硬件RAID:是通過磁盤陣列卡來完成數組的目的。磁盤陣列卡上面有一塊專門的芯片在處理RAID的任務,因此在性能方面會比較好。在很多任務時磁盤陣列並不會重複消耗原本系統的I/O總線,理論上性能會較佳。
軟件RAID:主要是通過軟件來仿真屬組的任務,因此會損耗較多的系統資源,比如說CPU的運算與I/O總線的資源等。
整個RAID由於選擇的level不同,而使得整合後的磁盤具有不同的功能,基本常見的等級有這幾種。
RAID-0(等量模式,stripe):性能最佳
這種模式如果使用相同型號與容量的磁盤來組成時,效果較佳。這種模式的RAID會將磁盤先切出等量的區塊(舉例來說,4KB),然後當一個文件要寫入RAID時,該文件會依據塊的大小切割好,之後再依序存放到各個磁盤裏面去。由於每個磁盤文件會交錯存放數據,因此當你的數據要寫入RAID時,數據會被等量放置在各個磁盤上面。舉例來說,你有兩塊磁盤組成RAID-0,當你有100MB的數據要寫入時,每個磁盤會各被分配到50MB的存儲量。RAID-0的示意圖如下圖所示:
上圖的意思是,在組成RAID-0時,每塊磁盤都會先被分隔成爲小區塊(chunk),當有數據要寫入RAID時,數據會先被分成符合小區塊的大小,然後再依序一個一個放置到不同的磁盤去。由於數據已經先被分並且依序放置到不同的磁盤上面,因此每塊磁盤所負責的數據量都降低了。照這樣的情況來看,越多塊磁盤組成的RAID-0性能會越好,因爲每塊負責的數據量就更低了,這表示我的數據可以分散讓多塊磁盤來存儲,當然性能會變得更好,此外,磁盤總容量也變大了,因爲每塊磁盤的容量最終會加成爲RAID-0的總容量。
使用此等級你必須自行負擔數據損毀的風險,由上圖我們知道文件是被切割成爲適合每塊磁盤分區區塊的大小,然後再依序放置到各個磁盤中。這時,如果某一塊磁盤損毀了,那麼文件數據將缺一塊,此時這個文件就損毀了。由於每個文件都是這樣存放的,因此RAID-0只要任何一塊磁盤損毀,在RAID上面的所有數據都會丟失而無法讀取。
RAID-1(映像模式,mirror):完整備份
這種模式也是需要相同的磁盤容量的,最好一模一樣的磁盤。如果是不同容量的磁盤組成RAID-1時,那麼總容量將以最小的那一塊磁盤爲主,這種模式主要是讓同一份數據完整保存在兩塊磁盤上面。舉例來說,如果我有一個100MB的文件,且我僅有兩塊磁盤組成RAID-1時,那麼這兩塊磁盤將會同步寫入100MB到它們的存儲空間去。因此,整體RAID的容量幾乎少了50%。由於兩塊硬盤內容一模一樣,好像鏡子映照出來的一樣,所以我們也稱它爲鏡像模式。
如下圖所示,一份數據傳送到RAID-1之後會被分成兩份,並分別寫入到各個磁盤裏面去。由於同一份數據會被分別寫入到其它不同磁盤,因此如果要寫入100MB時,數據傳送到I/O總線後會被複制多份到各個磁盤,結果就是感覺數據量變大了。因此在大量寫入RAID-1的情況下,寫入的性能可能會變得非常差。
由於兩塊磁盤的數據一模一樣,所以任何一塊硬盤損毀時,你的數據還是可以完整保留下來。所以說,RAID-1最大的優點是數據的備份,不過由於磁盤容量有一半用在備份,因此總容量會是全部磁盤容量的一半。
RAID 0+1,RAID 1+0
RAID-0的性能佳但是數據不安全,RAID-1的數據安全但是性能不佳,那麼能不能將這兩者整合起來呢,那就是RAID 0+1或RAID 1+0。所謂的RAID 0+1就是先讓兩塊磁盤組成RAID0,並且這樣的設置共有兩組;然後將這兩組RAID 0再組成一組RAID 1。這就是RAID 0+1。反過來說,RAID1+0就是先組成RAID 1再組成RAID 0的意思。
如下圖所示,DiskA +Disk B組成第一組 RAID 0,Disk C +Disk D組成第二組RAID 0,然後這兩組再整合成爲一組RAID1。如果我有100MB的數據要寫入,則由於RAID1的關係,兩組RAID 0都會寫入100MB,但由於RAID 0的關係,因此每塊磁盤僅會寫入50MB而已。如此一來不論哪組RAID0的磁盤損毀,只要另外一組RAID 0還存在,那麼就能夠通過RAID1的機制來恢復數據。
由於具有RAID 0的優點,所以性能得以提升,由於具有RAID 1的優點,所以數據得以備份。但是也由於RAID的缺點,所以總量會少一半用來作爲備份。
RAID 5
RAID -5至少需要三塊以上的磁盤才能夠組成這種類型的磁盤陣列。這種磁盤陣列的數據寫入有點類似RAID -0,不過每個循環的寫入過程中,在每塊磁盤還加入一個同位檢查數據,這個數據會記錄其它磁盤的備份數據,用於當有磁盤損毀時的救援。RAID-5讀寫的情況如下圖所示:
圖中,每個循環寫入時,都會有部分的同位檢查碼被記錄起來,並且記錄的同位檢查碼每次都記錄在不同的磁盤,因此,任何一個磁盤損毀時都能夠通過其它磁盤的檢查碼來重建原本磁盤內的數據。不過需要注意的是,由於有同位檢查碼,因此RAID-5的總容量會是整體磁盤數量減一塊。以上圖爲例,原來的3塊磁盤只會剩下2塊磁盤的容量,而且當損毀的磁盤容量大於等於兩塊時,這整租RAID5的數據就損毀了,因爲RAID5默認僅能支持一塊磁盤的損毀情況。
在讀寫性能上,與RAID-0有得比,不過寫的性能就不見得能夠增加很多。這是因爲要寫入RAID 5的數據還得要經過計算同位檢查碼的關係。由於加上這個計算的操作,所以寫入的性能與系統的硬件關係較大。
CentOS 6上的軟件RAID實現:
結合內核中的md(multi devices)模塊實現的
mdadm:模式化的工具
命令的語法格式:mdadm [mode] <raiddevice> [options]<component-devices>
支持的RAID級別:LINEAR,RAID0,RAID1,RAID4,RAID5,RAID6,RAID10;
模式:
創建:-C
裝配:-A
監控:-F
管理 :-f,-r,-a
<raiddevice>:/dev/md#
<component-devices>:任意塊設備
-C:創建模式
-n:使用#個塊設備來創建此RAID
-l:指明要創建的RAID的級別
-a:{yes|no}是否自動創建目標RAID設備的設備文件
-c CHUNK_SIZE:指明塊大小
-x #:指明空閒盤的個數;
-D:顯示raid的詳細信息
管理模式:
-f:標記指定磁盤爲損壞
-a:添加磁盤
-r:移除磁盤
觀察md的狀態:
cat/proc/mdstat
停止md設備:
mdadm -S/dev/md#
mdadm -C /dev/md0 -a yes -n 3 -x 1 -l 5/dev/sdc{1,2,3,4} 創建一個raid 5
cat /proc/mdstat 查看當前系統上的raid狀態
mdadm -D /dev/md0:查看做好的raid md0的詳細信息
mdadm /dev/md0 -f /dev/sda8表示將raid md0中的sda8盤標記爲錯誤盤
mdadm /dev/md0 -r /dev/sda7表示將raid md0中的sda7盤移除
mdadm /dev/md0 -a /dev/sda7表示將sda7盤加入到raid dev/md0中;
LVM2
LVM:logicalVolume Manager ,Version:2
使用內核中的dm(devicemapper)模塊,將一個或多個底層塊設備組織成一個邏輯設備的模塊;
/dev/dm-#
/dev/mapper/VG_NAME-LV_NAME
/dev/mapper/vol0-root
物理存儲介質(Thephysical media):這裏指系統的存儲設備:硬盤,如:/dev/hda1、/dev/sda等等,是存儲系統最低層的存儲單元。
物理卷(physicalvolume):物理卷就是指硬盤分區或從邏輯上與磁盤分區具有同樣功能的設備(如RAID),是LVM的基本存儲邏輯塊,但和基本的物理存儲介質(如分區、磁盤等)比較,卻包含有與LVM 相關的管理參數。
卷組(VolumeGroup):LVM卷組類似於非LVM系統中的物理硬盤,其由物理卷組成。可以在卷組上創建一個或多個“LVM分區”(邏輯卷),LVM卷組由一個或多個物理卷組成。
邏輯卷(logicalvolume):LVM的邏輯卷類似於非LVM系統中的硬盤分區,在邏輯卷之上可以建立文件系統(比如/home或者/usr等)。
PE(physicalextent):每一個物理卷被劃分爲稱爲PE(Physical Extents)的基本單元,具有唯一編號的PE是可以被LVM尋址的最小單元。PE的大小是可配置的,默認爲4MB。
LE(logicalextent):邏輯卷也被劃分爲被稱爲LE(Logical Extents) 的可被尋址的基本單位。在同一個卷組中,LE的大小和PE是相同的,並且一一對應。
簡單來說就是:
PV:是物理的磁盤分區
VG:LVM中的物理的磁盤分區,也就是PV,必須加入VG,可以將VG理解爲一個倉庫或者是幾個大的硬盤。
LV:也就是從VG中劃分的邏輯分區
pv管理工具:
pvs:簡要pv顯示信息
pvdispaly:顯示pv的詳細信息
pvcreate /dev/DIVICE:創建pv
pvremove /dev/DEVICE:刪除pv
vg管理工具:
vgs:顯示簡要vg信息
vgdisplay:顯示vg的詳細信息
vgcreate NAME /dev/DEVICE:創建vg
vgextend NAME /dev/DEVICE:擴展vg
vgreduce
lv管理工具:
lvs:查看簡要lv信息
lvdisplay
lvcreate -L #[mMgGtT] -n NAMEVolumeGroup 注意,指定的大小必須在卷組vg中存在那麼大的空間
擴展邏輯卷:
lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME擴展之後需要執行以下命令擴展文件系統
resize2fs /dev/VG_NAME/LV_NAME
縮減邏輯卷步驟:
umount /dev/VG_NAME/LV_NAME
e2fsck -f /dev/VG_NAME/LV_NAME 卸載之後要做強制檢測
resize2fs /dev/VG_NAME/LV_NAME#[mMgGtT]
lvreduce -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME
mount