RAID獨(dú)立冗余磁盤陣列
RAID技術(shù)通過把多個(gè)硬盤組合成一個(gè)容量更大抵乓、安全性更好的磁盤陣列伴挚。并把數(shù)據(jù)切割成多個(gè)區(qū)段后分別存放在各個(gè)不同的物理硬盤設(shè)備上,然后利用分散讀寫技術(shù)來提升磁盤陣列整體的性灾炭,同時(shí)把多個(gè)重要數(shù)據(jù)的副本同步到不同的物理硬盤設(shè)備上茎芋,從而起到了非常好的數(shù)據(jù)冗余備份效果
出于成本和技術(shù)方面的考慮,需要針對(duì)不同的需求在數(shù)據(jù)可靠性及讀寫性能上做出權(quán)衡蜈出,制定出滿足各自需求的不同方案田弥。最常見的方案如下
RAID0
RAID0技術(shù)把多塊物理硬盤設(shè)備通過硬件或軟件的方式串聯(lián)在一起商叹,組成一個(gè)大的卷組,并將數(shù)據(jù)依次寫入各個(gè)物理硬盤中只泼。
硬盤設(shè)備的讀寫性能會(huì)提升數(shù)倍
若任意一塊硬盤發(fā)生故障剖笙,將導(dǎo)致整個(gè)系統(tǒng)的數(shù)據(jù)都受到破壞。
RAID0技術(shù)能夠有效地提升硬盤數(shù)據(jù)的吞吐速度辜妓,但不具備數(shù)據(jù)備份和錯(cuò)誤修復(fù)能力
-
數(shù)據(jù)被分別寫入到不同的硬盤設(shè)備中枯途,硬盤A和硬盤B設(shè)備會(huì)分別保存數(shù)據(jù)資料
RAID1
RAID1是將兩塊以上的硬盤進(jìn)行綁定,在寫入數(shù)據(jù)時(shí)籍滴,將數(shù)據(jù)同時(shí)寫入到多塊硬盤設(shè)備上(可以將其視為數(shù)據(jù)的鏡像或備份)酪夷,當(dāng)其中某一塊硬盤發(fā)生故障后,一般會(huì)立即自動(dòng)以熱交換的方式來恢復(fù)數(shù)據(jù)的正常使用
RAID1優(yōu)缺點(diǎn)
- 寫入數(shù)據(jù)時(shí)RAID1的速度會(huì)比RAID0低一些
- 讀取數(shù)據(jù)時(shí)孽惰,理論讀取速度的峰值可以是硬盤數(shù)量的倍數(shù)
- 只要有一塊硬盤穩(wěn)定運(yùn)行晚岭,數(shù)據(jù)就不會(huì)損壞⊙Γ可靠性較高
RAID5
RAID5技術(shù)是把硬盤設(shè)備的數(shù)據(jù)奇偶校驗(yàn)信息保存到其他硬盤設(shè)備中坦报。RAID磁盤陣列中數(shù)據(jù)的奇偶校驗(yàn)信息并不是單獨(dú)保存到某一塊硬盤設(shè)備中,而是存儲(chǔ)到除自身以外的其他每一塊硬盤設(shè)備上狂鞋。
-
RAID5技術(shù)實(shí)際上沒有備份硬盤中的真實(shí)數(shù)據(jù)信息片择,而是當(dāng)硬盤設(shè)備出現(xiàn)問題后通過奇偶校驗(yàn)信息來嘗試重建損壞的數(shù)據(jù)。
RAID5最少由3塊硬盤組成骚揍,使用硬盤切割技術(shù)字管。當(dāng)重復(fù)寫入某個(gè)文件時(shí),RAID5級(jí)別的磁盤陣列組只需要對(duì)應(yīng)一個(gè)奇偶校驗(yàn)信息信不。效率更高嘲叔、存儲(chǔ)成本低
RAID 10
RAID10技術(shù)是RAID1+RAID0的一個(gè)“組合體”
RAID10至少需要4塊硬盤來搭建
-
兩兩制作RAID1磁盤陣列,以保證數(shù)據(jù)的安全抽活,然后再對(duì)兩個(gè)RAID1磁盤陣列實(shí)時(shí)RAID0硫戈,提高硬盤設(shè)備的讀寫速度
從上圖中得知,RAID10是先對(duì)信息進(jìn)行分割下硕,然后再兩兩一組制作鏡像丁逝。也就是先將RAID 1作為最低級(jí)別的組合,然后再使用RAID 0將RAID 1磁盤陣列組合到一起梭姓,將它們視為一整塊硬盤
在RAID10中只要壞的不是同一陣列中的所有硬盤果港,那么最多可以損壞50%的硬盤設(shè)備而不丟失數(shù)據(jù)
部署磁盤陣列
在Linux中,我們可以使用mdadm命令糊昙,用于創(chuàng)建辛掠、調(diào)整、監(jiān)控和管理RAID設(shè)備
mdadm 參數(shù) 硬盤名稱
- -a 檢測設(shè)備名稱
- -n 指定設(shè)備數(shù)量
- -l 指定RAID級(jí)別
- -C 創(chuàng)建
- -v 顯示過程
- -f 模擬設(shè)備損壞
- -r 移除設(shè)備
- -Q 查看摘要信息
- -D 查看詳細(xì)信息
- -S 停止RAID磁盤陣列
mdadm -Cv /dev/md0 -n 4 -l 10 /dev/sdc /dev/sdd /dev/sde /dev/sdf
表示創(chuàng)建 名稱為 /dev/md0的磁盤陣列
-v 參數(shù)顯示創(chuàng)建的過程
-n 4 表示使用4塊硬盤來部署這個(gè)RAID磁盤陣列
-l 10 代表選擇RAID10方案
然后再加上4塊硬盤的名稱
使用-Q查看簡要信息
[root@linuxprobe ~]# mdadm -Q /dev/md0
/dev/md0: 39.97GiB raid10 4 devices, 0 spares. Use mdadm --detail for more detail.
將RAID磁盤陣列格式化為Ext4格式
[root@linuxprobe ~]# mkfs.ext4 /dev/md0
mke2fs 1.44.3 (10-July-2018)
Creating filesystem with 10477056 4k blocks and 2621440 inodes
Filesystem UUID: 0fc0f7e4-b49b-4280-b4e0-64efee997b70
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624
Allocating group tables: done
Writing inode tables: done
Creating journal (65536 blocks): done
Writing superblocks and filesystem accounting information: done
創(chuàng)建掛載點(diǎn),將硬盤設(shè)備進(jìn)行掛載操作
[root@linuxprobe ~]# mkdir /RAID
[root@linuxprobe ~]# mount /dev/md0 /RAID
查看/dev/md0磁盤陣列設(shè)備的詳細(xì)信息萝衩,確認(rèn)RAID級(jí)別回挽、陣列大小和硬盤總數(shù)
[root@linuxprobe ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Wed Nov 29 15:17:42 2023
Raid Level : raid10
Array Size : 41908224 (39.97 GiB 42.91 GB)
Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Wed Nov 29 15:21:42 2023
State : clean
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
Layout : near=2
Chunk Size : 512K
Consistency Policy : resync
Name : linuxprobe:0 (local to host linuxprobe)
UUID : 78b10560:670df6f8:0d021f2c:42d96621
Events : 19
Number Major Minor RaidDevice State
0 8 32 0 active sync set-A /dev/sdc
1 8 48 1 active sync set-B /dev/sdd
2 8 64 2 active sync set-A /dev/sde
3 8 80 3 active sync set-B /dev/sdf
將創(chuàng)建好的磁盤陣列RAID添加到/etc/fstab文件中,這樣可以確保在每次重啟后RAID磁盤陣列都會(huì)生效
[root@linuxprobe ~]# echo "/dev/md0 /RAID ext4 defaults 0 0">> /etc/fstab
[root@linuxprobe ~]# cat /etc/fstab
損壞磁盤陣列及修復(fù)
模擬一下故障猩谊。使得一塊硬盤故障
[root@linuxprobe ~]# mdadm /dev/md0 -f /dev/sdc
mdadm: set /dev/sdc faulty in /dev/md0
[root@linuxprobe ~]# mdadm -D /dev/md0
[root@linuxprobe ~]# mdadm /dev/md0 -r /dev/sdc
mdadm: hot removed /dev/sdc from /dev/md0
購買了新的硬盤設(shè)備后再使用mdadm命令予以替換即可千劈。更換故障的硬盤后再次使用-a參數(shù)進(jìn)行添加操作,系統(tǒng)默認(rèn)會(huì)自動(dòng)開始數(shù)據(jù)的同步工作牌捷,使用-D參數(shù)即可看到整個(gè)過程和進(jìn)度
[root@linuxprobe ~]# mdadm /dev/md0 -a /dev/sdc
mdadm: added /dev/sdc
[root@linuxprobe ~]# mdadm -D /dev/md0
磁盤陣列+備份盤
RAID10磁盤陣列中最多允許50%的硬盤設(shè)備發(fā)生故障墙牌。如果同一RAID1磁盤陣列中的硬盤設(shè)備若全部損壞,就會(huì)導(dǎo)致數(shù)據(jù)丟失暗甥。在這樣的情況喜滨,我們可以使用RAID備份盤技術(shù)來預(yù)防這類事故,該技術(shù)的和新就是 需要準(zhǔn)備一塊足夠大的盤
撤防,這塊硬盤平時(shí)處于閑置狀態(tài)虽风,一旦RAID磁盤陣列中有硬盤出現(xiàn)故障就會(huì)自動(dòng)替換上去
刪除磁盤陣列
mdadm -S /dev/md0
LVM 邏輯卷管理器
LVM允許用戶對(duì)硬盤資源進(jìn)行動(dòng)態(tài)調(diào)整
LVM是Linux系統(tǒng)用于對(duì)硬盤分區(qū)進(jìn)行管理的一種機(jī)制。為了解決硬盤設(shè)備在創(chuàng)建分區(qū)后不易修改區(qū)分大小的缺陷寄月。LVM技術(shù)是在硬盤分區(qū)和文件系統(tǒng)之間添加了一個(gè)邏輯層提供了一個(gè)抽象的卷組辜膝。可以把多塊硬盤進(jìn)行卷組合并漾肮。這樣厂抖,用戶不必關(guān)心物理設(shè)備的底層架構(gòu)和布局,可以實(shí)現(xiàn)對(duì)硬盤分區(qū)的動(dòng)態(tài)調(diào)整克懊。
各組件間的關(guān)系
- 物理卷處于LVM中的最底層验游,可以將其理解為物理硬盤、硬盤分區(qū)保檐、或者RAID磁盤陣列
- 卷組建立在物理卷之上,一個(gè)卷組能夠包含多個(gè)物理卷崔梗,而且在卷組創(chuàng)建之后也可以繼續(xù)向其中添加新的物理卷夜只。
- 邏輯卷是用卷組中空閑的資源建立的,并且邏輯卷在建立之后可以動(dòng)態(tài)地?cái)U(kuò)展或縮小空間
部署邏輯卷
常用的LVM部署命令
新添加兩塊硬盤
讓新添加的兩塊硬盤設(shè)備支持LVM技術(shù)
[root@linuxprobe ~]# pvcreate /dev/sdb /dev/sdc
Physical volume "/dev/sdb" successfully created.
Physical volume "/dev/sdc" successfully created.
把兩塊硬盤設(shè)備加入到storage卷組中
[root@linuxprobe ~]# vgcreate storage /dev/sdb /dev/sdc
Volume group "storage" successfully created
[root@linuxprobe ~]# vgdisplay
切割出一個(gè)約為150MB的邏輯卷設(shè)備
[root@linuxprobe ~]# lvcreate -n vo -l 37 storage
把生成好的邏輯卷進(jìn)行格式化然后掛載使用
[root@linuxprobe ~]# mkfs.ext4 /dev/storage/vo
mke2fs 1.44.3 (10-July-2018)
Creating filesystem with 151552 1k blocks and 38000 inodes
Filesystem UUID: 3eb7ebe0-f2d4-40f8-bfa9-af084f7fc952
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729
Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
查看掛載狀態(tài)蒜魄,并寫入配置文件扔亥,使其永久生效
echo "/dev/storage/vo /linuxprobe ext4 defaults 0 0">> /etc/
擴(kuò)容邏輯卷
下面對(duì)剛才的分的LVM卷進(jìn)行擴(kuò)容
擴(kuò)容前先卸載設(shè)備和掛載點(diǎn)的關(guān)聯(lián)
[root@linuxprobe ~]# umount /linuxprobe
- 把上一個(gè)實(shí)驗(yàn)中的邏輯卷vo擴(kuò)展至290MB
[root@linuxprobe ~]# lvextend -L 290M /dev/storage/vo
Rounding size to boundary between physical extents: 292.00 MiB.
Size of logical volume storage/vo changed from 148.00 MiB (37 extents) to 292.00 MiB (73 extents).
Logical volume storage/vo successfully resized
- 檢查硬盤的完整性,確認(rèn)目錄結(jié)構(gòu)谈为、內(nèi)容和文件內(nèi)容沒有丟失
[root@linuxprobe ~]# e2fsck -f /dev/storage/vo
e2fsck 1.44.3 (10-July-2018)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/storage/vo: 11/38000 files (0.0% non-contiguous), 10453/151552 blocks
- 重置設(shè)備在系統(tǒng)中農(nóng)的容量旅挤,剛才是對(duì)LV設(shè)備進(jìn)行擴(kuò)容操作,但系統(tǒng)內(nèi)核還沒有同步到這部分新修改的信息伞鲫。需要手動(dòng)進(jìn)行同步
[root@linuxprobe ~]# resize2fs /dev/storage/vo
resize2fs 1.44.3 (10-July-2018)
Resizing the filesystem on /dev/storage/vo to 299008 (1k) blocks.
The filesystem on /dev/storage/vo is now 299008 (1k) blocks long.
- 重新掛載硬盤設(shè)備并查看掛載狀態(tài)
[root@linuxprobe ~]# mount -a
[root@linuxprobe ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 959M 0 959M 0% /dev
tmpfs 976M 0 976M 0% /dev/shm
tmpfs 976M 9.7M 966M 1% /run
tmpfs 976M 0 976M 0% /sys/fs/cgroup
/dev/mapper/rhel-root 17G 4.8G 13G 28% /
/dev/nvme0n1p1 1014M 193M 822M 19% /boot
/dev/sda1 2.0G 76M 2.0G 4% /newFS
/dev/sr0 6.7G 6.7G 0 100% /media/cdrom
tmpfs 196M 16K 196M 1% /run/user/42
tmpfs 196M 2.3M 193M 2% /run/user/0
/dev/mapper/storage-vo 279M 2.1M 259M 1% /linuxprobe (擴(kuò)容完成)
縮小邏輯卷
相較于擴(kuò)容邏輯卷粘茄,在對(duì)邏輯卷進(jìn)行縮容操作時(shí),數(shù)據(jù)丟失的風(fēng)險(xiǎn)更大。所以在生產(chǎn)環(huán)境執(zhí)行相應(yīng)操作時(shí)柒瓣,一定要提前備份數(shù)據(jù)儒搭。Linux系統(tǒng)規(guī)定,在對(duì)LVM邏輯卷進(jìn)行縮容操作之前芙贫,要先檢查文件系統(tǒng)的完整性
- 卸載文件系統(tǒng)
[root@linuxprobe ~]# umount /linuxprobe
- 檢查文件系統(tǒng)的完整性
[root@linuxprobe ~]# e2fsck -f /dev/storage/vo
e2fsck 1.44.3 (10-July-2018)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/storage/vo: 11/74000 files (0.0% non-contiguous), 15507/299008 blocks
- 通知系統(tǒng)內(nèi)核將邏輯卷vo的容量減小120M
[root@linuxprobe ~]# resize2fs /dev/storage/vo 120M
resize2fs 1.44.3 (10-July-2018)
Resizing the filesystem on /dev/storage/vo to 122880 (1k) blocks.
The filesystem on /dev/storage/vo is now 122880 (1k) blocks long.
- 將LV(邏輯卷)的容量修改為120MB
[root@linuxprobe ~]# lvreduce -L 120M /dev/storage/vo
WARNING: Reducing active logical volume to 120.00 MiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce storage/vo? [y/n]: y
Size of logical volume storage/vo changed from 292.00 MiB (73 extents) to 120.00 MiB (30 extents).
Logical volume storage/vo successfully resized.
- 重新掛載文件系統(tǒng)并查看系統(tǒng)狀態(tài)
[root@linuxprobe ~]# mount -a
[root@linuxprobe ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 959M 0 959M 0% /dev
tmpfs 976M 0 976M 0% /dev/shm
tmpfs 976M 9.7M 966M 1% /run
tmpfs 976M 0 976M 0% /sys/fs/cgroup
/dev/mapper/rhel-root 17G 4.8G 13G 28% /
/dev/nvme0n1p1 1014M 193M 822M 19% /boot
/dev/sda1 2.0G 76M 2.0G 4% /newFS
/dev/sr0 6.7G 6.7G 0 100% /media/cdrom
tmpfs 196M 16K 196M 1% /run/user/42
tmpfs 196M 2.3M 193M 2% /run/user/0
/dev/mapper/storage-vo 113M 1.6M 103M 2% /linuxprobe (縮容為113M)
邏輯卷快照
LVM還具備快照卷功能丈莺,類似于虛擬機(jī)的還原時(shí)間點(diǎn)功能
- 快照卷的容量必須等同于邏輯卷的容量
- 快照卷僅一次有效谜诫,一旦執(zhí)行還原操作后則會(huì)被立即自動(dòng)刪除
填坑 日后補(bǔ)
刪除邏輯卷
當(dāng)生產(chǎn)環(huán)境中想要重新部署LVM或者不再需要使用LVM時(shí),則需要執(zhí)行LVM刪除操作。刪除操作必須按照刪除邏輯卷挖炬、卷組、物理卷設(shè)備這個(gè)順序
- 取消邏輯卷與目錄的掛載關(guān)聯(lián)逼庞,刪除配置文件中永久生效的設(shè)備參數(shù)
[root@linuxprobe ~]# umount /linuxprobe
[root@linuxprobe ~]# vim /etc/fstab
- 刪除邏輯卷設(shè)備
[root@linuxprobe ~]# vim /etc/fstab
[root@linuxprobe ~]# lvremove /dev/storage/vo
Do you really want to remove active logical volume storage/vo? [y/n]: y
Logical volume "vo" successfully removed
- 刪除卷組
[root@linuxprobe ~]# vgremove storage
Volume group "storage" successfully removed
- 刪除物理卷
[root@linuxprobe ~]# pvremove /dev/sdb /dev/sdc
Labels on physical volume "/dev/sdb" successfully wiped.
Labels on physical volume "/dev/sdc" successfully wiped.