RAID磁盘阵列与LVM逻辑卷管理
RAID磁盘冗余阵列
RAID0
RAID0技术是将多块硬盘设备通过硬件或软件的方式串联在一起,实现磁盘I/O速度的提升,但会导致数据的安全性成倍下降。
RAID0的特点:能够有效的提升硬盘数据的吞吐速度,但是不具备数据备份和数据修复能力。
RAID1
RAID1技术是将多块硬盘设备进行绑定,在写入数据时,将数据同时写入到多块硬盘设备上。当其中的某一块硬盘发生故障后,一般以热交换的方式来恢复数据的正常使用。
RAID1的特点:注重数据的安全性,对数据进行冗余备份,但会造成设备的利用率下降。其次,由于要同时将数据写入到多块硬件设备上,会在一定程度上增大系统计算功能的负载。
RAID5
RAID5技术是把硬盘设备的数据奇偶校验信息保存到其他硬盘设备中。下图中parity部分存放的就是数据的奇偶校验信息。
RAID5实际上并没有备份硬盘中的真实数据信息,而是当硬盘设备出现问题后通过奇偶校验信息来尝试重建损坏的数据。
RAID10
RAID 10技术实际上是RAID 1与RAID 0技术的一个 “组合体”。
如图所示: RAID10技术需要至少四块硬盘来组建。其中先两两搭建成RAID1来保证数据的安全性,然后再将两个RAID1组建成为一个RAID0,来提升硬件设备的I/O能力。
RAID10的特点:理论上讲,只要不是同一组RAID1设备损坏,那么该技术可以实现损坏50% 的设备而仍能保证数据的安全性。
部署磁盘阵列
mdadm
mdadm命令用于管理Linux系统中的软件RAID硬盘阵列,格式为“mdadm [模式] <RAID设备名称> [选项] [成员设备名称]”。
mdadm命令的常用参数和作用:
参数 | 作用 |
---|---|
-a |
检测设备名称 |
-n |
指定设备数量 |
-l |
指定RAID级别 |
-C |
创建 |
-v |
显示过程 |
-f |
模拟设备损坏 |
-r |
移除设备 |
-Q |
查看摘要信息 |
-D |
查看详细信息 |
-S |
停止RAID磁盘阵列 |
代码演示: # -C 代表创建一个RAID阵列 -v 显示创建的过程 追加/dev/md0 表示创建后的RAID设备名及路径 # -a yes 代表自动创建设备文件 # -n 4 代表使用4块硬盘来创建RAID # -l 10 代表使用RAID10方案来创建 # 最后追加上用来创建RAID10的四块硬盘设备的名称 [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 20954624K mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started. #创建完成后,将制作好的RAID磁盘阵列格式化为ext4格式。 [root@localhost ~]# mkfs.ext4 /dev/md0 mke2fs 1.42.9 (28-Dec-2013) 省略部分输出内容...... Writing superblocks and filesystem accounting information: done #格式化完成后,创建挂载点,挂载设备。挂载成功后可看到可用空间为40GB。 [root@localhost ~]# mkdir /RAID [root@localhost ~]# mount /dev/md0 /RAID [root@localhost ~]# df -h 省略部分输出内容...... /dev/md0 40G 49M 38G 1% /RAID #操作完成后,查看/dev/md0磁盘阵列的详细信息,并把挂载信息写入到配置文件中,使其永久生效。 [root@localhost ~]# mdadm -D /dev/md0 /dev/md0: 省略部分输出内容...... Number Major Minor RaidDevice State 0 8 16 0 active sync /dev/sdb 1 8 32 1 active sync /dev/sdc 2 8 48 2 active sync /dev/sdd 3 8 64 3 active sync /dev/sde [root@localhost ~]# echo "/dev/md0 /RAID ext4 defaults 0 0" >> /etc/fstab
损坏磁盘阵列及修复
当磁盘阵列中某一块设备出现损坏而不能正常使用后,应当使用mdadm命令将其移除,然后查看RAID设备的运行状态。
代码演示: [root@localhost ~]# mdadm /dev/md0 -f /dev/sdb mdadm: set /dev/sdb faulty in /dev/md0 [root@localhost ~]# mdadm -D /dev/md0 /dev/md0: 省略部分输出内容...... Number Major Minor RaidDevice State 0 0 0 0 removed 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 #提示/dev/sdb设备出现错误 ————————————————
在RAID10阵列中,RAID1中任意一块硬盘出现故障并不会影响整个硬盘阵列的使用,将其更换即可。
#添加新设备前,需将其卸载
[root@localhost ~]# umount /RAID
[root@localhost ~]# mdadm /dev/md0 -a /dev/sdb #重新将/dev/sdb设备添加到RAID中
[root@localhost ~]# mdadm -D /dev/md0
/dev/md0:
省略部分输出内容......
Number Major Minor RaidDevice State
4 8 16 0 active sync /dev/sdb #/dev/sdb设备已恢复正常
1 8 32 1 active sync /dev/sdc
2 8 48 2 active sync /dev/sdd
3 8 64 3 active sync /dev/sde
[root@localhost ~]# mount -a #挂载RAID设备,恢复正常使用
添加备份盘
使用三块硬盘和一块备份盘搭建RAID5,并实现热备。
代码演示:
# -C 创建 -v 显示过程 /dev/md0 创建出的阵列设备名 -n 硬盘数量 -l 创建RAID5 -x 一块备份盘 追加创建所需的设备
[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 20954624K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
#查看创建出的RAID5设备详细信息
[root@localhost ~]# mdadm -D /dev/md0
/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 #/dev/sde为备份盘
#将创建好的设备进行格式化
[root@localhost ~]# mkfs.ext4 /dev/md0
mke2fs 1.42.9 (28-Dec-2013)
省略部分输出内容......
Writing superblocks and filesystem accounting information: done
#挂载
[root@localhost ~]# echo "/dev/md0 /RAID ext4 defaults 0 0" >> /etc/fstab
[root@localhost ~]# mkdir /RAID
[root@localhost ~]# mount -a
#将/dev/sdb设备移除,测试备份盘能否正常使用
[root@localhost ~]# mdadm /dev/md0 -f /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md0
[root@localhost ~]# mdadm -D /dev/md0
/dev/md0:
省略部分输出内容......
Number Major Minor RaidDevice State
3 8 64 0 spare rebuilding /dev/sde #/dev/sde自动顶替,实现热备
1 8 32 1 active sync /dev/sdc
4 8 48 2 active sync /dev/sdd
0 8 16 - faulty /dev/sdb #/dev/sdb设备异常
LVM逻辑卷管理器
LVM技术是在硬盘分区和文件系统之间添加了一个逻辑层,它提供了一个抽象的卷组,可以把多块硬盘进行卷组合并。这样一来,用户不必关心物理硬盘设备的底层架构和布局,就可以实现对硬盘分区的动态调整。LVM的技术架构如图所示。
部署逻辑卷
常用的LVM管理命令:
功能/命令 物理卷管理 卷组管理 逻辑卷管理
扫描 pvscan vgscan lvscan
建立 pvcreate vgcreate lvcreate
显示 pvdisplay vgdisplay lvdisplay
删除 pvremove vgremove lvremove
扩展 vgextend lvextend
缩小 vgreduce lvreduce
代码演示:
#首先将两块硬盘创建为PV物理卷,然后将其创建并添加到VG卷组中,最后创建出一个LV逻辑卷,格式化,挂载。
[root@localhost ~]# pvcreate /dev/sdb /dev/sdc #创建为物理卷
Physical volume "/dev/sdb" successfully created
Physical volume "/dev/sdc" successfully created
[root@localhost ~]# vgcreate storage /dev/sdb /dev/sdc #添加到卷组中
Volume group "storage" successfully created
[root@localhost ~]# vgdisplay storage #显示storage卷组的信息
--- Volume group ---
VG Name storage #VG卷组名
省略部分输出内容......
[root@localhost ~]# lvcreate -n data -L 2G storage #创建一个名为data,大小为2G的逻辑卷
Logical volume "data" created
[root@localhost ~]# lvdisplay #显示所有的逻辑卷信息
--- Logical volume ---
LV Path /dev/storage/data #逻辑卷路径
LV Name data #逻辑卷名称
VG Name storage #所属的VG名称
省略部分输出内容......
#格式化,挂载
[root@localhost ~]# mkfs.ext4 /dev/storage/data
省略输出内容......
[root@localhost ~]# mkdir /data
[root@localhost ~]# mount /dev/storage/data /data
#查看挂载信息
[root@localhost ~]# df -h
省略部分输出内容......
/dev/mapper/storage-data 2.0G 6M 1.8G 1% /data
扩容逻辑卷
为LVM的逻辑卷扩容时,只要该逻辑卷所属的卷组还有空间,就可以对其进行扩容。
注意: 为保证数据安全性,进行相关操作前应先将该设备卸载。
代码演示:
[root@localhost ~]# umount /data
[root@localhost ~]# lvextend -L 3G /dev/storage/data
Size of logical volume storage/data changed from 2.00 GiB (512 extents) to 3.00 GiB (768 extents).
Logical volume storage/data successfully resized.
[root@localhost ~]# e2fsck -f /dev/storage/data
e2fsck 1.42.9 (28-Dec-2013)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/storage/data: 11/131072 files (0.0% non-contiguous), 26156/524288 blocks
[root@localhost ~]# resize2fs /dev/storage/data
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/storage/data to 786432 (4k) blocks.
The filesystem on /dev/storage/data is now 786432 blocks long.
#重新挂载并查看挂载信息
[root@localhost ~]# mount /dev/storage/data /data
[root@localhost ~]# df -h
省略部分输出信息......
/dev/mapper/storage-data 2.9G 6.0M 2.8G 1% /data
缩小逻辑卷
相较于扩容逻辑卷,在对逻辑卷进行缩容操作时,其丢失数据的风险更大。另外Linux系统规定,在对LVM逻辑卷进行缩容操作之前,要先检查文件系统的完整性。同时,进行缩容操作前,需将逻辑卷卸载。
代码演示:
[root@localhost ~]# umount /data
#检查磁盘完整性
[rootlocalhost ~]# e2fsck -f /dev/storage/data
e2fsck 1.42.9 (28-Dec-2013)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/storage/data: 11/196608 files (0.0% non-contiguous), 30268/786432 blocks
#缩小逻辑卷的容量
[rootlocalhost ~]# resize2fs /dev/storage/data 2G
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/storage/data to 524288 (4k) blocks.
The filesystem on /dev/storage/data is now 524288 blocks long.
[rootlocalhost ~]# lvreduce -L 2G /dev/storage/data
WARNING: Reducing active logical volume to 2.00 GiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce storage/data? [y/n]: y
Size of logical volume storage/data changed from 3.00 GiB (768 extents) to 2.00 GiB (512 extents).
Logical volume storage/data successfully resized.
#重新挂载,并查看挂载信息
[rootlocalhost ~]# mount /dev/mapper/storage-data /data
[rootlocalhost ~]# df -h
省略部分输出内容......
/dev/mapper/storage-data 2.0G 6.0M 1.8G 1% /data
逻辑卷快照
LVM还具备有“快照卷”功能,该功能类似于虚拟机软件的还原时间点功能。
LVM的快照卷功能有两个特点:
快照卷的容量必须等同于逻辑卷的容量;
快照卷仅一次有效,一旦执行还原操作后则会被立即自动删除。
代码演示:
#创建出一个名为snap,容量为500M的逻辑卷,格式化为ext4,挂载到/snap
[root@localhost ~]# lvcreate -n snap -L 500M storage
Logical volume "snap" created.
[root@localhost ~]# mkfs.ext4 /dev/storage/snap &> /dev/null
[root@localhost ~]# mkdir /snap
[root@localhost ~]# mount /dev/storage/snap /snap
#在/snap中写入一个测试文件,然后创建出一个snap的快照卷
[root@localhost ~]# ls /snap
lost+found
[root@localhost ~]# echo "Test text" > /snap/test.txt
# -s 代表创建出的是一个快照卷,-n 指定生成快照卷的名称
[root@localhost ~]# lvcreate -s -n SNAP -L 500M /dev/storage/snap
Logical volume "SNAP" created.
#向/snap目录中添加一个垃圾文件
[root@localhost ~]# dd if=/dev/zero of=/snap/trash bs=100M count=2 &> /dev/null
[root@localhost ~]# ls /snap
lost+found test.txt trash
#用SNAP对逻辑卷snap进行恢复
[root@localhost ~]# umount /snap #卸载逻辑卷snap
[root@localhost ~]# lvconvert --merge /dev/storage/SNAP
Merging of volume storage/SNAP started.
storage/snap: Merged: 60.44%
storage/snap: Merged: 100.00%
[root@localhost ~]# mount /dev/storage/snap /snap
[root@localhost ~]# ls /snap #逻辑卷snap已被恢复到快照前
lost+found test.txt
删除逻辑卷
进行删除操作前要清除LV逻辑卷与系统中相关挂载目录的关联,卸载设备及删除 /etc/fstab 中的相关配置。
删除时,要依次删除LV逻辑卷,VG卷组和PV物理卷。
代码演示:
#删除逻辑卷,需输入一次"y"进行确认操作
[root@localhost ~]# lvremove /dev/storage/snap
Do you really want to remove active logical volume storage/snap? [y/n]: y
Logical volume "snap" successfully removed
[root@localhost ~]# lvremove /dev/storage/data
Do you really want to remove active logical volume storage/data? [y/n]: y
Logical volume "data" successfully removed
#删除卷组
[root@localhost ~]# vgremove storage
Volume group "storage" successfully removed
#删除物理卷
[root@localhost ~]# pvremove /dev/xvdc
Labels on physical volume "/dev/xvdc" successfully wiped.
执行完毕后,使用pvdisplay、vgdisplay、lvdisplay就查看不到LVM的相关信息了。
素材来源:https://www.linuxprobe.com/chapter-07.html
from https://blog.csdn.net/weixin_46310295/article/details/106303591