从零开始的Linux学习:2020.5.17-第九天
2020.5.17-第九天
RAID与LVM磁盘阵列技术
碎碎念:一旦没有预习,基本就跟不上节奏了,一边看一边做一边举一反三,还真的难度。
一、RAID磁盘冗余阵列
RAID技术通过把多个硬盘设备组合成一个容量更大、安全性更好的磁盘阵列,并把数据切割成多个区段后分别存放在各个不同的物理硬盘设备上,然后利用分散读写技术来提升磁盘阵列整体的性能,同时把多个重要数据的副本同步到不同的物理硬盘设备上,从而起到了非常好的数据冗余备份效果。不过相应的,采购硬盘设备的费用支出也会跟着提高。
目前已有的RAID磁盘阵列的方案至少有十几种,常见的有RAID 0、RAID 1、RAID5与RAID 10这4种情况:
1.RAID 0技术把多块物理硬盘设备(至少两块)通过硬件或软件的方式串联在一起,组成一个大的卷组,并将数据依次写入到各个物理硬盘中。这样一来,在最理想的状态下,硬盘设备的读写性能会提升数倍,但是若任意一块硬盘发生故障将导致整个系统的数据都受到破坏。通俗来说,RAID 0技术能够有效地提升硬盘数据的吞吐速度,但是不具备数据备份和错误修复能力。
数据被分别写入到不同的硬盘设备中,即disk1和disk2硬盘设备会分别保存数据资料,最终实现提升读取、写入速度的效果。
2.RAID 1是把两块以上的硬盘设备进行绑定,在写入数据时,是将数据同时写入到多块硬盘设备上(可以将其视为数据的镜像或备份)。当其中某一块硬盘发生故障后,一般会立即自动以热交换的方式来恢复数据的正常使用。
RAID 1技术虽然十分注重数据的安全性,但是因为是在多块硬盘设备中写入了相同的数据,因此硬盘设备的利用率得以下降,从理论上来说,上图所示的硬盘空间的真实可用率只有50%,由三块硬盘设备组成的RAID 1磁盘阵列的可用率只有33%左右,以此类推。而且,由于需要把数据同时写入到两块以上的硬盘设备,这无疑也在一定程度上增大了系统计算功能的负载。
3.RAID 5技术是把硬盘设备的数据奇偶校验信息保存到其他硬盘设备中。RAID 5磁盘阵列组中数据的奇偶校验信息并不是单独保存到某一块硬盘设备中,而是存储到除自身以外的其他每一块硬盘设备上,这样的好处是其中任何一设备损坏后不至于出现致命缺陷;下图中parity部分存放的就是数据的奇偶校验信息,换句话说,就是RAID 5技术实际上没有备份硬盘中的真实数据信息,而是当硬盘设备出现问题后通过奇偶校验信息来尝试重建损坏的数据。RAID这样的技术特性“妥协”地兼顾了硬盘设备的读写速度、数据安全性与存储成本问题。
4.RAID 10是RAID 1+RAID 0技术的一个“组合体”。RAID 10技术需要至少4块硬盘来组建,其中先分别两两制作成RAID 1磁盘阵列,以保证数据的安全性;然后再对两个RAID 1磁盘阵列实施RAID 0技术,进一步提高硬盘设备的读写速度。这样从理论上来讲,只要坏的不是同一组中的所有硬盘,那么最多可以损坏50%的硬盘设备而不丢失数据。由于RAID 10技术继承了RAID 0的高读写速度和RAID 1的数据安全性,在不考虑成本的情况下RAID 10的性能都超过了RAID 5,因此当前成为广泛使用的一种存储技术。
1.部署磁盘阵列
mdadm命令用于管理Linux系统中的软件RAID硬盘阵列,格式为“mdadm [模式] <RAID设备名称> [选项] [成员设备名称]”:
-C参数代表创建一个RAID阵列卡;
-v参数显示创建的过程,同时在后面追加一个设备名称/dev/md0,这样/dev/md0就是创建后的RAID磁盘阵列的名称;
-a yes参数代表自动创建设备文件;
-n 4参数代表使用4块硬盘来部署这个RAID磁盘阵列;
而-l 10参数则代表RAID 10方案;
最后加上硬盘设备名称即可。
( mdadm: cannot open device /dev/sdb1: Device or resource busy
这个通常是因为/dev/sdb1已经被挂载到了某个目录下,解决的方法是:
umount /dev/sdb1
一定要检查需要做RAID的硬盘设备是否有挂载在目录上)
其次,把制作好的RAID磁盘阵列格式化为ext4格式:
然后,创建挂载点然后把硬盘设备进行挂载操作:
最后,查看/dev/md0磁盘阵列的详细信息,并把挂载信息写入到配置文件中,使其永久生效:
2.损坏磁盘阵列及修复
(使用虚拟机的时候,可在开机状态下直接移除硬盘设备)
出现硬盘损坏的情况,应当先关闭机器,再去更换故障硬盘:
首先先卸载掉磁盘阵列的挂载,其次添加上缺失的一个硬盘:
3. 磁盘阵列+备份盘(除开RAID 0以外的任何级别都可以使用)
参数“-x”代表设置多少块备份盘;
进行格式化操作:
物理移除除系统盘及备份盘以外的盘,再去查看信息,且原有数据不会丢失:
(mdadm RAID名 -a 新添加的硬盘设备,记得先卸载RAID)
二、LVM逻辑卷管理器
LVM可以允许用户对硬盘资源进行动态调整。LVM技术是在硬盘分区和文件系统之间添加了一个逻辑层,它提供了一个抽象的卷组,可以把多块硬盘进行卷组合并。这样一来,用户不必关心物理硬盘设备的底层架构和布局,就可以实现对硬盘分区的动态调整:
物理卷处于LVM中的最底层,可以将其理解为物理硬盘、硬盘分区或者RAID磁盘阵列,这都可以。卷组建立在物理卷之上,一个卷组可以包含多个物理卷,而且在卷组创建之后也可以继续向其中添加新的物理卷。逻辑卷是用卷组中空闲的资源建立的,并且逻辑卷在建立后可以动态地扩展或缩小空间。这是LVM的核心观念。
1. 部署逻辑卷:
一般而言,在生产环境中无法精确地评估每个硬盘分区在日后的使用情况,因此会导致原先分配的硬盘分区不够用。比如,伴随着业务量的增加,用于存放交易记录的数据库目录的体积也随之增加;因为分析并记录用户的行为从而导致日志目录的体积不断变大,这些都会导致原有的硬盘分区在使用上捉襟见肘。而且,还存在对较大的硬盘分区进行精简缩容的情况。
第1步:让新添加的两块硬盘设备支持LVM技术:
第2步:把两块硬盘设备加入到“oshino”卷组(卷组名随意)中,然后查看卷组的状态:
第3步:切割出一个约为150MB的逻辑卷设备:
在对逻辑卷进行切割时有两种计量单位:
1.是以容量为单位,所使用的参数为-L。例如,使用-L 150M生成一个大小为150MB的逻辑卷;
2.是以基本单元的个数为单位,所使用的参数为-l。每个基本单元的大小默认为4MB。
(小写“-l”指定的是pe的个数,大写“-L”指定所需大小)
因为默认是4的倍数,所以指定容量的时候,会时大时小;
第4步:把生成好的逻辑卷进行格式化,然后挂载使用。
Linux系统会把LVM中的逻辑卷设备存放在/dev设备目录中(实际上是做了一个符号链接),同时会以卷组的名称来建立一个目录,其中保存了逻辑卷的设备映射文件(即/dev/卷组名称/逻辑卷名称):
注意一点:xfs有自己的LVM命令,且xfs格式不支持缩小。
第5步:查看挂载状态,并写入到配置文件,使其永久生效:
2.扩容逻辑卷
用户在使用存储设备时感知不到设备底层的架构和布局,更不用关心底层是由多少块硬盘组成的,只要卷组中有足够的资源,就可以一直为逻辑卷扩容。扩展前请一定要记得卸载设备和挂载点的关联:
第1步:把上一个实验中的逻辑卷vo扩展至290MB:
第2步:检查硬盘完整性,并重置硬盘容量:
检查数据是否有丢失(有个1%左右的不打紧),然后还要通知系统内核信息变更。
第3步:重新挂载硬盘设备并查看挂载状态:
3.缩小逻辑卷
相较于扩容逻辑卷,在对逻辑卷进行缩容操作时,其丢失数据的风险更大。所以在生产环境中执行相应操作时,一定要提前备份好数据。另外Linux系统规定,在对LVM逻辑卷进行缩容操作之前,要先检查文件系统的完整性(当然这也是为了保证我们的数据安全)。在执行缩容操作前记得先把文件系统卸载掉:
第1步:检查文件系统的完整性:
第2步:首先重置逻辑卷容量(通知系统内核),确定是否能进行缩小操作,再把逻辑卷的容量减小到130MB:
第3步:重新挂载文件系统并查看系统状态:
4.逻辑卷快照
LVM还具备有“快照卷”功能,该功能类似于虚拟机软件的还原时间点功能。例如,可以对某一个逻辑卷设备做一次快照,如果日后发现数据被改错了,就可以利用之前做好的快照卷进行覆盖还原。
LVM的快照卷功能有两个特点:
a.快照卷的容量必须等同于逻辑卷的容量;
b.快照卷仅一次有效,一旦执行还原操作后则会被立即自动删除。
第1步:使用-s参数生成一个快照卷,使用-L参数指定切割的大小。另外,还需要在命令后面写上是针对哪个逻辑卷执行的快照操作:
第2步:在逻辑卷所挂载的目录中创建一个100MB的垃圾文件,然后再查看快照卷的状态。可以发现存储空间占的用量上升了:
第3步:为了校验SNAP快照卷的效果,需要对逻辑卷进行快照还原操作(不需要指定文件)。在此之前记得先卸载掉逻辑卷设备与目录的挂载:
第4步:快照卷会被自动删除掉,并且刚刚在逻辑卷设备被执行快照操作后再创建出来的100MB的垃圾文件也被清除了:
5.删除逻辑卷
当生产环境中想要重新部署LVM或者不再需要使用LVM时,则需要执行LVM的删除操作。为此,需要提前备份好重要的数据信息,然后依次删除逻辑卷、卷组、物理卷设备,这个顺序不可颠倒。
第1步:取消逻辑卷与目录的挂载关联,删除配置文件中永久生效的设备参数:
第2步:删除逻辑卷设备,需要输入y来确认操作:
第3步:删除卷组,此处只写卷组名称即可,不需要设备的绝对路径(加上可能会好点):
第4步:删除物理卷设备: