1. 程式人生 > >RAID和邏輯卷管理器(LVM)

RAID和邏輯卷管理器(LVM)

RAID和邏輯卷管理器(LVM)

什麽是RAID
RAID:RedundantArrays of Inexpensive(Independent)Disks 廉價的獨立磁盤
1988年由加利福尼亞大學伯克利分校(University of California-Berkeley)“A Case for Redundant Arrays of Inexpensive Disks”
多個磁盤合成一個“陣列”來提供更好的性能、冗余,或者兩者都提供

RAID
提高IO能力
磁盤並行讀寫
提高耐用性
磁盤冗余來實現
級別:多塊磁盤組織在一起的工作方式有所不同
RAID實現的方式:
外接式磁盤陣列:通過擴展卡提供適配能力
內接式RAID:主板集成RAID控制器
安裝OS前在BIOS裏配置
軟件RAID:通過OS實現

RAID級別
RAID-0:條帶卷,strip
RAID-1: 鏡像卷,mirror
RAID-2
...
RAID-5
RAID-6
RAID-10
RAID-01

RAID-0:
讀、寫性能提升;
可用空間:N*min(S1,S2,...)
無容錯能力
最少磁盤數:2, 2+

RAID-1:
讀性能提升、寫性能略有下降;
可用空間:1*min(S1,S2,...)
有冗余能力
最少磁盤數:2, 2N

RAID-4:
多塊數據盤異或運算值存於專用校驗盤

RAID-5:
讀、寫性能提升
可用空間:6力:允許最多1塊磁盤損壞
最少磁盤數:3, 3+

RAID-6:
讀、寫性能提升
可用空間:(N-2)*min(S1,S2,...)
有容錯能力:允許最多2塊磁盤損壞
最少磁盤數:4, 4+

RAID-10:
讀、寫性能提升
可用空間:N*min(S1,S2,...)/2
有容錯能力:每組鏡像最多只能壞一塊
最少磁盤數:4, 4+

組合RAID
RAID-01
多塊磁盤先實現RAID0,再組合成RAID1

RAID-50
多塊磁盤先實現RAID5,再組合成RAID0

JBOD:Just a Bunch Of Disks
功能:將多塊磁盤的空間合並一個大的連續空間使用
可用空間:sum(S1,S2,...)

RAID7
可以理解為一個獨立存儲計算機,自身帶有操作系統和管理工具,可以獨立運行,理論上性能最高的RAID模式
常用級別:
RAID-0, RAID-1, RAID-5, RAID-10, RAID-50, JBOD

軟RAID
mdadm:為軟RAID提供管理界面
為空余磁盤添加冗余
結合內核中的md(multi devices)
RAID設備可命名為/dev/md0、/dev/md1、/dev/md2、/dev/md3等

軟件RAID的實現
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: 指明塊大小,單位k
-x #: 指明空閑盤的個數 簡稱備用
-D:顯示raid的詳細信息
mdadm-D /dev/md#
管理模式:
-f: 標記指定磁盤為損壞
-a: 添加磁盤
-r: 移除磁盤
觀察md的狀態:
cat /proc/mdstat

軟RAID配置示例
使用mdadm創建並定義RAID設備
mdadm-C /dev/md0 -a yes -l 5 -n 3 -x 1 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
用文件系統對每個RAID設備進行格式化
mke2fs -j /dev/md0
測試RAID設備
使用mdadm檢查RAID設備的狀況
mdadm--detail|D/dev/md0
增加新的成員
mdadm–G /dev/md0 –n4 -a /dev/sdf1

軟RAID測試和修復
模擬磁盤故障
mdadm /dev/md0 -f /dev/sda1
移除磁盤
mdadm /dev/md0 –r /dev/sda1
從軟件RAID磁盤修復磁盤故障
替換出故障的磁盤然後開機
在備用驅動器上重建分區
mdadm /dev/md0 -a /dev/sda1
mdadm、/proc/mdstat及系統日誌信息

