Linux Chapter07——使用RAID与LVM磁盘阵列技
RAID独立冗余磁盘阵列
RAID技术通过把多个硬盘组合成一个容量更大、安全性更好的磁盘阵列。并把数据切割成多个区段后分别存放在各个不同的物理硬盘设备上,然后利用分散读写技术来提升磁盘阵列整体的性,同时把多个重要数据的副本同步到不同的物理硬盘设备上,从而起到了非常好的数据冗余备份效果
出于成本和技术方面的考虑,需要针对不同的需求在数据可靠性及读写性能上做出权衡,制定出满足各自需求的不同方案。最常见的方案如下
RAID0、1、5、10
RAID0
RAID0技术把多块物理硬盘设备通过硬件或软件的方式串联在一起,组成一个大的卷组,并将数据依次写入各个物理硬盘中。
-
硬盘设备的读写性能会提升数倍
-
若任意一块硬盘发生故障,将导致整个系统的数据都受到破坏。
-
RAID0技术能够有效地提升硬盘数据的吞吐速度,但不具备数据备份和错误修复能力
-
数据被分别写入到不同的硬盘设备中,硬盘A和硬盘B设备会分别保存数据资料
RAID0
RAID1
RAID1是将两块以上的硬盘进行绑定,在写入数据时,将数据同时写入到多块硬盘设备上(可以将其视为数据的镜像或备份),当其中某一块硬盘发生故障后,一般会立即自动以热交换的方式来恢复数据的正常使用
RAID1
RAID1优缺点
- 写入数据时RAID1的速度会比RAID0低一些
- 读取数据时,理论读取速度的峰值可以是硬盘数量的倍数
- 只要有一块硬盘稳定运行,数据就不会损坏。可靠性较高
RAID5
RAID5技术是把硬盘设备的数据奇偶校验信息保存到其他硬盘设备中。RAID磁盘阵列中数据的奇偶校验信息并不是单独保存到某一块硬盘设备中,而是存储到除自身以外的其他每一块硬盘设备上。
-
RAID5技术实际上没有备份硬盘中的真实数据信息,而是当硬盘设备出现问题后通过奇偶校验信息来尝试重建损坏的数据。
RAID5
RAID5最少由3块硬盘组成,使用硬盘切割技术。当重复写入某个文件时,RAID5级别的磁盘阵列组只需要对应一个奇偶校验信息。效率更高、存储成本低
RAID 10
RAID10技术是RAID1+RAID0的一个“组合体”
RAID10至少需要4块硬盘来搭建
-
两两制作RAID1磁盘阵列,以保证数据的安全,然后再对两个RAID1磁盘阵列实时RAID0,提高硬盘设备的读写速度
RAID10
从上图中得知,RAID10是先对信息进行分割,然后再两两一组制作镜像。也就是先将RAID 1作为最低级别的组合,然后再使用RAID 0将RAID 1磁盘阵列组合到一起,将它们视为一整块硬盘
在RAID10中只要坏的不是同一阵列中的所有硬盘,那么最多可以损坏50%的硬盘设备而不丢失数据
部署磁盘阵列
在Linux中,我们可以使用mdadm命令,用于创建、调整、监控和管理RAID设备
mdadm 参数 硬盘名称
- -a 检测设备名称
- -n 指定设备数量
- -l 指定RAID级别
- -C 创建
- -v 显示过程
- -f 模拟设备损坏
- -r 移除设备
- -Q 查看摘要信息
- -D 查看详细信息
- -S 停止RAID磁盘阵列
mdadm -Cv /dev/md0 -n 4 -l 10 /dev/sdc /dev/sdd /dev/sde /dev/sdf
表示创建 名称为 /dev/md0的磁盘阵列
-v 参数显示创建的过程
-n 4 表示使用4块硬盘来部署这个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
创建挂载点,将硬盘设备进行挂载操作
[root@linuxprobe ~]# mkdir /RAID
[root@linuxprobe ~]# mount /dev/md0 /RAID
查看/dev/md0磁盘阵列设备的详细信息,确认RAID级别、阵列大小和硬盘总数
[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
将创建好的磁盘阵列RAID添加到/etc/fstab文件中,这样可以确保在每次重启后RAID磁盘阵列都会生效
[root@linuxprobe ~]# echo "/dev/md0 /RAID ext4 defaults 0 0">> /etc/fstab
[root@linuxprobe ~]# cat /etc/fstab
损坏磁盘阵列及修复
模拟一下故障。使得一块硬盘故障
[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
购买了新的硬盘设备后再使用mdadm命令予以替换即可。更换故障的硬盘后再次使用-a参数进行添加操作,系统默认会自动开始数据的同步工作,使用-D参数即可看到整个过程和进度
[root@linuxprobe ~]# mdadm /dev/md0 -a /dev/sdc
mdadm: added /dev/sdc
[root@linuxprobe ~]# mdadm -D /dev/md0
磁盘阵列+备份盘
RAID10磁盘阵列中最多允许50%的硬盘设备发生故障。如果同一RAID1磁盘阵列中的硬盘设备若全部损坏,就会导致数据丢失。在这样的情况,我们可以使用RAID备份盘技术来预防这类事故,该技术的和新就是 需要准备一块足够大的盘
,这块硬盘平时处于闲置状态,一旦RAID磁盘阵列中有硬盘出现故障就会自动替换上去
删除磁盘阵列
mdadm -S /dev/md0
LVM 逻辑卷管理器
LVM允许用户对硬盘资源进行动态调整
LVM是Linux系统用于对硬盘分区进行管理的一种机制。为了解决硬盘设备在创建分区后不易修改区分大小的缺陷。LVM技术是在硬盘分区和文件系统之间添加了一个逻辑层提供了一个抽象的卷组。可以把多块硬盘进行卷组合并。这样,用户不必关心物理设备的底层架构和布局,可以实现对硬盘分区的动态调整。
各组件间的关系
- 物理卷处于LVM中的最底层,可以将其理解为物理硬盘、硬盘分区、或者RAID磁盘阵列
- 卷组建立在物理卷之上,一个卷组能够包含多个物理卷,而且在卷组创建之后也可以继续向其中添加新的物理卷。
- 逻辑卷是用卷组中空闲的资源建立的,并且逻辑卷在建立之后可以动态地扩展或缩小空间
部署逻辑卷
常用的LVM部署命令
常用的LVM部署命令
新添加两块硬盘
让新添加的两块硬盘设备支持LVM技术
[root@linuxprobe ~]# pvcreate /dev/sdb /dev/sdc
Physical volume "/dev/sdb" successfully created.
Physical volume "/dev/sdc" successfully created.
把两块硬盘设备加入到storage卷组中
[root@linuxprobe ~]# vgcreate storage /dev/sdb /dev/sdc
Volume group "storage" successfully created
[root@linuxprobe ~]# vgdisplay
切割出一个约为150MB的逻辑卷设备
[root@linuxprobe ~]# lvcreate -n vo -l 37 storage
把生成好的逻辑卷进行格式化然后挂载使用
[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
查看挂载状态,并写入配置文件,使其永久生效
echo "/dev/storage/vo /linuxprobe ext4 defaults 0 0">> /etc/
扩容逻辑卷
下面对刚才的分的LVM卷进行扩容
扩容前先卸载设备和挂载点的关联
[root@linuxprobe ~]# umount /linuxprobe
- 把上一个实验中的逻辑卷vo扩展至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
- 检查硬盘的完整性,确认目录结构、内容和文件内容没有丢失
[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
- 重置设备在系统中农的容量,刚才是对LV设备进行扩容操作,但系统内核还没有同步到这部分新修改的信息。需要手动进行同步
[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.
- 重新挂载硬盘设备并查看挂载状态
[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 (扩容完成)
缩小逻辑卷
相较于扩容逻辑卷,在对逻辑卷进行缩容操作时,数据丢失的风险更大。所以在生产环境执行相应操作时,一定要提前备份数据。Linux系统规定,在对LVM逻辑卷进行缩容操作之前,要先检查文件系统的完整性
- 卸载文件系统
[root@linuxprobe ~]# umount /linuxprobe
- 检查文件系统的完整性
[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
- 通知系统内核将逻辑卷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.
- 重新挂载文件系统并查看系统状态
[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还具备快照卷功能,类似于虚拟机的还原时间点功能
- 快照卷的容量必须等同于逻辑卷的容量
- 快照卷仅一次有效,一旦执行还原操作后则会被立即自动删除
填坑 日后补
删除逻辑卷
当生产环境中想要重新部署LVM或者不再需要使用LVM时,则需要执行LVM删除操作。删除操作必须按照删除逻辑卷、卷组、物理卷设备这个顺序
- 取消逻辑卷与目录的挂载关联,删除配置文件中永久生效的设备参数
[root@linuxprobe ~]# umount /linuxprobe
[root@linuxprobe ~]# vim /etc/fstab
- 删除逻辑卷设备
[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.