RAID
Redundant Arrays of inexpensive(Independent)Disks,RAID:容錯式廉價磁盤陣列,容錯式獨立磁盤陣列,簡稱RAID,由加利福尼亞大學伯克利分校(University of California-Berkeley)在1988年,發表的文章:“A Case for Redundant Arrays of Inexpensive Disks”。文章中,談到了RAID這個詞匯,而且定義了RAID的5層級。
獨立磁盤冗余陣列(RAID,redundant array of independent disks)是把相同的數據存儲在多個硬盤的不同的地方(因此,冗余地)的方法。通過把數據放在多個硬盤上,輸入輸出操作能以平衡的方式交疊,改良性能。(即把多塊硬盤通過某種方法組織成一個存儲設備來使用的技術)。這中技術表現在兩個方面,提高IO能力(通過多個磁盤并行讀寫來實現,但是對于磁盤IO能力的提升是有限的,所以有些RAID廠商采用給RAID控制器額外添加內存,CPU,IO,專用RAID自己的來提高性能)和提高耐用性(通過磁盤冗余來實現)。
RAID的實現方式有三種
外接式磁盤陣列:(在當前主機上提供一個專門的控制器可以接在PCI或PCI-E的接口上作為一個擴展卡)通過擴展卡提供適配能力
內接式磁盤陣列:主板上有自己集成RAID控制器
Software:軟件仿真的方式來實現
RAID在組織多塊硬盤時的這種技術分為多個級別:此級別僅用于標識多塊磁盤組織在一起的工作方式有所不同
常用的有RAID0-6
RAID0:條帶卷
工作特性:需要最少兩塊磁盤或兩塊以上,把幾個相同的容量的磁盤合并在一起(磁盤容量必須相等,否則以最小容量磁盤為準,即磁盤A,10G大小,磁盤B,20G大小,那么磁盤B的實際做RAID的可用空間大小僅為10G)。將寫入的數據分割成數個塊,依次寫入的每個硬盤中,那么RAID0的可用空間為N*min(s1,s2..磁盤個數*空間最小的那顆磁盤的大?。R源颂岣咦x寫能力。一旦其中一塊硬盤損壞,那么數據自然就不完整了,所以說RAID0提高了IO能力,但是沒有冗余和錯誤修復能力。
RAID1:鏡像卷
工作特性:一般都用兩塊磁盤,根據其特性來定兩個以上做RAID1沒有必要,把兩個相同容量的磁盤合并在一起(磁盤容量必須相等,否則以最小容量磁盤為準,即磁盤A,10G大小,磁盤B,20G大小,那么磁盤B的實際做RAID的可用空間大小僅為10G),將寫入的數據分別完整備份寫入每個磁盤,那么RAID0的可用空間為1*min(s1,s2…1*空間最小的那顆磁盤的大小)。以此提高冗余能力,一旦其中一塊硬盤損壞,可以繼續使用另一塊硬盤上的數據,所有說RAID1提高了冗余能力,但是沒有提高IO性能,反而略微下降,因為每次寫入的數據都要分別存儲兩份。
RAID4:
工作特性:一般需要3塊或3塊以上磁盤組織成一個RAID,好比現在分別有磁盤A,B,C,然后存數據時其中磁盤C用來存儲校驗碼,其他盤用來存儲數據,寫入數據的過程是,磁盤A存儲chunk1,磁盤B存儲chunk2,磁盤C用來存儲chunk1和chunk2的校驗碼。校驗碼可以在磁盤A或磁盤B其中之一損壞時使用異或運算的方式將數據算出來(這樣帶來的結果就是讀取速度變慢)剩余兩塊磁盤的壓力比較大,但是此時磁盤還可以進行讀寫工作,這種情況下的工作模式被稱為“降級模式” 如果要是磁盤A和磁盤B同時損壞了的話,就沒有辦法恢復數據了?;趦杀P磁盤同時損壞的風險太大,所有要在其中一塊損壞時,及時更換損壞了的硬盤,安裝上去的新硬盤會利用現有的兩塊硬盤計算出數據放入新硬盤中進行數據恢復。當然也不排除在數據恢復的時候再一次有磁盤發生損壞,那么就徹底崩盤了,考慮發生此類事件的可能性,很多RAIN控制器有內置的接口用來監控磁盤是否損壞,或者控制器支持多接一塊磁盤用來做熱備,當有一塊盤壞了,熱備盤就自動啟用取代損壞了的磁盤。鑒于RAID4校驗盤的機制,無論哪一個數據盤讀寫數據,都要經過校驗盤,所以校驗盤的壓力比其他盤的壓力都大的多。就因為此一個原因,就徹底拉低了RAID4的整體性能。
RAID5:
工作特性:與RAID4的區別在與,RAID4是專門取用一個盤來放校驗碼,而RAID5是分布式的校驗機制,即每塊磁盤上有有校驗碼信息,比如有磁盤A,B,C。當對DRID5寫入數據時,會把數據分割然后數據塊1寫入磁盤A,數據塊2寫入磁盤B,把數據1,2的校驗碼寫入磁盤C。簡單的說就是數據寫入的同時還會在這3塊硬盤上寫入校驗信息。RAID5的讀寫性能提升,可用空間為N-1*min(s1,s2…)磁盤數n-1,Raid 5 沒有獨立的校驗盤,所有校驗信息分散放在所有磁盤上, 只占用一個磁盤的容量.
RAID6:
工作特性:在RAID5的基礎上增加了一層分布式校驗,即每次寫入數據都寫入兩次校驗信息,雙保險,需要使用最少4塊磁盤來組建,因為每次寫入數據都要存儲校驗信息兩次,所以可用空間為(N-2)*min(s1,s2,…),讀寫性能提升有冗余能力,允許損壞兩塊磁盤。
RAID1+0:
底層是RAID1上次是RAID0!
工作特性:先兩兩一組將磁盤制作成(鏡像卷)RAID1,然后再把多組RAID1做成(條帶卷)RAID0。工作模式就是先啟用RAID0的機制把數據依次分塊寫入每個RAID1中,而RAID的機制又把每個塊寫了兩次到不同的磁盤中。讀寫性能提升,有冗余能力,每組鏡像最多只能壞一塊,可用空間為N*min(s1,s2…)/2,最少需要4塊硬盤組建。
Raid 10其實結構非常簡單,首先創建2個獨立的Raid1,然后將這兩個獨立的Raid1組成一個Raid0,當往這個邏輯Raid中寫數據時,數據被有序的寫入兩個Raid1中。磁盤1和磁盤2組成一個Raid1,磁盤3和磁盤4又組成另外一個Raid1;這兩個Raid1組成了一個新的Raid0。如寫在硬盤1上的數據1、3、5、7,寫在硬盤2中則為數據1、3、5、7,硬盤3中的數據為0、2、4、6,硬盤4中的數據則為0、2、4、6,因此數據在這四個硬盤上組合成Raid10,且具有raid0和raid1兩者的特性。
雖然Raid10方案造成了50%的磁盤浪費,但是它提供了200%的速度和單磁盤損壞的數據安全性,并且當同時損壞的磁盤不在同一Raid1中,就能保證數據安全性。假如磁盤中的某一塊盤壞了,整個邏輯磁盤仍能正常工作的。
當我們需要恢復RAID 10中損壞的磁盤時,只需要更換新的硬盤,按照RAID10的工作原理來進行數據恢復,恢復數據過程中系統仍能正常工作。原先的數據會同步恢復到更換的硬盤中。
RAID0+1:
底層是RAID0,上層是RAID1
工作特性:是先做RAID0,在做RAID1,工作模式就是先啟用RAID1機制將每塊數據分別存儲到RAID0中,然后RAID0再次把數據分割分別存儲到RAID0下的磁盤中,這樣看就有些不符合邏輯了,因為在寫入RAID1的時候數據已經被分割,在RAID0階段又要進行一次數據塊分割。每個RAIN0分割出來的數據都不一樣,而且每個RAID0不止只有兩塊硬盤。這樣RAID0+1允許壞多個磁盤,但是只能壞在同一個RAID0中。
===================================================================
注意
Raid 10 和 Raid01的區別:
RAID10又稱為RAID1+0,先進行鏡像(RAID1),再進行條帶存放(RAID0)。
允許壞多個盤,只要不是一對磁盤壞就可以
RAID01又稱為RAID0+1,先進行條帶存放(RAID0),再進行鏡像(RAID1)。
允許壞多個盤,但只能在壞在同一個RAID0中,不允許兩個RAID0都有壞盤
========================================================================
JBOD:
嚴格意義上不輸入RAID范圍呢,功能是將多個磁盤空間合并成一個大的連續空間來使用,可以空間為所有磁盤空間大小的和
========================================================================
常用級別
RAID-0,RAID-1,RAID-5,RAID-10,RADI-50,JBOD
在CentOS6上有軟件方式實現RAID
結合內核中的md(multi devices)
mdadm:模式化的工具
命令的語法格式:mdadm[mode]<raiddevice>[option]<component-devices>
命令 模式 要管理的設備 選項 指定設備的組成部分
支持的RAID級別:LINEAR(線性方式),RAID0,RAID1,RAID4,RAID5,RAID6,RAID10;
模式:
創建模式:-C
裝配模式: -A
監控模式: -F
管理模式: -f,-r,-a
]# cat /proc/mdstat :查看md類型的設備狀態 ]# ls /dev |grep "md" ]# mdadm -C /dev/md0 -l 5 -x 1 -n 3 /dev/sdc1 /dev/sdc2 /dev/sdc3 /dev/sdc4 mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started. ]# mke2fs -t ext4 /dev/md0 ]# mount /dev/md0 /mydata ]# df -h /dev/md0 Filesystem Size Used Avail Use% Mounted on /dev/md0 9.7G 23M 9.2G 1% /mydata ]#vim /etc/fstab 寫入以下信息實現開機自動掛載 UUID="3d876103-f1fe-4b14-ab01-f98e5c46c76c" /mydata ext4 nosuid,nouser,noexec,noatime,async 0 0
<raiddevice>:/dev/md#(centos6重啟后名字會發生變化)
<component-devices>:任意塊設備
-C:創建模式
-n #:使用#個塊設備來創建此RAID
-l #:指明要創建的RAID的級別
-a {yes|no}:自動創建目標RAID設備的設備文件
-c chunk_size:指明塊大小
-x #:指明空閑盤的個數:
例如:創建一個10G可用空間的RAID5:
-D:顯示raid的詳細信息
mdadm -D /dev/md#
管理模式
-f:標記指定磁盤為損壞
]# mdadm /dev/md0 -f /dev/sdc1 mdadm: set /dev/sdc1 faulty in /dev/md0
-a:添加磁盤
]# mdadm /dev/md0 -a /dev/sdc1 mdadm: added /dev/sdc1
-r:移除磁盤
]# mdadm /dev/md0 -r /dev/sdc1 mdadm: hot removed /dev/sdc1 from /dev/md0
觀察md的狀態
cat /proc/mdstat
停止md設備
mdadm -S /dev/md#
watch命令
-n #:刷新時間,單位是秒;
watch -n# 'cmd'
LVM
LVM 的全名是 Logical Volume Manager,中文可以翻譯作邏輯卷。之所以稱為“卷”可能是因為可以將filesystem 像卷軸一樣伸長或縮短之故吧!LVM 的作法是將幾個實體的分區或 磁盤 通過軟件組合成為一塊看起來是獨立的大磁盤 (VG) ,然后將這塊大磁盤再經過分區成為可使用分區 (LV), 最終就能夠掛載使用了(依賴與device mapper模塊)。系統可以進行filesystem 的擴充或縮小,其實與一個稱為 PE 的項目有關.
PV:實際的分區或磁盤,在經過fdisk調整分區類型為(8eLinux LVM)后,使用pvcreate命令將其生成為LVM最底層的實體設備(PV),然后才可以加以利用。
VG:將一個或一個以上的物理PV組合成一個整體的邏輯設備(卷組),這個設備就叫VG,VG的存儲空間大小是基于PV的,VG有些類似與我們給磁盤分區時候的擴展分區,擴展分區是不能用來存儲數據的,要向在其上存儲設備就必須將其再此劃分為多個邏輯分區;VG的空間支持動態擴展和收縮。
PE:VG也會在一個邏輯層次上將每一個PV所提供的空間劃分成多個固定大小的塊(PE),PE的大小默認為4M,大小可以根據VG的定義進行設定。一旦PE被分配給LV后他就不被叫做PE而被叫做LE。
LV:指定特定數量的PE進行創建多個邏輯卷(LV)來實現存儲數據的功能,每一個LV都是一個獨立的文件系統,可以被格式化,并且掛載至指定位置使用,LV的大小可以是VG內任意可用的空間的大小,即可以在VG空間的基礎上隨意增加縮減,而且不會對里邊的數據造成損害。
設備名稱:
/dev/mapper/VG_NAME-LV_NAME;
比如 /dev/mapper/vol0-root
/dev/vg_name/lv_name;鏈接指向–》 /dev/mapper/VG_NAME-LV_NAME
比如 /dev/vol0/root
/dev/dm-# (真正的設備名)
pv管理工具:
pvs:簡要pv信息顯示
pvdisplay:詳細pv信息顯示
pvcreate /dev/DEVICE:創建pv
fdisk /dev/sdb 創建分區 并且將各分區類型改為8e LVM
刪除pv
vg管理工具
vgs
vgdisplay
vgcreate 創建VG [-s #[kKmMgGtTpPeE]]Vol-umeGroupName PhysicalDevicePath [PhysicalDevicePath…]
vgextend 增加一個PV到VG中。Vol-umeGroupName PhysicalDevicePath [PhysicalDevicePath…]
vgreduce 從vg中移除一個pv,移除之前要先做pvmove。把pv上的pe移動至同一個卷組上的其他pv上去。。Vol-umeGroupName PhysicalDevicePath [PhysicalDevicePath…]
vgremove :刪除卷組
vgremove vg_name
lv管理命令:
lvs
lvdispaly
lvcreate -L #[mMgGtT] -n NAME volumegroup : -L 指明LV大小,-n 指明LV名稱, volmegroup 指明在哪個卷組中創建
創建完成后就可以格式化文件系統然后掛載使用了
lvremove /dev/VG_NAME-LV_NAME :刪除邏輯卷
擴展邏輯卷:(步驟)
1 lvextend -L [+]#[mMgGtT] /dev/VG_NAME-LV_NAME -L 指明要擴展的大小
擴展完邏輯卷之后需要繼續擴展文件系統大小,才能在df -lh 命令下看到邏輯卷的實際大小。
2 resize2fs /dev/VG_NAME-LV_NAME 擴展文件系統大小(至實用與ext系列文件系統)
擴展時不指明大小 即表示擴展至LV最大化
擴展后使用df -lh就可看到邏輯卷的實際大小了
縮減邏輯卷:(步驟)
1 umount /dev/VG_NAME-LV_NAME:先卸載設備
2 e2fsck -f /dev/VG_NAME-LV_NAME:強制檢測修復文件系統
3 resize2fs /dev/VG_NAME-LV_NAME #[mMgmtT]:縮減邏輯邊界大小 需要指明縮減大小
4 lvreduce -L [-]#[mMgGtT] /dev/VG_NAME-LV_NAME:縮減物理邊界大小 需要指明縮減大小
5 mount /dev/VG_NAME-LV_NAME:重新掛載使用
快照:snapshot:快照卷和原卷必須在同一卷組中
lvcreate -L [mMgGtT] -p r -s -n lv_name_snapshot original_lv_name
-s 指明要創建快照 -L 指明快照大小 -p 指明快照只讀類型 -n 快照名 原卷名
-L 指明快照大小:即快照的存活時間,如果我指定快照500M 那么原卷的增長在500M之內 快照就會存活,如果原卷數據增長到500M以上,那么快照卷就完蛋了。
創建一個可用空間為1G的RAID1設備,文件系統為ext4,有一個空閑盤,開機可自動掛載至/backup目錄
1:fdisk t fd
fdisk /dev/sdb 首先創建分區,并且設置分區類型為fd RAID
2: 創建raid設備
mdadm -C /dev/md0 -l1 -a yes -n2 -x1 /dev/sdb{1,2,3} 使用/dev/sdb1,2制作raid1,/dev/sdb3做熱備盤
3:mkfs.ext4 /dev/md0 :給raid設備創建文件系統
mkfs.ext4 /dev/md0
4:vim /etc/fstab:編輯默認掛載配置信息
UUID="c2b98bb8-ce52-436e-83a6-2b8f53971972" /backup ext4 defaults 0 0 :添加此段信息
5:確保掛載點存在,然后掛載設備
mount -a /dev/md0
6:mdadm -Ds /dev/md0 > /etc/mdadm.conf:生成配置文件
mdadm -Ds /dev/md0 > /etc/mdadm.conf
mdadm -A /dev/md0 啟動raid
mdadm -A /dev/md0
7:測試
mdadm /dev/md0 -f /dev/sdf1 模擬損壞
]# mdadm /dev/md0 -f /dev/sdb1 mdadm: set /dev/sdb1 faulty in /dev/md0
mdadm /dev/md0 -r /dev/sdf1 刪除成員
]# mdadm /dev/md0 -r /dev/sdb1 mdadm: hot removed /dev/sdb1 from /dev/md0
mdadm /dev/ma0 -a /dev/sdf1 增加
]# mdadm /dev/md0 -a /dev/sdb1 mdadm: added /dev/sdb1
8:刪除raid
umount /dev/raid
]# umount /dev/md0
mdadm -S /dev/md0 停止raid
]# mdadm -S /dev/md0 mdadm: stopped /dev/md0
vim /etc/fstab:刪除默認掛載配置信息
fdisk /dev/sda:刪除raid 物理盤
mdadm –zero-superblock /dev/sda 清除在blkid中的信息
創建由三塊硬盤組成的可用空間為2G的RAID5設備,要求其chunk大小為256k,文件系統為ext4,開機可自動掛載至/mydata目錄
先fdisk t fd 三個磁盤分區 各為1G
]# mdadm -C /dev/md1 -l5 -a yes -n3 -c 256K /dev/sd{c1,d1,e1}
]# vim /etc/fstab 添加UUID="2398a15f-9510-472d-8166-3278f1aee579" /mydata ext4 defaults 0 0 進配置文件 ]# mkdir /mydata 創建掛載點 ]# mount -a 掛載 ]# mdadm -Ds /dev/md1 > /etc/mdadm.conf 生成配置文件 ]# mdadm -A /dev/md1 開始raid1 ]# cat /proc/mdstat 查看raid狀態 Personalities : [raid1] [raid6] [raid5] [raid4] md1 : active raid5 sde1[3] sdd1[1] sdc1[0] 2118144 blocks super 1.2 level 5, 256k chunk, algorithm 2 [3/3] [UUU] unused devices: <none>
創建和擴扎邏輯卷
]# fdisk /dev/sdd 分區并設備類型為lvm ]# pvcreate /dev/sdc1 創建物理卷 ]# vgcreate myvg /dev/sd{c1,d1} 創建卷組 默認pe大小為4M Physical volume "/dev/sdd1" successfully created Volume group "myvg" successfully created ]# lvcreate -n mylv -L 1G myvg 創建邏輯卷 ]# lvextend -L 2G /dev/myvg/mylv 擴展邏輯卷 ]# lvdisplay --- Logical volume --- LV Path /dev/myvg/mylv LV Name mylv VG Name myvg LV UUID 6usI4w-rzFS-zCsA-DWTj-2kDI-1JD2-W7wiPJ LV Write Access read/write LV Creation host, time localhost.localdomain, 2016-08-26 11:53:12 +0800 LV Status available # open 0 LV Size 2.00 GiB Current LE 512 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:4
1、創建一個至少有兩個PV組成的大小為20G的名為testvg的VG;要求PE大小為16MB, 而后在卷組中創建大小為5G的邏輯卷testlv;掛載至/users目錄
2、新建用戶archlinux,要求其家目錄為/users/archlinux,而后su切換至archlinux用戶,復制/etc/pam.d目錄至自己的家目錄
3、擴展testlv至7G,要求archlinux用戶的文件不能丟失
4、收縮testlv至3G,要求archlinux用戶的文件不能丟失
5、對testlv創建快照,并嘗試基于快照備份數據,驗正快照的功能
完
原創文章,作者:M20-1馬星,如若轉載,請注明出處:http://www.www58058.com/40760