[toc]

11-使用RAID与LVM磁盘阵列技术

一、c磁盘冗余阵列

1、RAID磁盘冗余阵列

RAID(Redundant Array of Inexpensive Disks)技术通过把多个硬盘设备组合成一个容量更大、安全性更好的磁盘阵列,并把数据切割成多个区段后分别存放在各个不同的物理硬盘设备上,然后利用分散读写技术来提升磁盘阵列整体的性能,同时把多个重要数据的副本同步到不同的物理硬盘设备上,从而起到了非常好的数据冗余备份效果。

RAID技术确实具有非常好的数据冗余备份功能,但是它也相应地提高了成本支出。

常见的磁盘冗余阵列方案:

  • RAID 0
  • RAID 1
  • RAID 5
  • RAID 10
1.1、RAID 0

RAID 0技术把多块物理硬盘设备(至少两块)通过硬件或软件的方式串联在一起,组成一个大的卷组,并将数据依次写入到各个物理硬盘中。

image

RAID 0技术能够有效地提升硬盘数据的吞吐速度,但是不具备数据备份和错误修复能力。它是将数据依次写入到各个物理硬盘中,也就是说,它的数据是分开存放的,其中任何一块硬盘发生故障都会损坏整个系统的数据。

1.2、RAID 1

RAID 1是把两块以上的硬盘设备进行绑定,在写入数据时,是将数据同时写入到多块硬盘设备上(可以将其视为数据的镜像或备份)。当其中某一块硬盘发生故障后,一般会立即自动以热交换的方式来恢复数据的正常使用。

image

RAID 1十分注重数据的安全性,但因为是在多块硬盘设备中写入了相同的数据,因此硬盘设备的利用率得以下降。

1.3、RAID 5

RAID5技术是把硬盘设备的数据奇偶校验信息保存到其他硬盘设备中。

RAID 5磁盘阵列组中数据的奇偶校验信息并不是单独保存到某一块硬盘设备中,而是存储到除自身以外的其他每一块硬盘设备上,这样的好处是其中任何一设备损坏后不至于出现致命缺陷;图中parity部分存放的就是数据的奇偶校验信息,

RAID 5技术实际上没有备份硬盘中的真实数据信息,而是当硬盘设备出现问题后通过奇偶校验信息来尝试重建损坏的数据。RAID这样的技术特性“妥协”地兼顾了硬盘设备的读写速度、数据安全性与存储成本问题。

image

1.4、RAID 10

RAID 10技术是RAID 1+RAID 0技术的一个“组合体”。
RAID 10技术需要至少4块硬盘来组建,其中先分别两两制作成RAID 1磁盘阵列,以保证数据的安全性;然后再对两个RAID 1磁盘阵列实施RAID 0技术,进一步提高硬盘设备的读写速度。

image

由于RAID 10技术继承了RAID 0的高读写速度和RAID 1的数据安全性,在不考虑成本的情况下RAID 10的性能都超过了RAID 5,因此当前成为广泛使用的一种存储技术。

2、部署磁盘阵列

2.1 创建4块硬盘设备用来制作一个RAID 10硬盘队列

image

2.2、mdadm命令管理创建硬盘阵列

mdadm命令用于管理Linux系统中的软件RAID硬盘阵列

命令格式:mdadm [模式] <RAID设备名称> [选项] [成员设备名称]

选项参数

| 参数 | 作用 |
| —- | ——————————- |
| -a | 添加设备到阵列 |
| -n | 指定设备数量 |
| -l | 指定RAID级别 |
| -C | 创建 |
| -v | 显示过程 |
| -f | 将设备状态定为故障,模拟设备损坏 |
| -r | 移除设备 |
| -D | 查看详细信息 |
| -S | 停止RAID磁盘阵列 |

示例:创建磁盘阵列

① 创建RAID 10,名称为/dev/md0

[root@localhost ~]# mdadm -Cv /dev/md0 -a yes -n 4  -l 10 /dev/sdb /dev/sdc /dev/sdd /dev/sde
mdadm: layout defaults to n2
mdadm: layout defaults to n2
mdadm: chunk size defaults to 512K
mdadm: size set to 10476544K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

其中,-C参数代表创建一个RAID阵列卡;-v参数显示创建的过程,/dev/md0设备名称,创建后的RAID磁盘阵列的名称;-a yes参数代表自动创建设备文件;-n 4参数代表使用4块硬盘;而-l 10参数则代表RAID 10方案;最后是4块硬盘设备的名称。

② 格式化RAIDext4格式

