RAID10是RAID1+RAID0技术的一个“组合体”,RAID10技术需要至少4块硬盘来组建,其中先分别两两制作成RAID1磁盘阵列,以保证数据的安全性;然后再对两个RAID1磁盘阵列实施RAID0技术,进一步提高硬盘设备的读写速度。
当用户想要随着实际需求的变化调整硬盘分区大小时,会受到硬盘“灵活性”的限制,这时就需要用到另外一项非常普及的硬盘设备资源管理技术了,即LVM(逻辑卷管理器),LVM可以允许用户对硬盘资源进行动态调整。
废话不多说,下面我们就来模拟制作RAID10和LVM吧。

一、部署RAID10+备份盘

首先在虚拟机上添加5块新的虚拟硬盘,然后启动虚拟机。
CentOS7模拟RAID10、LVM逻辑卷管理和磁盘配额
使用fdisk -l命令,确认5块新硬盘是否都已被系统认到。
CentOS7模拟RAID10、LVM逻辑卷管理和磁盘配额
生产环境中用到的服务器一般都配备RAID阵列卡,而我们现在是用mdadm命令在Linux系统中创建和管理软件RAID磁盘阵列,它涉及的理论知识和操作过程与生产环境中的RAID阵列卡是一样的。
表1:mdadm命令的常用参数和作用

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

接下来,使用mdadm命令创建RAID10,名称为“/dev/md0”。
其中-C参数表示创建一个RAID阵列卡,-v显示创建过程,/dev/md0为创建的设备名称,-a yes表示自动创建设备文件,-n 4表示使用4块硬盘,-l 10表示RAID 10方案,-x 1表示有一块备份盘,最后跟上5块硬盘设备的名称。
mdadm -Cv /dev/md0 -a yes -n 4 -l 10 -x 1 /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf
CentOS7模拟RAID10、LVM逻辑卷管理和磁盘配额
查看/dev/md0磁盘阵列的详细信息
mdadm -D /dev/md0
CentOS7模拟RAID10、LVM逻辑卷管理和磁盘配额
创建2个分区,分别为/dev/md0p1和/dev/md0p2
fdisk /dev/md0
CentOS7模拟RAID10、LVM逻辑卷管理和磁盘配额

二、部署LVM逻辑卷

表2:常用的LVM命令

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

1、创建物理卷(PV)
pvcreate /dev/md0p1 /dev/md0p2
CentOS7模拟RAID10、LVM逻辑卷管理和磁盘配额
查看物理卷状态
pvdisplay
CentOS7模拟RAID10、LVM逻辑卷管理和磁盘配额
2、创建卷组(VG)
创建一个名为storage的卷组,并把上面的两个物理卷加入该卷组中。
vgcreate storage /dev/md0p1 /dev/md0p2
CentOS7模拟RAID10、LVM逻辑卷管理和磁盘配额
查看卷组状态
vgdisplay
CentOS7模拟RAID10、LVM逻辑卷管理和磁盘配额
3、创建逻辑卷(LV)
这里我们切割出两个逻辑卷,vo01和vo02,即/dev/storage/vo01和/dev/storage/vo02,大小分别为15G和10G。

lvcreate -n vo01 -L 15G storage
lvcreate -n vo02 -L 10G storage

CentOS7模拟RAID10、LVM逻辑卷管理和磁盘配额
查看逻辑卷状态
lvdisplay
CentOS7模拟RAID10、LVM逻辑卷管理和磁盘配额
把创建好的两个逻辑卷格式化成ext4。

mkfs.ext4 /dev/storage/vo01
mkfs.ext4 /dev/storage/vo02

CentOS7模拟RAID10、LVM逻辑卷管理和磁盘配额
CentOS7模拟RAID10、LVM逻辑卷管理和磁盘配额
创建两个目录,将逻辑卷挂载使用。

mkdir /data1
mkdir /data2
mount /dev/storage/vo01 /data1
mount /dev/storage/vo02 /data2

查看分区情况
df -h
CentOS7模拟RAID10、LVM逻辑卷管理和磁盘配额
写入到/etc/fstab里,开机自动挂载

echo "/dev/storage/vo01 /data1 ext4 defaults 0 0" >> /etc/fstab
echo "/dev/storage/vo02 /data2 ext4 defaults 0 0" >> /etc/fstab

