本次内容
- RAID(独立冗余磁盘阵列)
- LVM(逻辑卷管理器)
1.RAID(独立冗余磁盘阵列)
RAID 技术 通过把多个硬盘设备组合成一个容量更大、安全性更好的磁盘阵列,并把数据切割成多个区段后分别存放在各个不同的物理硬盘设备上,然后利用分散读写技术来提升磁盘阵列整体的性能,同时把多个重要数据的副本同步到不同的物理硬盘设备上,从而起到了非常好的数据冗余备份效果。以下是几种常见的 RAID 磁盘阵列方案:
1.1 RAID 0
RAID 0 是把多块物理硬盘设备(至少两块)通过硬件或软件的方式串联在一起,组成一个大的卷组,并将数据依次写入到各个物理硬盘中。这样在理想情况下硬盘的读写性能会提升数倍,但是由于没有数据备份,所以任何一块磁盘的损坏都会导致整个系统的数据被破坏。示意图如下:
1.2 RAID 1
RAID 1 是把两块以上的硬盘设备进行绑定,在写入数据时,是将数据同时写入到多块硬盘设备上(可以将其视为数据的镜像或备份)。当其中某一块硬盘发生故障后,一般会立即自动以热交换的方式来恢复数据的正常使用。这种方案虽然提高了数据的安全性,但是降低了磁盘设备的利用率。示意图如下:
1.3 RAID 5
RAID 5 是把硬盘设备的数据奇偶校验信息保存到其他硬盘设备中。RAID 5 磁盘阵列组中数据的奇偶校验信息并不是单独保存到某一块硬盘设备中,而是存储到除自身以外的其他每一块硬盘设备上。也就是说RAID 5 技术实际上没有备份硬盘中的真实数据信息,而是当硬盘设备出现问题后通过奇偶校验信息来尝试重建损坏的数据。示意图如下:
1.4 RAID 10
RAID 10 是 RAID 1+RAID 0 技术的一个“组合体”。此技术至少需要 4 块硬盘来组建,其中先分别两两制作成 RAID 1 磁盘阵列,以保证数据的安全性;然后再对两个 RAID 1 磁盘阵列实施 RAID 0 技术,进一步提高硬盘设备的读写速度。由于 RAID 10 技术继承了 RAID 0 的高读写速度和 RAID 1 的数据安全性,在不考虑成本的情况下 RAID 10 的性能都超过了 RAID 5,而大部分企业认为数据的价值远远大于硬盘的价值,因此 RAID 01 成为当前广泛使用的一种存储技术。示意图如下:
1.5 部署磁盘阵列
mdadm 命令用于管理 Linux 系统中的软件 RAID 硬盘阵列,格式为 mdadm [模式] <RAID 设备名称> [参数] [成员设备名称]。以下为部分常用参数:
| 参数 | 作用 |
|---|---|
| -a | 检测设备名称 |
| -n | 指定设备数量 |
| -l | 指定 RAID 级别 |
| -C | 创建 |
| -v | 显示过程 |
| -f | 模拟设备损坏 |
| -r | 移除设备 |
| -Q | 查看摘要信息 |
| -D | 查看详细信息 |
| -S | 停止 RAID 磁盘阵列 |
| -x | 备份盘数量 |
创建范例:
- 通过 mdadm 命令制作阵列:
mdadm -Cv /dev/md0 -a yes -n 4 -l 10 /dev/sdb /dev/sdc /dev/sdd /dev/sde其中,-C 参数代表创建一个 RAID 阵列卡;-v 参数显示创建的过程,同时在后面追加一个设备名称/dev/md0,这样/dev/md0就是创建后的RAID磁盘阵列的名称;-a yes 参数代表自动创建设备文件;-n 4 参数代表使用 4 块硬盘来部署这个 RAID 磁盘阵列;而-l 10 参数则代表 RAID 10 方案;最后再加上 4 块硬盘设备的名称。 - 格式化磁盘阵列为 ext4 格式:
mkfs.ext4 /dev/md0 - 创建挂载点并挂载:
mkdir /RAID mount /dev/md0 /RAID - 将信息写入配置文件:
echo "/dev/md0 /RAID ext4 defaults 0 0" >> /etc/fstab
1.6 损坏磁盘阵列及修复
在确认有一块物理硬盘设备出现损坏而不能继续正常使用后,应该使用 mdadm 命令将其移除,在购买了新的硬盘设备后再使用 mdadm 命令来予以替换即可。在 RAID 10 级别的磁盘阵列中,当 RAID 1 磁盘阵列中存在一个故障盘时并不影响 RAID 10 磁盘阵列的使用,因此在某块硬盘损坏期间我们仍然可以在/RAID 目录中正常地创建或删除文件。
操作范例:
- 模拟硬盘损坏:
mdadm /dev/md0 -f /dev/sdb - 查看磁盘阵列状态信息:
mdadm -D /dev/md0发现重要信息如下:
由此可知是哪块硬盘出现问题1 8 32 1 active sync /dev/sdc 2 8 48 2 active sync /dev/sdd 3 8 64 3 active sync /dev/sde 0 8 16 – faulty /dev/sdb - 解除磁盘阵列的挂载:
umount /RAID - 找到新硬盘后重新添加到RAID阵列中:
mdadm /dev/md0 -a /dev/sdb - 重新挂载磁盘阵列:
mount -a
1.7 磁盘阵列+备份盘
磁盘阵列+备份盘 这项技术的核心理念就是准备一块足够大的硬盘,这块硬盘平时处于闲置状态,一旦 RAID 磁盘阵列中有硬盘出现故障后则会马上自动顶替上去。
操作范例:
在这个范例中将使用 RAID 5 + 备份盘 技术
- 创建带有备份盘的 RAID 5 磁盘阵列:
mdadm -Cv /dev/md0 -n 3 -l 5 -x 1 /dev/sdb /dev/sdc /dev/sdd /dev/sde - 查看磁盘阵列信息:
mdadm -D /dev/md0发现重要信息如下: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 - 格式化并挂载:
mkfs.ext4 /dev/md0 echo "/dev/md0 /RAID ext4 defaults 0 0" >> /etc/fstab mkdir /RAID mount -a - 模拟磁盘损坏:
mdadm /dev/md0 -f /dev/sdb - 查看信息:发现备份盘已经被自动顶替上去并开始了数据同步,如下:
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
2.LVM(逻辑卷管理器)
LVM(逻辑卷管理器)可以允许用户对硬盘资源进行动态调整。尽管对传统的硬盘分区进行强制扩容或缩容从理论上来讲是可行的,但是却可能造成数据的丢失。而 LVM 技术是在硬盘分区和文件系统之间添加了一个逻辑层,它提供了一个抽象的卷组,可以把多块硬盘进行卷组合并。这样一来,用户不必关心物理硬盘设备的底层架构和布局,就可以实现对硬盘分区的动态调整。架构图如下:
举例来帮助理解 LVM 的设计思想:小明家里想吃馒头但是面粉不够了,于是妈妈从隔壁老王家、老李家、老张家分别借来一些面粉,准备蒸馒头吃。首先需要把这些面粉(物理卷[PV,Physical Volume])揉成一个大面团(卷组[VG,Volume Group]),然后再把这个大面团分割成一个个小馒头(逻辑卷[LV,Logical Volume]),而且每个小馒头的重量必须是每勺面粉(基本单元[PE,Physical Extent])的倍数。
物理卷处于 LVM 中的最底层,可以将其理解为物理硬盘、硬盘分区或者 RAID 磁盘阵列;卷组建立在物理卷之上,一个卷组可以包含多个物理卷,而且在卷组创建之后也可以继续向其中添加新的物理卷;逻辑卷是用卷组中空闲的资源建立的,并且逻辑卷在建立后可以动态地扩展或缩小空间。
配置 LVM 时,需要逐个配置物理卷、卷组和逻辑卷。以下为部分常用命令:
| 功能/命令 | 物理卷管理 | 卷组管理 | 逻辑卷管理 |
|---|---|---|---|
| 扫描 | pvscan | vgscan | lvscan |
| 建立 | pvcreate | vgcreate | lvcreate |
| 显示 | pvdisplay | vgdisplay | lvdisplay |
| 删除 | pvremove | vgremove | lvremove |
| 扩展 | vgextend | lvextend | |
| 缩小 | vgreduce | lvreduce |
2.1 部署逻辑卷
- 使新添加的两块硬盘设备支持 LVM 技术:
pvcreate /dev/sdb /dev/sdc - 把两块硬盘设备加入到 storage 卷组中:
vgcreate storage /dev/sdb /dev/sdc - 切割出一个约为 150MB 名为 vo 的逻辑卷设备。在对逻辑卷进行切割时有两种计量单位。第一种是以容量为单位,所使用的参数为-L。例如,使用-L 150M 生成一个大小为 150MB 的逻辑卷。另外一种是以基本单元的个数为单位,所使用的参数为-l。每个基本单元的大小默认为 4MB。例如,使用-l 37 可以生成一个大小为 37×4MB=148MB 的逻辑卷。
lvcreate -n vo -l 37 storage - 格式化逻辑卷:
mkfs.ext4 /dev/storage/vo注意,Linux 系统会把 LVM 中的逻辑卷设备存放在/dev 设备目录中(实际上是做了一个符号链接),同时会以卷组的名称来建立一个目录,其中保存了逻辑卷的设备映射文件(即/dev/卷组名称/逻辑卷名称)。 - 创建挂载点:
mkdir /linuxprobe - 挂载:
mount /dev/storage/vo /linuxprobe - 查看挂载信息:
df -h - 写入配置文件:
echo "/dev/storage/vo /linuxprobe ext4 defaults 0 0" >> /etc/fstab
2.2 扩容逻辑卷
只要卷组中有足够的资源,就可以一直为逻辑卷扩容。扩展前一定要记得卸载设备和挂载点的关联。
- 卸载设备和挂载点的关联:
umount /linuxprobe - 逻辑卷 vo 扩展至 290MB:
lvextend -L 290M /dev/storage/vo - 检查文件系统完整性:
e2fsck -f /dev/storage/vo - 重置硬盘容量:
resize2fs /dev/storage/vo - 重新挂载:
mount -a - 查看挂载信息:
df -h
2.3 缩小逻辑卷
相较于扩容逻辑卷,在对逻辑卷进行缩容操作时,其丢失数据的风险更大。所以在生产环境中执行相应操作时,一定要提前备份好数据。另外 Linux 系统规定,在对 LVM 逻辑卷进行缩容操作之前,要先检查文件系统的完整性。同样在操作前一定要记得卸载设备和挂载点的关联。
- 卸载设备和挂载点的关联:
umount /linuxprobe - 检查文件系统的完整性:
e2fsck -f /dev/storage/vo - 重置磁盘容量到120MB:
resize2fs /dev/storage/vo 120M - 逻辑卷 vo 减小至 120MB:
lvreduce -L 120M /dev/storage/vo - 重新挂载:
mount -a - 查看挂载信息:
df -h
2.4 逻辑卷快照
LVM 具有 “快照卷” 功能。如果发生数据被改错的情况,可以利用之前的快照卷进行还原。LVM 快照卷 具有以下两个特点:
- 快照卷的容量必须等同于逻辑卷的容量
- 快照卷仅一次有效,一旦执行还原操作后则会被立即自动删除
- 使用-s 参数生成一个名为SNAP快照卷,使用-L 参数指定切割的大小:
lvcreate -L 120M -s -n SNAP /dev/storage/vo - 卸载掉逻辑卷设备与目录的挂载:
umount /linuxprobe - 使用指定快照卷进行还原:
lvconvert --merge /dev/storage/SNAP - 重新挂载:
mount -a - 查看挂载信息:
df -h
2.5 删除逻辑卷
想要删除逻辑卷,我们需要依次删除除逻辑卷、卷组、物理卷设备,顺序不可颠倒
- 卸载设备和挂载点的关联:
umount /linuxprobe - 删除配置文件中永久生效的设备参数
- 删除逻辑卷设备:
lvremove /dev/storage/vo - 删除卷组,此处只写卷组名称即可,不需要设备的绝对路径:
vgremove storage - 删除物理卷设备:
pvremove /dev/sdb /dev/sdc