[root@localhost ~]# mkfs.ext4 /dev/md0 
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
1310720 inodes, 5238272 blocks
261913 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=2153775104
160 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
    4096000

Allocating group tables: 完成                            
正在写入inode表: 完成                            
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成   

③ 创建挂载点然后把硬盘设备进行挂载操作。挂载成功后可看到可用空间为20GB。

[root@localhost ~]# mkdir /mnt/RAID
[root@localhost ~]# mount /dev/md0 /mnt/RAID
[root@localhost ~]# df -h /dev/md0 
文件系统        容量  已用  可用 已用% 挂载点
/dev/md0         20G   45M   19G    1% /mnt/RAID

④ 查看/dev/md0磁盘阵列的详细信息

# 查看详细信息命令
[root@localhost ~]# mdadm -D /dev/md0 

⑤ 把挂载信息写入到配置文件中,使其永久生效

[root@localhost ~]# echo "/dev/md0 /mnt/RAID ext4 defaults 0 0" >> /etc/fstab

3、损坏磁盘阵列及修复

① 使用mdada命令以及-f/dev/sdb 设备状态定为故障

[root@localhost ~]# mdadm /dev/md0 -f /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md0

② 查看下RAID磁盘阵列组的状态

[root@localhost ~]# mdadm -D /dev/md0

image

② 增加新的硬盘添加到RAID磁盘阵列中

RAID 10级别的磁盘阵列中,当RAID 1磁盘阵列中存在一个故障盘时并不影响RAID 10磁盘阵列的使用。当购买了新的硬盘设备后再使用mdadm命令来予以替换即可,在此期间我们可以在/RAID目录中正常地创建或删除文件。

首先卸载/mnt/RAID挂载

[root@localhost ~]# umount /mnt/RAID 

其次增加新硬盘到阵列

[root@localhost ~]# mdadm /dev/md0 -a /dev/sdb
mdadm: added /dev/sdb

接下来查看阵列详情奖态,

[root@localhost ~]# mdadm -D /dev/md0

image

最后手动挂载磁盘阵列,或重启挂载

[root@localhost ~]# mount -a

-a参数是加载文件/etc/fstab中描述的所有文件系统

4、磁盘阵列+备份盘

RAID 10磁盘阵列中最多允许50%的硬盘设备发生故障。如果一块磁盘损坏,而在新的硬盘还在修复中,恰巧另一个磁盘也出现故障,那么数据就被彻底丢失了。

这种情况下就可以使用RAID备份盘技术预防这类事故。

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

示例:创建RAID 5磁盘阵列,并创建备份硬盘

① 创建一个RAID 5磁盘阵列+备份盘

[root@localhost ~]# mdadm -Cv /dev/md0 -n 3 -l 5 -x 1 /dev/sdb /dev/sdc /dev/sdd /dev/sde
mdadm: layout defaults to left-symmetric
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 512K
mdadm: size set to 10476544K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

② 查看/dev/md0磁盘阵列详情

[root@localhost ~]# mdadm -D /dev/md0

image

/dev/sde作为了备份盘在等待中。

③ 将部署好的RAID 5磁盘阵列格式化为ext4文件格式

[root@localhost ~]# mkfs.ext4 /dev/md0

④ 创建挂载目录/mnt/RAID,然后挂载/dev/md0

[root@localhost ~]# mkdir /mnt/RAID
[root@localhost ~]# echo "/dev/md0 /mnt/RAID ext4 defaults 0 0" >> /etc/fstab
[root@localhost ~]# mount -a

⑤ 将/dev/sdb设为故障磁盘,然后查看状态

[root@localhost ~]# mdadm /dev/md0 -f /dev/sdb
[root@localhost ~]# mdadm -D /dev/m

image

备份盘/dev/sde已经被自动顶替上去并开始了数据同步。

注意:硬盘设备管理技术虽然能够有效地提高硬盘设备的读写速度以及数据的安全性,但是在硬盘分好区或者部署为RAID磁盘阵列之后,再想修改硬盘分区大小就不容易了。换句话说,当用户想要随着实际需求的变化调整硬盘分区的大小时,会受到硬盘“灵活性”的限制。

二、LVM逻辑卷管理器

1、LVM逻辑卷管理器

LVM可以允许用户对硬盘资源进行动态调整。

逻辑卷管理器是Linux系统用于对硬盘分区进行管理的一种机制,理论性较强,其创建初衷是为了解决硬盘设备在创建分区后不易修改分区大小的缺陷。