CentOS7模拟RAID10、LVM逻辑卷管理和磁盘配额
4、调整逻辑卷大小,注:调整大小之前一定要先卸载,否则逻辑卷会出问题。
缩小逻辑卷容量步骤:1、卸载(umount),2、检查分区完整性(e2fsck),3、确认分区容量(resize2fs),4、减少分区容量(lvreduce)。
将/dev/storage/vo01减少5G

umount /dev/storage/vo01
umount /dev/storage/vo02
e2fsck -f /dev/storage/vo01
resize2fs /dev/storage/vo01 10G
lvreduce -L -5G /dev/storage/vo01

CentOS7模拟RAID10、LVM逻辑卷管理和磁盘配额
将/dev/storage/vo02增加10G
扩展逻辑卷容量步骤:1、卸载(umount),2、增加分区容量(lvextend),3、检查分区完整性(e2fsck),4、确认分区容量(resize2fs)。

lvextend -L +10G /dev/storage/vo02
e2fsck -f /dev/storage/vo02
resize2fs /dev/storage/vo02

CentOS7模拟RAID10、LVM逻辑卷管理和磁盘配额
重新挂载文件分区

mount /dev/storage/vo01 /data1
mount /dev/storage/vo02 /data2

5、扩展逻辑组容量
前面讲过如何调整逻辑卷容量,可是如果逻辑组的容量不够用了,该如何处理呢,现在我们就来往逻辑组里增加一块硬盘设备。
对于LVM来讲,不管设备是RAID、硬盘还是分区,它不会去管存储设备的底层架构和布局,即然如此,我们就添加一块硬盘来做测试。
首先关闭(shutdown)虚拟机,添加一块新的虚拟硬盘,然后启动虚拟机
CentOS7模拟RAID10、LVM逻辑卷管理和磁盘配额
确认新硬盘已经被系统识别
fdisk -l
CentOS7模拟RAID10、LVM逻辑卷管理和磁盘配额
加入新的物理卷(PV)
pvcreate /dev/sdg
CentOS7模拟RAID10、LVM逻辑卷管理和磁盘配额
把/dev/sdg加入到storage卷组中
vgextend storage /dev/sdg
CentOS7模拟RAID10、LVM逻辑卷管理和磁盘配额
6、制作逻辑卷快照
LVM还具备“快照卷”功能,该功能类似于虚拟机软件的快照功能。例如:可以对某一个逻辑卷设备做一次快照,如果日后发现数据被改错了,就可以利用之前做好的快照卷进行覆盖还原。LVM的快照卷功能有两个特点:
(1)快照卷的容量必须等同于逻辑卷的容量;
(2)快照卷仅一次有效,一旦执行还原操作后则会被立即自动删除。
首先往/dev/data1下写入一个文件
echo "xuad to bad" > /data1/xuad.txt
CentOS7模拟RAID10、LVM逻辑卷管理和磁盘配额
使用-s参数生成一个快照卷,使用-L参数指定要创建快照的逻辑卷大小,-n参数指定快照卷名称,最后跟上逻辑卷的完整路径。
lvcreate -L 10G -s -n LVdata1 /dev/storage/vo01
CentOS7模拟RAID10、LVM逻辑卷管理和磁盘配额
查看快照卷信息
lvdisplay
CentOS7模拟RAID10、LVM逻辑卷管理和磁盘配额
在/dev/data1下创建一个1G的垃圾文件,然后再查看快照卷的状态,发现存储空间占用量上升了。
注:由于创建的文件容量太大,dd命令执行的时间会比较久,请耐心等待。
dd if=/dev/zero of=/data1/files.txt count=1 bs=1G
CentOS7模拟RAID10、LVM逻辑卷管理和磁盘配额
CentOS7模拟RAID10、LVM逻辑卷管理和磁盘配额
通过快照卷对逻辑卷进行还原操作,记得先卸载掉逻辑卷与目录的挂载。

umount /data1
lvconvert --merge /dev/storage/LVdata1

注:由于逻辑卷容量比较大,所以lvconvert命令执行的时间比较久,请耐心等待。
CentOS7模拟RAID10、LVM逻辑卷管理和磁盘配额
还原后快照卷会被自动删除掉,而且刚才创建的1G垃圾文件也被清除了。将/dev/storage/vo01挂载,然后检查检查垃圾文件是否已被清除。
mount /dev/storage/vo01 /data1
CentOS7模拟RAID10、LVM逻辑卷管理和磁盘配额

三、模拟损坏磁盘阵列及修复

将/dev/sdb标记为已损坏,然后查看RAID磁盘阵列的状态,发现备用盘已经自动替换上去并开始同步数据了。

mdadm /dev/md0 -f /dev/sdb
mdadm -D /dev/md0

CentOS7模拟RAID10、LVM逻辑卷管理和磁盘配额
假设我们又新购买了一块硬盘/dev/sdb,现在将新硬盘加入到RAID10磁盘阵列中,首先移除/dev/sdb,然后卸载两个逻辑卷,再然后使用-a参数检测一下就行了,最后别忘记挂载逻辑卷。
mdadm /dev/md0 -r /dev/sdb
发现/dev/sdb设备已经成功移除。
CentOS7模拟RAID10、LVM逻辑卷管理和磁盘配额

umount /data1
umount /data2
mdadm /dev/md0 -a /dev/sdb
mdadm -D /dev/md0

此时/dev/sdb已成为备用盘
CentOS7模拟RAID10、LVM逻辑卷管理和磁盘配额

mount /dev/storage/vo01 /data1
mount /dev/storage/vo02 /data2

CentOS7模拟RAID10、LVM逻辑卷管理和磁盘配额

四、quota磁盘配额

root管理员可以通过磁盘容量配额服务来限制某个用户或某个用户组针对特定目录可以使用的最大容量和最大文件个数,一旦达到这个最大值就不再允许继续使用。可以使用quota命令进行磁盘容量配额管理,从而限制用户的可用容量和所能创建的最大文件个数。quota命令分为软限制和硬限制两个功能。
(1)软限制:当达到软限制时会提示用户,但仍允许用户在限定的额度内继续使用。
(2)硬限制:当达到硬限制时会提示用户,且强制终止用户的操作。
编辑/dev/fstab配置文件,使/data1目录支持quota磁盘配额技术,我们这里对用户进行配额,所以只需要添加usrquota参数即可,而grpquota参数是针对用户组的。
vim /etc/fstab
注:ext文件系统使用的是usrquota和grpquota参数,xfs文件系统使用的是uquota参数。
CentOS7模拟RAID10、LVM逻辑卷管理和磁盘配额
卸载/data1,再重新挂载,给/data1增加其他人的写权限。

umount /data1
mount -a
chmod -Rf o+w /data1

CentOS7模拟RAID10、LVM逻辑卷管理和磁盘配额
在/data1目录下生成quota配置文件

quotacheck -cugm /data1/
ll /data1/ | grep quota

CentOS7模拟RAID10、LVM逻辑卷管理和磁盘配额
启动磁盘配额
quotaon /data1/
设置对用户xuad的磁盘配额限制
edquota -u xuad
注:第一个soft是磁盘容量大小软限制,第一个hard是磁盘容量大小硬限制,单位是KB;第二个soft是文件数量软限制,第二个hard是文件数量硬限制。
设置使用磁盘容量的软限制和硬限制分别是3M和8M,设置文件数量的软限制和硬限制分别是3个和5个。
CentOS7模拟RAID10、LVM逻辑卷管理和磁盘配额
现在切换到xuad用户,然后创建一个5M和10M的文件,进行测试。

su - xuad
dd if=/dev/zero of=/data1/files bs=5M count=1

发现虽然给了警告,但文件依然可以正常创建。
CentOS7模拟RAID10、LVM逻辑卷管理和磁盘配额
dd if=/dev/zero of=/data1/files bs=10M count=1
发现报错了,写入失败,达到了quota的限制,文件大小只有8M。
CentOS7模拟RAID10、LVM逻辑卷管理和磁盘配额
现在删除files文件,再来创建几个正常的文件进行测试
rm -f /data1/files
用touch命令创建文件,发现在创建到第四个文件时给出了警告,在创建第六个文件时给出了报错,第六个文件无法创建。
CentOS7模拟RAID10、LVM逻辑卷管理和磁盘配额