Linux学习(六)使用RAID与LVM磁盘阵列技术

Linux学习(六)使用RAID与LVM磁盘阵列技术

Scroll Down

原文链接:使用RAID与LVM磁盘阵列技术

1. RAID 磁盘阵列

关于磁盘阵列技术的介绍:看这里

mdadm命令用于管理Linux系统中的软件RAID硬盘阵列,常用参数如下:

参数作用
-a检测设备名称
-n指定设备数量
-l指定RAID级别
-C创建
-v显示过程
-f模拟设备损坏
-r移除设备
-Q查看摘要信息
-D查看详细信息
-S停止RAID磁盘阵列

1.1 部署 RAID10 磁盘阵列

raid10 至少需要四块磁盘,我们在虚拟机中添加4块硬盘。
image.png
  接下来,使用mdadm命令创建 RAID10,磁盘阵列名称为“/dev/md0”。其中,-C参数代表创建一个RAID阵列;-v参数显示创建的过程,/dev/md0 本次创建的磁盘阵列名称;-a yes参数代表自动创建设备文件;-n 4参数代表使用4块硬盘来部署这个RAID磁盘阵列;而-l 10参数则代表RAID 10方案;最后再加上4块硬盘设备的名称。

# 创建RAID10阵列
[root@localhost ~]# mdadm -Cv /dev/md0 -a yes -n 4 -l 10 /dev/sd{b,c,d,e}

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

# 创建目录并挂载
[root@localhost ~]# mkdir /RAID
[root@localhost ~]#  mount /dev/md0 /RAID
[root@localhost ~]# df -h

# 查看阵列信息
[root@localhost ~]# mdadm -D /dev/md0

# 挂载信息写入到配置文件
[root@localhost ~]# echo "/dev/md0 /RAID ext4 defaults 0 0" >> /etc/fstab

1.2 损坏磁盘阵列及修复

# 模拟磁盘损坏
[root@localhost ~]# mdadm /dev/md0 -f /dev/sdb

# 查看阵列信息,发现磁盘已经 faulty 坏掉了
[root@localhost ~]# mdadm -D /dev/md0

  在RAID 10级别的磁盘阵列中,当RAID 1磁盘阵列中存在一个故障盘时并不影响RAID 10磁盘阵列的使用。使用mdadm命令替换新的硬盘即可。

# 卸载阵列,因为我们是在虚拟机中模拟的,在这之前需要重启下系统。
[root@localhost ~]# umount /RAID
# 添加新的磁盘
[root@localhost ~]# mdadm /dev/md0 -a /dev/sdb

1.3 部署 RAID5 磁盘阵列+备份盘

  RAID 10磁盘阵列中最多允许50%的硬盘设备发生故障,若同一RAID 1磁盘阵列中的硬盘设备若全部损坏,会导致数据丢失。可以使用RAID备份盘技术来预防这类事故。该技术的核心理念就是准备一块足够大的硬盘,这块硬盘平时处于闲置状态,一旦RAID磁盘阵列中有硬盘出现故障后则会马上自动顶替上去。
  现在创建一个RAID5磁盘阵列+备份盘。在下面的命令中,参数-n 3代表创建这个RAID 5磁盘阵列所需的硬盘数,参数-l 5代表RAID的级别,而参数-x 1则代表有一块备份盘。

# 创建RAID5磁盘阵列+1个备份盘
[root@localhost ~]# mdadm -Cv /dev/md0 -n 3 -l 5 -x 1 /dev/sd{b,c,d,e}
# 查看阵列
[root@localhost ~]# mdadm -D /dev/md0
# 格式化
[root@localhost ~]# mkfs.ext4 /dev/md0
# 挂载
[root@localhost ~]#  echo "/dev/md0 /RAID ext4 defaults 0 0" >> /etc/fstab
[root@localhost ~]# mkdir /RAID
[root@localhost ~]# mount /dev/md0 /RAID/

再次模拟磁盘损坏,然后迅速查看/dev/md0磁盘阵列的状态,就会发现备份盘已经被自动顶替上去并开始了数据同步。

# 模拟磁盘损坏
[root@localhost ~]# mdadm /dev/md0 -f /dev/sdb

# 查看阵列
[root@localhost ~]# mdadm -D /dev/md0

2. LVM 逻辑卷管理器

  逻辑卷管理器是Linux系统用于对硬盘分区进行管理的一种机制,为了解决硬盘设备在创建分区后不易修改分区大小的缺陷。尽管对传统的硬盘分区进行强制扩容或缩容从理论上讲是可行的。但是却可能造成数据的丢失。LVM技术是在硬盘分区和文件系统之间添加了一个逻辑层,它提供了一个抽象的卷组,可以把多块硬盘进行卷组合并。这样一来,用户不必关心物理设备和底层架构和布局,就可以实现对硬盘分区的动态调整。
image.png
  物理卷处于LVM中的最底层,可以将其理解为物理硬盘、硬盘分区或者RAID磁盘阵列。卷组建立在物理卷之上,一个卷组可以包含多个物理卷。逻辑卷是用卷组中空闲的资源建立的,并且逻辑卷在建立后可以动态地扩展或缩小空间。这就是LVM的核心理念。

2.1 部署逻辑卷

常用的LVM部署命令

