《Linux就该这么学》学习笔记(七)——使用RAID与LVM磁盘阵列技术

868 阅读11分钟

本次内容

  1. RAID(独立冗余磁盘阵列)
  2. 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 技术实际上没有备份硬盘中的真实数据信息,而是当硬盘设备出现问题后通过奇偶校验信息来尝试重建损坏的数据。示意图如下:

根据上图,disk 1 中的 parity 存放的便是 数据块2c 、 数据块3c 、数据块4c 的奇偶校验数据;disk 2 中的 parity 存放的是 数据块1c 、 数据块3b 、数据块4b 的奇偶校验数据;以此类推。在这里简单记录奇偶校验恢复数据的原理:假设有三个数据分别为 001、101、010。那么这三个数据进行异或运算后 001 XOR 101 XOR 010 = 110,那么结果 110 便是这三个数据的奇偶校验信息。当我们的数据 101 所在磁盘发生损坏导致数据丢失时,可以通过另外两个数据和奇偶校验数据进行恢复 110 XOR 001 XOR 010 = 101

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 备份盘数量

创建范例

  1. 通过 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 块硬盘设备的名称。
  2. 格式化磁盘阵列为 ext4 格式mkfs.ext4 /dev/md0
  3. 创建挂载点并挂载
    mkdir /RAID
    mount /dev/md0 /RAID
    
  4. 将信息写入配置文件echo "/dev/md0 /RAID ext4 defaults 0 0" >> /etc/fstab

1.6 损坏磁盘阵列及修复

在确认有一块物理硬盘设备出现损坏而不能继续正常使用后,应该使用 mdadm 命令将其移除,在购买了新的硬盘设备后再使用 mdadm 命令来予以替换即可。在 RAID 10 级别的磁盘阵列中,当 RAID 1 磁盘阵列中存在一个故障盘时并不影响 RAID 10 磁盘阵列的使用,因此在某块硬盘损坏期间我们仍然可以在/RAID 目录中正常地创建或删除文件。

操作范例

  1. 模拟硬盘损坏mdadm /dev/md0 -f /dev/sdb
  2. 查看磁盘阵列状态信息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
    
    由此可知是哪块硬盘出现问题
  3. 解除磁盘阵列的挂载umount /RAID
  4. 找到新硬盘后重新添加到RAID阵列中mdadm /dev/md0 -a /dev/sdb
  5. 重新挂载磁盘阵列mount -a

1.7 磁盘阵列+备份盘

磁盘阵列+备份盘 这项技术的核心理念就是准备一块足够大的硬盘,这块硬盘平时处于闲置状态,一旦 RAID 磁盘阵列中有硬盘出现故障后则会马上自动顶替上去。

操作范例
在这个范例中将使用 RAID 5 + 备份盘 技术

  1. 创建带有备份盘的 RAID 5 磁盘阵列mdadm -Cv /dev/md0 -n 3 -l 5 -x 1 /dev/sdb /dev/sdc /dev/sdd /dev/sde
  2. 查看磁盘阵列信息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
    
  3. 格式化并挂载
    mkfs.ext4 /dev/md0
    echo "/dev/md0 /RAID ext4 defaults 0 0" >> /etc/fstab
    mkdir /RAID
    mount -a
    
  4. 模拟磁盘损坏mdadm /dev/md0 -f /dev/sdb
  5. 查看信息:发现备份盘已经被自动顶替上去并开始了数据同步,如下:
    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 部署逻辑卷

操作范例

  1. 使新添加的两块硬盘设备支持 LVM 技术pvcreate /dev/sdb /dev/sdc
  2. 把两块硬盘设备加入到 storage 卷组中:vgcreate storage /dev/sdb /dev/sdc
  3. 切割出一个约为 150MB 名为 vo 的逻辑卷设备。在对逻辑卷进行切割时有两种计量单位。第一种是以容量为单位,所使用的参数为-L。例如,使用-L 150M 生成一个大小为 150MB 的逻辑卷。另外一种是以基本单元的个数为单位,所使用的参数为-l。每个基本单元的大小默认为 4MB。例如,使用-l 37 可以生成一个大小为 37×4MB=148MB 的逻辑卷。lvcreate -n vo -l 37 storage
  4. 格式化逻辑卷mkfs.ext4 /dev/storage/vo 注意,Linux 系统会把 LVM 中的逻辑卷设备存放在/dev 设备目录中(实际上是做了一个符号链接),同时会以卷组的名称来建立一个目录,其中保存了逻辑卷的设备映射文件(即/dev/卷组名称/逻辑卷名称)
  5. 创建挂载点mkdir /linuxprobe
  6. 挂载mount /dev/storage/vo /linuxprobe
  7. 查看挂载信息df -h
  8. 写入配置文件echo "/dev/storage/vo /linuxprobe ext4 defaults 0 0" >> /etc/fstab

2.2 扩容逻辑卷

只要卷组中有足够的资源,就可以一直为逻辑卷扩容。扩展前一定要记得卸载设备和挂载点的关联。

操作范例

  1. 卸载设备和挂载点的关联umount /linuxprobe
  2. 逻辑卷 vo 扩展至 290MBlvextend -L 290M /dev/storage/vo
  3. 检查文件系统完整性e2fsck -f /dev/storage/vo
  4. 重置硬盘容量resize2fs /dev/storage/vo
  5. 重新挂载mount -a
  6. 查看挂载信息df -h

2.3 缩小逻辑卷

相较于扩容逻辑卷,在对逻辑卷进行缩容操作时,其丢失数据的风险更大。所以在生产环境中执行相应操作时,一定要提前备份好数据。另外 Linux 系统规定,在对 LVM 逻辑卷进行缩容操作之前,要先检查文件系统的完整性。同样在操作前一定要记得卸载设备和挂载点的关联。

操作范例

  1. 卸载设备和挂载点的关联umount /linuxprobe
  2. 检查文件系统的完整性e2fsck -f /dev/storage/vo
  3. 重置磁盘容量到120MBresize2fs /dev/storage/vo 120M
  4. 逻辑卷 vo 减小至 120MBlvreduce -L 120M /dev/storage/vo
  5. 重新挂载mount -a
  6. 查看挂载信息df -h

2.4 逻辑卷快照

LVM 具有 “快照卷” 功能。如果发生数据被改错的情况,可以利用之前的快照卷进行还原。LVM 快照卷 具有以下两个特点:

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

操作范例

  1. 使用-s 参数生成一个名为SNAP快照卷,使用-L 参数指定切割的大小lvcreate -L 120M -s -n SNAP /dev/storage/vo
  2. 卸载掉逻辑卷设备与目录的挂载:umount /linuxprobe
  3. 使用指定快照卷进行还原lvconvert --merge /dev/storage/SNAP
  4. 重新挂载mount -a
  5. 查看挂载信息df -h

2.5 删除逻辑卷

想要删除逻辑卷,我们需要依次删除除逻辑卷、卷组、物理卷设备,顺序不可颠倒

操作范例

  1. 卸载设备和挂载点的关联umount /linuxprobe
  2. 删除配置文件中永久生效的设备参数
  3. 删除逻辑卷设备lvremove /dev/storage/vo
  4. 删除卷组,此处只写卷组名称即可,不需要设备的绝对路径:vgremove storage
  5. 删除物理卷设备pvremove /dev/sdb /dev/sdc