slacr_

Just to record my life and thoughts.
笔记/编程/杂乱/极简

[Linux]使用RAID与LVM磁盘阵列技术

Oct 6, 2023Linux3576 words in 24 min

RAID磁盘冗余阵列

RAID磁盘冗余阵列

1988年,美国加利福尼亚大学伯克利分校首次提出并定义了Redundant Array of Independent Disks技术的概念,中文名是磁盘冗余阵列,简称RAID。RAID技术通过把多个硬盘设备组合成一个容量更大、安全性更好的磁盘阵列,并把数据切割成多个区段后分别存放在各个不同的物理硬盘设备上,然后利用分散读写技术来提升磁盘阵列整体的性能,同时把多个重要数据的副本同步到不同的物理硬盘设备上,从而起到了非常好的数据冗余备份效果。

RAID不仅降低了硬盘设备损坏后丢失数据的几率,还提升了硬盘设备的读写速度,所以它在绝大多数运营商或大中型企业中得以广泛部署和应用。

RAID 0

RAID 0技术把多块物理硬盘设备(至少两块)通过硬件或软件的方式串联在一起,组成一个大的卷组,并将数据依次写入到各个物理硬盘中。这样一来,在最理想的状态下,硬盘设备的读写性能会提升数倍,但是若任意一块硬盘发生故障将导致整个系统的数据都受到破坏。通俗来说,RAID 0技术能够有效地提升硬盘数据的吞吐速度,但是不具备数据备份和错误修复能力

RAID 1

把两块以上的硬盘设备进行绑定,在写入数据时,是将数据同时写入到多块硬盘设备上(可以将其视为数据的镜像或备份)。当其中某一块硬盘发生故障后,一般会立即自动以热交换的方式来恢复数据的正常使用。
考虑到写入操作时CPU切换硬盘的开销,速度会比RAID 0有微弱的降低,但在读取数据的时候,操作系统可以分别从两块硬盘中读取信息,理论读取速度的峰值可以是硬盘数量的倍数。另外平时只要保证有一块硬盘稳定运行,数据就不会出现损坏的情况,可靠性较高。
RAID 1技术虽然十分注重数据的安全性,但是因为是在多块硬盘设备中写入了相同的数据,因此硬盘设备的利用率得以下降

RAID 5

RAID5技术是把硬盘设备的数据奇偶校验信息保存到其他硬盘设备中。RAID 5磁盘阵列组中数据的奇偶校验信息并不是单独保存到某一块硬盘设备中,而是存储到除自身以外的其他每一块硬盘设备上,这样的好处是其中任何一设备损坏后不至于出现致
命缺陷;换句话说,就是RAID 5技术实际上没有备份硬盘中的真实数据信息,而是当硬盘设备出现问题后通过奇偶校验信息来尝试重建损坏的数据。RAID这样的技术特性“妥协”地兼顾了硬盘设备的读写速度、数据安全性与存储成本问题。

RAID 5最少由三块硬盘组成,使用的是Disk Striping硬盘切割技术。。比RAID 1级别好处就在于保存的是奇偶校验信息而不是一模一样的文件内容,所以当重复写入某个文件时,RAID 5级别的磁盘阵列组只需要对应一个奇偶校验信息就可以,效率更高,存储成本也会随之降低。

RAID 10

鉴于RAID 5技术是因为硬盘设备的成本问题对读写速度和数据的安全性能而有了一定的妥协,但是大部分企业更在乎的是数据本身的价值而非硬盘价格,因此生产环境中主要使用RAID 10技术。
RAID 10技术是RAID 1+RAID0技术的一个“组合体”
RAID 10技术需要至少4块硬盘来组建,其中先分别两两制作成RAID 1磁盘阵列,以保证数据的安全性;然后再对两个RAID 1磁盘阵列实施RAID 0技术,进一步提高硬盘设备的读写速度。这样从理论上来讲,只要坏的不是同一组中的所有硬盘,那么最多可以损坏50%硬盘设备而不丢失数据。由于RAID 10技术继承了RAID O的高读写速度和RAID 1的数据安全性,在不考虑成本的情况下RAID 10的性能都超过了RAID 5,因此当前成为广泛使用的一种存储技术。

RAID 10级别中任何一块硬盘损坏都不会影响到数据安全性,其余硬盘均会正常运作。但RAID 01只要有任何一块盘损坏,最低级别的RAID 0硬盘组马上会停止运作,可能造成严重隐患。所以RAID 10远比RAID 01常见,很多主板甚至不支持RAID 01

部署磁盘阵列

添加四个硬盘设备

mdadm命令用于创建、调整、监控和管理RAID设备,英文全称为:"multiple devices admin”,语法格式为:“mdadm 参数 硬盘名称”。

-C参数代表创建一个RAID阵列卡;-V参数显示创建的过程,同时在后面追加一个设备名称/dev/md0,这样/dev/md0就是创建后的RAID磁盘阵列的名称;-n 4参数代表使用4块硬盘来部署这个RAID磁盘阵列;而-l 10参数则代表RAID 10方案;最后再加上4块硬盘设备的名称

1
2
3
4
5
6
7
8
9
10
11
12
13
mdadm -Cv /dev/md0 -n 4 -l 10 /dev/sdd /dev/sde /dev/sdf /dev/sdg
mdadm -D /dev/md0
mdadm -Q /dev/mde

mkfs.ext4 /dev/md0
mkdir /RAID
mount /dev/md0 /RAID
df -h
mdadm -D /dev/md0


echo "/dev/md0 /RAID ext4 defaults 0 0" >> /etc/fstab
cat /etc/fstab

损坏磁盘阵列以及修复

首先确认有一块物理硬盘设备出现损坏不能再继续正常使用后,应该使用mdadm命令来予以移除之后查看下RAID磁盘阵列组的状态已经被改变。

1
2
3
4
5
6
7
mdadm /dev/md0 -f /dev/sdd # 模拟故障 -f faulty
mdadm -D /dev/md0
mdadm /dev/md0 -r /dev/sdd # 移除

mdadm /dev/md0 -a /dev/sdd # 重新添加
mdadm -D /dev/md0 # 使用-D参数即可看到整个过程和百分比进度

磁盘阵列+备份盘

RAID 10磁盘阵列中最多允许50%硬盘设备发生故障,但是存在这样一种极端情况,即同一RAID 1磁盘阵列中的硬盘设备若全部损坏,也会导致数据丢失.可以使用RAID备份盘技术来预防这类事故。

部署RAID 5磁盘阵列时,至少需要用到3块硬盘,还需要再加一块备份硬盘(也叫热备盘),所以总计需要在虚拟机中模拟4块硬盘设备

1
2
3
4
5
6
7
8
mdadm -Cv /dev/md0 -n 3 -l 5 -x 1 /dev/sdc /dev/sdd /dev/sde /dev/sdf
mdadm -D /dev/md0
mkfs.ext4 /dev/md0

mkdir /RAID
echo "/dev/md0 /RAID ext4 defaults 0 0" >> /etc/fstab
mount -a
df -h

由三块硬盘组成的RAID 5级别磁盘阵列,它对应的可用空间是n-1,也就是40G。热备盘的空间是不算入内的,平时完全就是在“睡觉”中,只有意外出现时才会开始工作。

1
2
3
4
5
6
7
mdadm /dev/md0 -f /dev/sdc
mdadm -D /dev/md0
# 热备盘会自动顶上

mdadm /dev/md0 -r /dev/sdc
mdadm /dev/md0 -a /dev/sdc
mdadm -D /dev/md0

删除磁盘阵列

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
umount /RAID
mdadm /dev/md0 -f /dev/sdc
mdadm /dev/md0 -f /dev/sdd
mdadm /dev/md0 -f /dev/sde
mdadm /dev/md0 -f /dev/sdf

mdadm /dev/md0 -r /dev/sdc
mdadm /dev/md0 -r /dev/sdd
mdadm /dev/md0 -r /dev/sde
mdadm /dev/md0 -r /dev/sdf

# mdadm /dev/md0 -f /dev/sdc -r /dev/sdc

mdadm -D /dev/md0
mdadm --stop /dev/md0

一些老版本的服务器,使用完–stop参数后依然会保留设备文件,很明显是没有处理干净,这时再执行一下:"mdadm-- remove /dev/md0”命令即可

LVM 逻辑卷管理器

当用户想要随着实际需求的变化调整硬盘分区的大小时,会受到硬盘“灵活性”的限制。
Logical Volume Manager(逻辑卷管理器,简称LVM)。LVM允许用户对硬盘资源进行动态调整。

逻辑卷管理器是Linux系统用于对硬盘分区进行管理的一种机制,理论性较强,其创建初衷是为了解决硬盘设备在创建分区后不易修改分区大小的缺陷。尽管对传统的硬盘分区进行强制扩容或缩容从理论上来讲是可行的,但是却可能造成数据的丢失。而LVM技术是在硬盘分区和文件系统之间添加了一个逻辑层,它提供了一个抽象的卷组,可以把多块硬盘进行卷组合并。这样一来,用户不必关心物理硬盘设备的底层架构和布局,就可以实现对硬盘分区的动态调整。

物理卷处于LVM中的最底层,可以将其理解为物理硬盘、硬盘分区或者RAID磁盘阵列。卷组建立在物理卷之上,一个卷组能够包含多个物理卷,而且在卷组创建之后也可以继续向其中添加新的物理卷。逻辑卷是用卷组中空闲的资源建立的,并且逻辑卷在建立后可以动态地扩展或缩小空间。这就是LVM的核心理念。

