RAID磁盘冗余阵列
RAID(Redundant Array of Independent Disks,独立冗余磁盘阵列)。
目前已有的RAID磁盘阵列的方案至少有十几种,RAID 0、RAID 1、RAID 5与RAID 10这4种是最常见的方案。
RAID 0、1、5、10方案技术对比
RAID 0技术把多块物理硬盘设备(至少两块)通过硬件或软件的方式串联在一起,组成一个大的卷组,并将数据依次写入各个物理硬盘中。
RAID 0技术能够有效地提升硬盘数据的吞吐速度,但是不具备数据备份和错误修复能力。数据被分别写入到不同的硬盘设备中,即硬盘A和硬盘B设备会分别保存数据资料,最终实现提升读取、写入速度的效果。
RAID 1技术是把两块以上的硬盘设备进行绑定,在写入数据时,是将数据同时写入到多块硬盘设备上(可以将其视为数据的镜像或备份)。当其中某一块硬盘发生故障后,一般会立即自动以热交换的方式来恢复数据的正常使用。
RAID 1技术虽然十分注重数据的安全性,但是因为是在多块硬盘设备中写入了相同的数据,因此硬盘设备的利用率得以下降。从理论上来说,2个硬盘空间的真实可用率只有50%,由3块硬盘设备组成的RAID 1磁盘阵列的可用率只有33%左右;
RAID5技术是把硬盘设备的数据奇偶校验信息保存到其他硬盘设备中。RAID 5磁盘阵列中数据的奇偶校验信息并不是单独保存到某一块硬盘设备中,而是存储到除自身以外的其他每一块硬盘设备上。
RAID 5技术实际上没有备份硬盘中的真实数据信息,而是当硬盘设备出现问题后通过奇偶校验信息来尝试重建损坏的数据。
RAID 5最少由3块硬盘组成,使用的是硬盘切割(Disk Striping)技术。相较于RAID 1级别,好处就在于保存的是奇偶校验信息而不是一模一样的文件内容,所以当重复写入某个文件时,RAID 5级别的磁盘阵列组只需要对应一个奇偶校验信息就可以,效率更高,存储成本也会随之降低。
RAID 10技术是RAID 1+RAID 0技术的一个“组合体”。
RAID 10技术需要至少4块硬盘,其中先分别两两制作成RAID 1磁盘阵列,以保证数据的安全性;然后再对两个RAID 1磁盘阵列实施RAID 0技术,进一步提高硬盘设备的读写速度。这样从理论上来讲,只要坏的不是同一阵列中的所有硬盘,那么最多可以损坏50%的硬盘设备而不丢失数据。
部署磁盘阵列
mdadm命令
mdadm命令用于创建、调整、监控和管理RAID设备,语法格式为“mdadm参数 硬盘名称”。
mdadm命令的常用参数和作用
如:使用4块盘,其中3快盘做raid5,1快盘做热备
[root@linuxprobe ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part
├─rhel-root 253:0 0 17G 0 lvm /
└─rhel-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 5G 0 disk
sdc 8:32 0 5G 0 disk
sdd 8:48 0 5G 0 disk
sde 8:64 0 5G 0 disk
sr0 11:0 1 6.6G 0 rom /run/media/root/RHEL-8-0-0-BaseOS-x86_64
[root@linuxprobe ~]# mdadm -Cv /dev/md5 -n 3 -l 5 -x 1 /dev/sd[b-e]
mdadm: layout defaults to left-symmetric
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 512K
mdadm: size set to 5237760K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md5 started.
[root@linuxprobe ~]# mdadm -D /dev/md5
/dev/md5:
Version : 1.2
Creation Time : Mon Apr 25 09:11:33 2022
Raid Level : raid5
Array Size : 10475520 (9.99 GiB 10.73 GB)
Used Dev Size : 5237760 (5.00 GiB 5.36 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Mon Apr 25 09:12:00 2022
State : clean
Active Devices : 3
Working Devices : 4
Failed Devices : 0
Spare Devices : 1
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : resync
Name : linuxprobe.com:5 (local to host linuxprobe.com)
UUID : 14f51bf9:1a50d18f:e9efca24:cad82535
Events : 18
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
4 8 48 2 active sync /dev/sdd
3 8 64 - spare /dev/sde
[root@linuxprobe ~]#
root@linuxprobe ~]#
# 格式化
[root@linuxprobe ~]# mkfs.ext4 /dev/md5
mke2fs 1.44.3 (10-July-2018)
Creating filesystem with 2618880 4k blocks and 655360 inodes
Filesystem UUID: a7118f16-c858-463f-8cef-4205d97723a8
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
# 创建挂载目录并写入/etc/fstab配置文件 及 挂载
[root@linuxprobe ~]# mkdir /MD5
[root@linuxprobe ~]# echo "/dev/md5 /MD5 ext4 defaults 0 0" >> /etc/fstab
[root@linuxprobe ~]# mount -a
[root@linuxprobe ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 969M 0 969M 0% /dev
tmpfs 984M 0 984M 0% /dev/shm
tmpfs 984M 9.6M 974M 1% /run
tmpfs 984M 0 984M 0% /sys/fs/cgroup
/dev/mapper/rhel-root 17G 4.5G 13G 27% /
/dev/sda1 1014M 153M 862M 15% /boot
tmpfs 197M 16K 197M 1% /run/user/42
tmpfs 197M 3.5M 194M 2% /run/user/0
/dev/sr0 6.7G 6.7G 0 100% /run/media/root/RHEL-8-0-0-BaseOS-x86_64
/dev/md5 9.8G 37M 9.3G 1% /MD5
[root@linuxprobe ~]#
损坏磁盘阵列及修复
根据上面的进行测试移除一个sdb 看下热备盘的变化,在查看文件是否存在
# 创建一个测试文本
[root@linuxprobe ~]# cd /MD5
[root@linuxprobe MD5]# echo "test faild a disk" > tt.txt
[root@linuxprobe MD5]# ls
lost+found tt.txt
[root@linuxprobe MD5]# cat tt.txt
test faild a disk
# 移除一块硬盘
[root@linuxprobe MD5]# mdadm /dev/md5 -f /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md5
# 查看阵列信息
[root@linuxprobe MD5]# mdadm -D /dev/md5
/dev/md5:
Version : 1.2
Creation Time : Mon Apr 25 09:11:33 2022
Raid Level : raid5
Array Size : 10475520 (9.99 GiB 10.73 GB)
Used Dev Size : 5237760 (5.00 GiB 5.36 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Mon Apr 25 09:20:45 2022
State : clean, degraded, recovering
Active Devices : 2
Working Devices : 3
Failed Devices : 1
Spare Devices : 1
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : resync
Rebuild Status : 40% complete
Name : linuxprobe.com:5 (local to host linuxprobe.com)
UUID : 14f51bf9:1a50d18f:e9efca24:cad82535
Events : 26
Number Major Minor RaidDevice State
3 8 64 0 spare rebuilding /dev/sde
1 8 32 1 active sync /dev/sdc
4 8 48 2 active sync /dev/sdd
0 8 16 - faulty /dev/sdb
# 可以看到热备盘/dev/sde 自动进行重建(rebulding)
过会重建完成后检查文本
我们再添加一块硬盘,然后进行手动恢复,可以看到/dev/sdf自动成为了热备盘
删除磁盘阵列
首先,需要将所有的磁盘都设置成停用状态:
然后再逐一移除出去:
再来查看磁盘阵列组的状态:
最后,停用整个RAID磁盘阵列:
如果有必要则 --remove,不要忘记了 配置文件/etc/fstab里面需要删除
LVM逻辑卷管理器
逻辑卷管理器(Logical Volume Manager,LVM)
LVM是Linux系统用于对硬盘分区进行管理的一种机制,理论性较强,其创建初衷是为了解决硬盘设备在创建分区后不易修改分区大小的缺陷。
LVM技术是在硬盘分区和文件系统之间添加了一个逻辑层,它提供了一个抽象的卷组,可以把多块硬盘进行卷组合并。这样用户不必关心物理硬盘设备的底层架构和布局,就可以实现对硬盘分区的动态调整。
LVM的技术架构
物理卷[Physical Volume,PV] 组成(卷组[Volume Group],VG),然后再把 卷组 分割成一个个(逻辑卷[Logical Volume,LV]),而且每个逻辑卷的必须是(基本单元[Physical Extent,PE])的倍数。
逻辑卷管理器使用流程图
LVM的核心理念:
物理卷处于LVM中的最底层,可以将其理解为物理硬盘、硬盘分区或者RAID磁盘阵列。卷组建立在物理卷之上,一个卷组能够包含多个物理卷,而且在卷组创建之后也可以继续向其中添加新的物理卷。逻辑卷是用卷组中空闲的资源建立的,并且逻辑卷在建立后可以动态地扩展或缩小空间。
部署逻辑卷
常用的LVM部署命令
创建pv
加入卷组
切割逻辑卷
第一种是以容量为单位,所使用的参数为-L。例如,使用-L 150M生成一个大小为150MB的逻辑卷。另外一种是以基本单元的个数为单位,所使用的参数为-l。每个基本单元的大小默认为4MB。例如,使用-l 37可以生成一个大小为37×4MB=148MB的逻辑卷。
格式化,然后挂载
LVM中的逻辑卷设备存放在/dev设备目录中(实际上就是个快捷方式),同时会以卷组的名称来建立一个目录,其中保存了逻辑卷的设备映射文件(即/dev/卷组名称/逻辑卷名称)。
查看并写入配置文件/etc/fstab
扩容与缩小逻辑卷
扩容:注意没有 + 号 报错,扩容的时候并没有先卸载
第一个没有 + 号是直接指定到500M 自然小于之前的2G。如果直接到3G可以, -L 3G.
第二个有 + 号表示增加多少
缩小:先卸载,再进行。
注意:在对逻辑卷进行缩容操作时,数据丢失的风险更大。所以在生产环境中执行相应操作时,一定要提前备份好数据。
我的实验就出现缩小后无法挂载,必须格式化,后才挂载成功了。所以生产环境就不要缩小
# umount /dev/vg1/lv0
# df -h
# e2fsck -f /dev/vg1/lv0
# resize2fs /dev/vg1/lv0 1.5G
# lvreduce -L 1.5G /dev/vg1/lv0
挂载报错了
逻辑卷快照
LVM还具备有“快照卷”功能,该功能类似于虚拟机软件的还原时间点功能。
例如,对某一个逻辑卷设备做一次快照,如果日后发现数据被改错了,就可以利用之前做好的快照卷进行覆盖还原。LVM的快照卷功能有两个特点:
快照卷的容量必须等同于逻辑卷的容量;
快照卷仅一次有效,一旦执行还原操作后则会被立即自动删除。
查看卷组空间是否够用
向目录中写入一个文件
使用-s参数生成一个快照卷,使用-L参数指定切割的大小,需要与要做快照的设备容量保持一致。
在逻辑卷所挂载的目录中创建一个100MB的垃圾文件,然后再查看快照卷的状态。可以发现存储空间的占用量上升了
进行还原操作:先卸载掉逻辑卷设备与目录的挂载。
lvconvert命令用于管理逻辑卷的快照,语法格式为“lvconvert [参数]快照卷名称”。
删除逻辑卷
生产环境中,删除前需要进行数据的备份。然后依次删除逻辑卷、卷组、物理卷设备,这个顺序不可颠倒。