軟RAID管理
生成配置文件:mdadm –D –s >> /etc/mdadm.conf
停止設備:mdadm –S /dev/md0
激活設備:mdadm –A –s /dev/md0 激活
強制啟動:mdadm –R /dev/md0
刪除raid信息:mdadm --zero-superblock /dev/sdb1


問題:如何創建一個軟RAID5 添加一個硬盤備用????????
機器可使用的硬盤:
sdb 8:16 0 50G 0 disk
sde 8:64 0 30G 0 disk
sdc 8:32 0 40G 0 disk
sdd 8:48 0 30G 0 disk
將磁盤分區好:
sdb 8:16 0 50G 0 disk
└─sdb1 8:17 0 30G 0 part
sde 8:64 0 30G 0 disk
└─sde1 8:65 0 30G 0 part
sdc 8:32 0 40G 0 disk
└─sdc1 8:33 0 30G 0 part
sdd 8:48 0 30G 0 disk
└─sdd1 8:49 0 30G 0 part
partx -a /dev/sdb sde sdc sdd 同步

創建RAID:
mdadm -C /dev/md0 -a yes -l5 -n3 -x1 /dev/sd{b,c,d,e}1
用於查看創建的RAID設備:
mdadm -D /dev/md0
創建文件格式類型:
mkfs.ext4 /dev/md0 -L raid5 -L:添加卷標
創建與掛載出:
vim /etc/fstab
UUID=6f246919-9fc5-4854-9982-8e7f11c16318 /mnt/raid ext4 defaults 0 0

mkdir /mnt/raid

mount -a 啟用
註意:在使用RAID的時候建議最好生成一個RAID的配置文件以防下次停止使用時無法讀取RAID設備
如果要停止RAID設備時要先取消掛載才可操作

測試一下RAID5的性能:本人使用的都是固態硬盤所以........
寫入的速度測試:
[root@localhostcentos6 ~]# dd if=/dev/zero of=/data/f1 bs=1M count=1024 本機的普通硬盤寫入的性能
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 4.46875 s, 240 MB/s
[root@localhostcentos6 ~]# dd if=/dev/zero of=/mnt/raid/f1 bs=1M count=1024 RAID5寫入的性能
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 2.47991 s, 433 MB/s
讀的速度測試:
[root@localhostcentos6 ~]# dd if=/data/f1 of=/dev/null 本機的普通硬盤的讀取性能
2097152+0 records in
2097152+0 records out
1073741824 bytes (1.1 GB) copied, 4.17335 s, 257 MB/s
[root@localhostcentos6 ~]# dd if=/mnt/raid/f1 of=/dev/null RAID5讀取的性能
2097152+0 records in
2097152+0 records out
1073741824 bytes (1.1 GB) copied, 2.14119 s, 501 MB/s
那麽如何停用和啟用RAID呢????
umount /mnt/raid/
mdadm -S /dev/md0 停用RAID
mdadm -A /dev/md0 啟用RAID
mount -a

查看RAID狀態:
mdadm -D /dev/md0

模擬一塊硬盤損壞另外一個自動頂替
mdadm /dev/md0 -f /dev/sdc1 模擬/dev/sdc1的磁盤損壞

mdadm -D /dev/md0 查看狀態
Rebuild Status : 18% complete 備用硬盤自動啟動填上去
即便是壞了一硬盤數據還是可訪問的有容錯性

如何將損壞/dev/sdc1的硬盤移走呢????
mdadm /dev/md0 -r /dev/sdc1

還是可以添加回來的 不過成為備用的
mdadm /dev/md0 -a /dev/sdc1

新加的硬盤一般都沒有文件系統硬盤空間無法使用該如何解決呢???
centos6:resize2fs /dev/md0 同步文件系統,只支持ext文件格式
centos7:xfs_growfs /mnt/raid 同步文件系統,支持xfs文件格式 註意路徑要寫掛載的路徑