部署逻辑卷

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
pvcreate /dev/sdc /dev/sdd
vgcreate myvg /dev/sdc /dev/sdd
vgdisplay

# 37个PE Physical Extent 基本物理单位大小 148M
lvcreate -n mylv1 -l 37 myvg
lvdisplay

mkfs.ext4 /dev/myvg/mylv1
mkdir /slacrfile
mount /dev/myvg/mylv1 /slacrfile

df -h
echo "/dev/myvg/mylv1 /slacrfile ext4 defaults 0 0" >> /etc/fstab
cat /etc/fstab

Linux系统会把LVM中的逻辑卷设备存放在/dev设备目录中,实际上就是个快捷方式,同时会以卷组的名称来建立一个目录,其中保存了逻辑卷的设备映射文件,即/dev/卷组名称/逻辑卷名称。

如果用了LVM逻辑卷管理器的话,不建议用XFS文件系统。因为XFS文件系统自身就可以使用xfs_growfs命令进行磁盘扩容,虽然不比LVM灵活,但起码也是够用的。在实测阶段我们发现,有一些服务器上XFS与LVM兼容性并不好。

扩容逻辑卷

在前面的实验中,卷组是由两块硬盘设备共同组成的。用户在使用存储设备时感知不到设备底层的架构和布局,更不用关心底层是由多少块硬盘组成的,只要卷组中有足够的资源,就可以一直为逻辑卷扩容。扩展前请一定要记得卸载设备和挂载点的关联

1
2
3
4
5
6
7
8
9
uamount /slacrfile # 卸载
lvextend -L 290M /dev/myvg/mylv1 # 扩容
e2fsck -f /dev/myvg/mylv1 # 检查硬盘的完整性,确认目录结构、内容和文件内容没有丢失

resize2fs /dev/myvg/mylv1 # 重置设备在系统中的容量, 内核同步

mount -a
df -h # 重新挂载, 查看状态

缩小逻辑卷

相较于扩容逻辑卷,在对逻辑卷进行缩容操作时,其丢失数据的风险更大。所以在生产环境中执行相应操作时,一定要提前备份好数据。另外Linux系统规定,在对LVM逻辑卷进行缩容操作之前,要先检查文件系统的完整性(当然这也是为了保证数据安全)。在缩容操作前记得先把文件系统卸载掉。

1
2
3
4
5
6
7
umount /slacrfile
e2fsck -f /dev/myvg/mylv1 # 检查文件系统完整性
resize2fs /dev/myvg/mylv1 120M # 通知系统内核将mylv1的容量减小到120M
lvreduce -L 120M /dev/myvg/mylv1

mount -a
df -h

逻辑卷快照

快照卷的容量必须等同于逻辑卷的容量;
快照卷仅一次有效,一旦执行还原操作后则会被立即自动删除。

lvconvert命令用于管理逻辑卷的快照,语法格式为:“lvconvert [参数] 快照卷名称”。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
vgdisplay  # 查看卷组容量是否够用
echo "test for snapshot" >> /slacrfile/test.txt
ls -l /slacrfile

lvcreate -L 120M -s -n SNAP /dev/myvg/mylv1
lvdisplay
# SNAP 的占用率变大

dd if=/dev/zero of=/slacrfile/files count=1 bs=100M
lvdisplay /dev/myvg

umount /slacrfile
lvconvert --merge /dev/myvg/SNAP
# 恢复到了创建SNAP 时的状态

mount -a
ll /slacrfile
cat test.txt

lvdisplay # SNAP 快照已经消失

删除逻辑卷

当生产环境中想要重新部署LVM或者不再需要使用时,则需要执行LVM的删除操作。为此,需要提前备份好重要的数据信息,然后依次删除逻辑卷、卷组、物理卷设备,这个顺序不可颠倒。

1
2
3
4
5
6
7
8
9
10
11
umout /slacrfile
vi /etc/fstab # 删除配置参数
...

lvremove /dev/myvg/mylv1
vgremove myvg
pvremove /dev/sdc /dev/sdd

pvdisplay
vgdisplay
lvdisplay

参考

  1. Linux就该这么学
  2. [鸟哥linux基础学习篇4th]
  3. linux命令
  4. 开源许可证总览
  5. LSB标准
  6. 硬盘结构
  7. RHCSA学习
  8. RHEL订阅
  9. 如何在 RHEL 9 上创建本地 Yum/DNF 仓库
  10. VDO github地址
  11. RHEL9 VDO文档
  • Author:

    slacr_

  • Copyright:

  • Published:

    October 6, 2023

  • Updated:

    October 6, 2023

Buy me a cup of coffee ☕.

1000000