传统的硬盘分区进行强制扩容或缩容可能造成数据的丢失,LVM技术是在硬盘分区和文件系统之间添加了一个逻辑层,它提供了一个抽象的卷组,可以把多块硬盘进行卷组合并。

image

例如:小明家里想吃馒头但是面粉不够了,于是妈妈从隔壁老王家、老李家、老张家分别借来一些面粉,准备蒸馒头吃。首先需要把这些面粉(物理卷[PV,Physical Volume])揉成一个大面团(卷组[VG,Volume Group]),然后再把这个大面团分割成一个个小馒头(逻辑卷[LV,Logical Volume]),而且每个小馒头的重量必须是每勺面粉(基本单元[PE,Physical Extent])的倍数。

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

常用的LVM部署命令

| 功能/命令 | 物理卷管理 | 卷组管理 | 逻辑卷管理 |
| ——— | ———- | ——— | ———- |
| 扫描 | pvscan | vgscan | lvscan |
| 建立 | pvcreate | vgcreate | lvcreate |
| 显示 | pvdisplay | vgdisplay | lvdisplay |
| 删除 | pvremove | vgremove | lvremove |
| 扩展 | | vgextend | lvextend |
| 缩小 | | vgreduce | lvreduce |

2、部署逻辑卷

部署LVM时,需要逐个配置物理卷卷组逻辑卷

示例:部署LMV逻辑卷

注意:为了避免多个实验之间相互发生冲突做练习时先还原虚拟机,然后创建两块磁盘。

对两块新硬盘进行创建物理卷的操作,然后将两块硬盘进行卷组合并,根据需求把合并后的卷组切割出一个约为150MB的逻辑卷设备,最后把这个逻辑卷设备格式化成EXT4文件系统后挂载使用。

① 让添加的两块硬盘设备支持LVM技术

[root@localhost ~]# pvcreate /dev/sdb /dev/sdc
  Physical volume "/dev/sdb" successfully created.
  Physical volume "/dev/sdc" successfully created.

② 把两块硬盘设备加入到storage卷组中,然后查看卷组的状态。

[root@localhost ~]# vgcreate storage /dev/sdb /dev/sdc
  Volume group "storage" successfully created
# 查看卷组的状态
[root@localhost ~]# vgdisplay

③ 切割出一个约为150MB的逻辑卷设备

逻辑卷进行切割时有两种计量单位:

  • -L:以容量为单位,例如,使用-L 150M生成一个大小为150MB的逻辑卷
  • -l:以基本单元的个数为单位,每个基本单元的大小默认为4MB,例如,使用-l 37可以生成一个大小为37×4MB=148MB的逻辑卷
[root@localhost ~]# lvcreate -n vo -l 37 storage
  Logical volume "vo" created.
[root@localhost ~]# lvdisplay # 查看逻辑卷状态

④ 把生成好的逻辑卷进行格式化

[root@localhost ~]# mkfs.ext4 /dev/storage/vo

③ 将挂载信息写入配置文件,使永久生效,创建挂载目录,进行挂载

[root@localhost ~]# echo "/dev/storage/vo /localhost ext4 defaults 0 0" >> /etc/fstab
[root@localhost ~]# mkdir /localhost
[root@localhost ~]# mount -a
[root@localhost ~]# df -h |grep /dev/

image

3、扩容逻辑卷

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

① 卸载挂载点

[root@localhost ~]# umount /localhost

② 将逻辑卷vo扩展至290MB

[root@localhost ~]# lvextend -L 290M /dev/storage/vo 

image

③ 检查硬盘文件系统的完整性,并重置硬盘容量

  • e2fsck:检查文件系统的分区硬盘是否正常工作,-f参数是强制检查。
  • resize2fs:调整文件系统大小,-f参数强制执行调整大小操作,覆盖掉安全检查操作
# 检查硬盘完整性
[root@localhost ~]# e2fsck -f /dev/storage/vo

image

# 重置硬盘容量
[root@localhost ~]# resize2fs -f /dev/storage/vo

image

④ 重新挂载硬盘设备并查看挂载状态

[root@localhost ~]# mount -a
[root@localhost ~]# df -h |grep /dev/

image

4、缩小逻辑卷

逻辑卷进行缩容操作时,其丢失数据的风险更大,所以在生产环境中执行相应操作时,一定要提前备份好数据。对LVM逻辑卷进行缩容操作之前,要先检查文件系统的完整性。

① 卸载挂载点

[root@localhost ~]# umount /localhost

② 检查文件系统的完整性