LVM:邏輯卷管理
允許對卷進行方便操作的抽象層,包括重新設定文件系統的大小
允許在多個物理設備間重新組織文件系統
將設備指定為物理卷
用一個或者多個物理卷來創建一個卷組
物理卷是用固定大小的物理區域(Physical Extent,PE)來定義的
在物理卷上創建的邏輯卷
是由物理區域(PE)組成
可以在邏輯卷上創建文件系統

LVM介紹
LVM: Logical Volume Manager,Version: 2
dm: device mapper:將一個或多個底層塊設備組織成一個邏輯設備的模塊
設備名:/dev/dm-#
軟鏈接:
/dev/mapper/VG_NAME-LV_NAME
/dev/mapper/vol0-root
/dev/VG_NAME/LV_NAME
/dev/vol0/root


LVM更改文件系統的容量
LVM可以彈性的更改LVM的容量
通過交換PE來進行資料的轉換,將原來LV內的PE轉移到其他的設備中以降低LV的容量,或將其他設備中的PE加到LV中以加大容量

pv管理工具
顯示pv信息
pvs:簡要pv信息顯示
pvdisplay
創建pv
pvcreate /dev/DEVICE

vg管理工具
顯示卷組
vgs:顯示卷組的空間
vgdisplay:顯示詳細的卷組信息
創建卷組
vgcreate [-s #[kKmMgGtTpPeE]] VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
管理卷組
vgextend VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
vgreduce VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
刪除卷組
先做pvmove,再做vgremove

lv管理工具
顯示邏輯卷
lvs
Lvdisplay
創建邏輯卷
lvcreate -L #[mMgGtT] -n NAME VolumeGroup
lvcreate -l 60%VG -n mylvtestvg
lvcreate -l 100%FREE -n yourlvtestvg
刪除邏輯卷
lvremove/dev/VG_NAME/LV_NAME
重設文件系統大小
fsadm[options] resize device [new_size[BKMGTEP]]
resize2fs [-f] [-F] [-M] [-P] [-p] device [new_size


擴展和縮減邏輯卷
擴展邏輯卷:
lvextend-L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME
resize2fs /dev/VG_NAME/LV_NAME
lvresize-r -l +100%FREE /dev/VG_NAME/LV_NAME
縮減邏輯卷:
umount/dev/VG_NAME/LV_NAME
e2fsck -f /dev/VG_NAME/LV_NAME
resize2fs /dev/VG_NAME/LV_NAME #[mMgGt]
lvreduce-L [-]#[mMgGtT] /dev/VG_NAME/LV_NAME
mount

跨主機遷移卷組
源計算機上
1 在舊系統中,umount所有卷組上的邏輯卷
2 vgchange–a n vg0
lvdisplay
3 vgexportvg0
pvscan
vgdisplay
拆下舊硬盤
在目標計算機上
4 在新系統中安裝舊硬盤,並vgimportvg0.
5 vgchange–ay vg0
6 mount所有卷組上的邏輯卷

創建邏輯卷示例
創建物理卷
pvcreate /dev/sda3
為卷組分配物理卷
vgcreate vg0 /dev/sda3
從卷組創建邏輯卷
lvcreate -L 256M -n data vg0
mke2fs -j /dev/vg0/data
mount /dev/vg0/data /mnt/data

邏輯卷管理器快照
快照是特殊的邏輯卷,它是在生成快照時存在的邏輯卷的準確拷貝
對於需要備份或者復制的現有數據臨時拷貝以及其它操作來說,快照是最合適的選擇
快照只有在它們和原來的邏輯卷不同時才會消耗空間
在生成快照時會分配給它一定的空間,但只有在原來的邏輯卷或者快照有所改變才會使用這些空間
當原來的邏輯卷中有所改變時,會將舊的數據復制到快照中。
快照中只含有原來的邏輯卷中更改的數據或者自生成快照後的快照中更改的數據
建立快照的卷大小只需要原始邏輯卷的15%~20%就夠了,也可以使用lvextend放大快照
快照就是將當時的系統信息記錄下來,就好像照相一般,若將來有任何數據改動了,則原始數據會被移動到快照區,沒有改動的區域則由快照區和文件系統共享
由於快照區與原本的LV共用很多PE的區塊,因此快照與被快照的LV必須在同一個VG中.系統恢復的時候的文件數量不能高於快照區的實際容量


使用LVM快照
為現有邏輯卷創建快照
lvcreate-l 64 -s -n data-snapshot -p r /dev/vg0/data
掛載快照
mkdir-p /mnt/snap
mount -o ro/dev/vg0/data-snapshot /mnt/snap
恢復快照
umount/dev/vg0/data-snapshot
umount/dev/vg0/data
lvconvert--merge /dev/vg0/data-snapshot
刪除快照
umount/mnt/databackup
lvremove/dev/vg0/databackup


小實例:
在硬盤上做兩個LVM的分區/dev/sdb1、/dev/sdc1大小各2G
將普通的硬盤分區變成物理卷呢:
pvcreate:用於創建物理卷
pvdisplay:查看物理卷看比較詳細
pvs 用於查看物理卷

pvcreate /dev/sdb1 創建物理卷
pvcreate /dev/sdc1 創建物理卷

創建卷組:
vgs:查看現有的卷組
vgdisplay:查看更詳細的卷組

vgcreate -s 18M vg1 /dev/sdb1
vgcreate -s 18M vg2 /dev/sdc1

創建邏輯卷:
lvcreate -n lv1 -l 100 vg1
lvdisplay:查看創建的邏輯卷

將剩余的邏輯卷全部用完:
lvcreate -n lv2 -l 100%FREE vg1
100%FREE:將分區裏的剩余空間全部用完

創建文件格式:
mkfs.ext4 /dev/vg1/lv1
mkfs.ext4 /dev/vg1/lv2

掛載設備:
UUID=d60bf3e2-dede-4507-9e58-c16a46c45a63 /mnt/lv1 ext4 defaults 0 0
UUID=3894bb11-c5e7-4be5-b4c3-ef4ce4461b27 /mnt/lv2 ext4 defaults 0 0

mkdir /mnt/lv1
mkdir /mnt/lv2
mount -a 啟用掛載

測試性能:
[root@localhostcentos6 ~]# dd if=/dev/zero of=/mnt/lv1/f1 bs=1M count=10241024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 9.09417 s, 118 MB/s

如遇到邏輯卷空間不足如何增加空間:
首先加一塊新的硬盤:
在添加硬盤之後須執行:我加了一個20G的新硬盤名稱:/dev/sdd
echo '- - -' > /sys/class/scsi_host/host2/scan 掃描識別新添加的硬盤

直接用整塊硬盤做,可直接做成物理卷:
pvcreate /dev/sdd

添加進之前的vg1卷組:
[root@localhostcentos6 ~]# vgextend vg1 /dev/sdd
Volume group "vg1" successfully extended
[root@localhostcentos6 ~]# pvs 或vgdisplay 用於查詢
PV VG Fmt Attr PSize PFree
/dev/sdb1 vg1 lvm2 a--u 2.00g 0
/dev/sdc1 vg1 lvm2 a--u 2.00g 0
/dev/sdd vg1 lvm2 a--u 19.99g 19.99g

將剛添加的新硬盤添加進/mnt/lv1:
lvextend -L +10G /dev/vg1/lv1

註意:添加完之後df中的添加的10G空間釋放必須要同步一下即可:
resize2fs /dev/vg1/lv1

其實也可以直接帶參數選項:
lvextend -r -l +100%FREE /dev/vg1/lv1
-r:同步
-l +100%FREE:硬盤下的剩余空間

當遇到邏輯卷空間比較大時可以縮減的centos7是不行的用於centos6:
縮減5G:
e2fsck -f /dev/vg1/lv1 先檢查完整性才可執行縮減
resize2fs /dev/vg1/lv1 5G

縮減邏輯卷:註意可能會損壞數據
lvreduce -L 5G /dev/vg1/lv1
mount -a 將/mnt/lv1掛載回去




RAID和邏輯卷管理器(LVM)