功能/命令物理卷管理卷组管理逻辑卷管理
扫描pvscanvgscanlvscan
建立pvcreatevgcreatelvcreate
显示pvdisplayvgdisplaylvdisplay
删除pvremovevgremovelvremove
扩展vgextendlvextend
缩小vgreducelvreduce

  在虚拟机中添加两块新硬盘,我们先对这两块新硬盘进行创建物理卷的操作,然后对这两块硬盘进行卷组合并。接下来,把合并后的卷组切割出一个约为150MB的逻辑卷设备,最后把这个逻辑卷设备格式化成EXT4文件系统后挂载使用。

# 1. 建立物理卷,然设备支持LVM
[root@localhost ~]# pvcreate /dev/sdb /dev/sdc 
 Physical volume "/dev/sdb" successfully created.
 Physical volume "/dev/sdc" successfully created.

# 2. 把两块硬盘加入到storage 卷组中
[root@localhost ~]# vgcreate storage /dev/sdb /dev/sdc 
  Volume group "storage" successfully created

# 然后查看卷组的状态。
[root@localhost ~]# vgdisplay storage
 ···

# 3. 创建一个名为 testvo 的逻辑卷,对逻辑卷进行切割时有两种计量单位。
# 参数-L,以容量为单位例,如 -L 150M 表示大小为 150MB。
# 参数-l,每个基本单元的大小默认为4MB。如,如 -l 37 表示大小为37×4MB=148MB。
[root@localhost ~]# lvcreate -n testvo -l 37 storage
  Logical volume "testvo" created.
# 查看逻辑卷
[root@localhost ~]# lvdisplay 
 ···

# 4. 格式化并挂载(逻辑卷设备存放在/dev设备目录中,/dev/卷组名称/逻辑卷名称)。)
[root@localhost ~]# mkfs.ext4 /dev/storage/testvo 
 ···
# 创建挂载点目录
[root@localhost ~]# mkdir /testvo
# 挂载
[root@localhost ~]# mount /dev/storage/testvo /testvo

# 查看挂载状态
[root@localhost ~]# df -h /testvo

# 5. 挂载写入到配置文件,使其永久生效。
[root@localhost ~]# echo "/dev/storage/testvo /testvo ext4 defaults 0 0" >> /etc/fstab

2.2 扩容逻辑卷

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

# 卸载
[root@localhost ~]# umount /testvo/

# 把上一步中的逻辑卷扩展至290MB。
[root@localhost ~]# lvextend -L 290M /dev/storage/testvo 
 ···

# 检查硬盘完整性
[root@localhost ~]# e2fsck -f /dev/storage/testvo 

# 重置硬盘容量
[root@localhost ~]# resize2fs /dev/storage/testvo 
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/storage/testvo to 299008 (1k) blocks.
The filesystem on /dev/storage/testvo is now 299008 blocks long.

# 重新挂载硬盘设备并查看挂载状态。
[root@localhost ~]# mount /dev/storage/testvo /testvo/
[root@localhost ~]# df -h /testvo/

2.3 缩小逻辑卷

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

# 把文件系统卸载掉
[root@localhost ~]# umount /testvo

# 检查文件系统的完整性
[root@localhost ~]# e2fsck -f /dev/storage/testvo 

# 把逻辑卷vo的容量减小到120MB
[root@localhost ~]# resize2fs /dev/storage/testvo 120M

# 重新挂载文件系统并查看系统状态。
[root@localhost ~]# mount /dev/storage/testvo /testvo
[root@localhost ~]# df -h /testvo/

2.4 逻辑卷快照

  LVM还具备有“快照卷”功能。例如,可以对某一个逻辑卷设备做一次快照,如果日后发现数据被改错了,就可以利用之前做好的快照卷进行覆盖还原。LVM的快照卷功能有两个特点:

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


# 首先查看卷组的信息(卷组中已经使用了120MB的容量,空闲容量还有39.88GB)
[root@localhost ~]# vgdisplay 
 ...

# 往逻辑卷设备所挂载的目录中写入一个文件
[root@localhost ~]# echo "test" > /testvo/readme.txt
[root@localhost ~]# stat /testvo/readme.txt 

# 使用-s参数生成一个快照卷,还需要在命令后面写上是针对哪个逻辑卷执行的快照操作
[root@localhost ~]# lvcreate -L 120M -s -n SNAP /dev/storage/testvo 
[root@localhost ~]# lvdisplay 

# 创建一个100MB的垃圾文件,然后再查看快照卷的状态。可以发现存储空间占的用量上升了。
[root@localhost ~]# dd if=/dev/zero of=/testvo/files count=1 bs=100M
[root@localhost ~]# lvdisplay 

# 快照还原操作。先卸载掉逻辑卷。
[root@localhost ~]# umount /testvo/
[root@localhost ~]# lvconvert --merge /dev/storage/SNAP

# 快照卷会被自动删除掉,并且刚刚在逻辑卷设备被执行快照操作后再创建出来的100MB的垃圾文件也被清除了。
[root@localhost ~]# mount /dev/storage/testvo 
[root@localhost ~]# ll /testvo/

2.5 删除逻辑卷

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

# 卸载掉逻辑卷
[root@localhost /]# umount /testvo/

# 删除配置文件中永久挂载信息
[root@localhost /]# vim /etc/fstab 

# 删除逻辑卷设备,需要输入y来确认操作
[root@localhost /]# lvremove /dev/storage/testvo 

# 删除卷组,此处只写卷组名称即可,不需要设备的绝对路径
[root@localhost /]# vgremove storage

# 删除物理卷设备
[root@localhost /]# pvremove /dev/sdb /dev/sdc