[root@localhost ~]#  e2fsck -f /dev/storage/vo

image

③ 把逻辑卷vo的容量减小到120MB

[root@localhost ~]# resize2fs /dev/storage/vo 120M

image

④ 重新挂载硬盘设备并查看挂载状态

[root@localhost ~]# mount -a
[root@localhost ~]# df -h |grep /dev/

image

5、逻辑卷快照

LVM还具备有“快照卷”功能,该功能类似于虚拟机软件的还原时间点功能。

LVM的快照卷功能有两个特点:

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

① 查看卷组信息

[root@localhost ~]# vgdisplay

image

从输出信息中可看到,卷组中已经使用了292的容量,空闲容量还有19.71GB。

② 向逻辑卷设备所挂载的目录中写入一个文件

[root@localhost ~]# echo "hello linux, hello world" > /localhost/readme.txt

image

③ 使用-s参数生成一个快照卷,使用-L参数指定切割的大小。

[root@localhost ~]# lvcreate -L 292M -s -n SNAP /dev/storage/vo
[root@localhost ~]# lvdisplay  # 查看逻辑卷信息

image

③ 在逻辑卷所挂载的目录中创建一个100MB的垃圾文件,然后再查看快照卷的状态。

[root@localhost ~]# dd if=/dev/zero of=/localhost/files count=1 bs=100M
记录了1+0 的读入
记录了1+0 的写出
104857600字节(105 MB)已复制,0.874405 秒,120 MB/秒

④ 卸载掉逻辑卷设备与目录的挂载,还原快照

[root@localhost ~]# umount /localhost
[root@localhost ~]# lvconvert --merge /dev/storage/SNAP
  Merging of volume storage/SNAP started.
  storage/vo: Merged: 69.04%
  storage/vo: Merged: 100.00%

⑤ 重新挂载逻辑卷,然后查看,快照卷会被自动删除掉,并且刚创建的100M文件也会被清除

[root@localhost ~]# mount -a
[root@localhost ~]# ls /localhost
lost+found  readme.txt

5、删除逻辑卷

执行LVM的删除操作需要提前备份好重要的数据信息,然后依次删除逻辑卷、卷组、物理卷设备,这个顺序不可颠倒。

① 取消逻辑卷与目录的挂载关联,删除配置文件中永久生效的设备参数。

[root@localhost ~]# umount /localhost 
[root@localhost ~]# vim /etc/fstab # 在vim中删除配置

② 删除逻辑卷设备,需要输入y来确认操作

[root@localhost ~]# vim /etc/fstab 
[root@localhost ~]# lvremove /dev/storage/vo 
Do you really want to remove active logical volume storage/vo? [y/n]: y
  Logical volume "vo" successfully removed

③ 删除卷组,此处只写卷组名称即可,不需要设备的绝对路径

[root@localhost ~]# vgremove storage
  Volume group "storage" successfully removed

④ 删除物理卷设备

[root@localhost ~]# pvremove /dev/sdb /dev/sdc
  Labels on physical volume "/dev/sdb" successfully wiped.
  Labels on physical volume "/dev/sdc" successfully wiped.

作业

1、RAID技术主要是为了解决什么问题呢?

答:RAID技术可以解决存储设备的读写速度问题及数据的冗余备份问题。

2、RAID 0和RAID 5哪个更安全?

答:RAID 0没有数据冗余功能,因此RAID 5更安全。

3、假设使用4块硬盘来部署RAID 10方案,外加一块备份盘,最多可以允许几块硬盘同时损坏呢?

答:最多允许5块硬盘设备中的3块设备同时损坏。

4、位于LVM最底层的是物理卷还是卷组?

答:最底层的是物理卷,然后在通过物理卷组成卷组。

5、LVM对逻辑卷的扩容和缩容操作有何异同点呢?

答:扩容和缩容操作都需要先取消逻辑卷与目录的挂载关联;扩容操作是先扩容后检查文件系统完整性,而缩容操作为了保证数据的安全,需要先检查文件系统完整性再缩容。

6、LVM的快照卷能使用几次?

答:只可使用一次,而且使用后即自动删除。

7、LVM的删除顺序是怎么样的?

答:依次移除逻辑卷、卷组和物理卷。

刚学java菜鸡,永劫无间蚀月,王者荣耀王者,金铲铲小铂金,第五人格菜鸡,原神开服玩家,星穹铁道菜鸡,崩坏的菜鸡,闪耀暖暖,和平精英,LOL,CSGO,以及三A大作收集者等等。。。