RAID与逻辑卷
知识点
- 了解RAID组成及软RAID实现
- LVM逻辑卷实现,迁移,删除
1RAID
1. 1 RAID概述
- 什么是RAID
多个磁盘合成一个‘阵列’来提供更好的性能、冗余,或两者都提供 - RAID作用
- 提高IO能力
- 提高耐用性
- RAID实现的方式:
- 外接式磁盘阵列:通过扩展卡提供适配能力
- 内接式RAID:主板集成RAID控制器,安装OS前在BIOS里配置
- 软件RAID:通过OS实现
RAID级别
把多块硬盘逻辑的组合在一起,要求每组磁盘空间相同RAID-0 (条带集)
- 构成: 读、写性能提升,存数据时会将数据分割成n块chunk,N块磁盘并行操作,使同一时间内磁盘读写的速度提升了N倍,最少2块磁盘。
- 缺点: 硬盘较多,出现故障几率变高,坏其中一个坏掉,数据就丢失了,冗余性差
- 应用:对数据安全性要求不高的情况下使用,如图形工作站,数据库从库
- RAID-1
- 构成:也叫磁盘镜像,写入一块磁盘的同时,会在另一块闲置的磁盘上生成镜像文件,在不影响性能情况下最大限度的保证系统的可靠性和可修复性。写入性能不高,读取提升可以,最少2块磁盘。
- 缺点:磁盘利用率为50%
- 应用:保存关键性重要数据,对速度要求不高的场合,如服务器
- RAID-4 带校验位的条带集
与5类似,只是将校验位统一放到其中一个硬盘上,硬盘压力大容易损坏。 RAID-5 (带校验位的条带集)
- 构成:数据分割,均匀分布,每块硬盘都利用异或校验法算出一个校验位,可以通过校验位反算丢失的数据。反算过程会带来性能降级,至少3块才能组成RAID-5,校验位会占用空间。有容错性,但是只能容错1块硬盘。备用一个空闲硬盘(spare disk),如果RAID有一个损坏,自动将空闲的换上。读出效率很高,写入效率一般。
- 缺点:磁盘损坏时,校验位反算修复数据,会带来性能降级,磁盘利用率为(n-1)/n
- 应用:安全性、速度和容量居中,较平衡的场合,如金融,数据库
RAID-6
总算两块硬盘做校验位,最少4块组成,运行最多2块硬盘损坏n-2/n- RAID-10
- 构成:数据除分布在多个盘上外,每个盘都有其物理镜像盘,提供全冗余能力,允许一个以下磁盘故障,而不影响数据可用性,并具有快速读/写能力。RAID0+1要在磁盘镜像中建立带区集至少4个硬盘。写入和读取能力都好。性能与01差不多,容错性比01好
- 缺点:CPU占用率同样也更高,而且磁盘的利用率比较低
- 应用:对安全和性能都有要求的场合,如银行,金融领域
- RAID-01
- 构成:把RAID0和RAID1技术结合起来,数据除分布在多个盘上外,每个盘都有其物理镜像盘,提供全冗余能力,允许一个以下磁盘故障,而不影响数据可用性,并具有快速读/写能力名,RAID0+1要在磁盘镜像中建立带区集至少4个硬盘。
- 缺点:CPU占用率同样也更高,而且磁盘的利用率比较低
- 应用:如视频服务器
- RAID-50
多块磁盘先实现RAID5,再组合成RAID0 - JBOD:just a Bunch Of Disks
功能:将多块磁盘的空间合并一个大的连续空间使用
1.2 软RAID
结合内核中的md(multi devices)
RAID设备可命名为/dev/md0、/dev/md1….
创建RAID1
准备2块容量大小相同的分区,这里以sdb、sdc、sdd、sde为例分区,将sdb磁盘分出5G容量的分区,将分区ID改为fd
$fdisk /dev/sdb Device Boot Start End Blocks Id System /dev/sdb1 2048 10487807 5242880 fd Linux raid autodetect
复制sdb1磁盘分区格式给sdc、sdd、sde
$dd if=/dev/sdb of=/dev/sdc bs=1 count=66 skip=446 seek=446 $dd if=/dev/sdb of=/dev/sdd bs=1 count=66 skip=446 seek=446 $dd if=/dev/sdb of=/dev/sde bs=1 count=66 skip=446 seek=446
创建RAID 0
mdadm –C /dev/mdo -a yes -l0 -n 4 /dev/sd{a,b,d,e}1
ll /dev/sdo 或mdadm -D /dev/md0查看生成的设备
/dev/md0: Version : 1.2 <==版本 Creation Time : Mon Aug 27 20:57:52 2018 <==创建日期 Raid Level : raid0 <==RAID级别 Array Size : 20951040 (19.98 GiB 21.45 GB) <==容量 Raid Devices : 4 <==组成RAID的磁盘数量 Total Devices : 4 <==包括SPARE的总磁盘数 Persistence : Superblock is persistent Update Time : Mon Aug 27 20:57:52 2018 <==运行时长 State : clean <==状态 Active Devices : 4 <==启动的装置数 Working Devices : 4 <==活动的RAID成员 Failed Devices : 0 <==出错的RAID成员 Spare Devices : 0 <==预备的磁盘数量 Chunk Size : 512K <==文件片大小 Consistency Policy : none Name : V9centos7.5:0 (local to host V9centos7.5) <==在那个主机上创建的 UUID : 7555ea43:6c7a7e75:1c439021:b8c0524d Events : 0 Number Major Minor RaidDevice State 0 8 17 0 active sync /dev/sdb1 1 8 33 1 active sync /dev/sdc1 2 8 49 2 active sync /dev/sdd1 3 8 65 3 active sync /dev/sde1
将设备UUID信息存到配置文件中,防止被重启,找不到设备
mdadm –Ds /dev/mdo>/etc/mdadm.conf
创建文件系统
mkfs.xfs /dev/md0
- 写入挂载配置文件/etc/fstab
测试性能dd
$dd if=/dev/zero of=/data/mdo/f1 bs=1M count=1024 conv=fdatasync
删除
取消挂载
$umount /data/mdo/
禁用掉
$mdadm -S /dev/md0
删除保存的配置文件
$rm -f /etc/mdadm.conf
清除超级块
$mdadm - -zero-superblock /dev/sd{b,c,d,e}1
清除文件系统
$dd if=/dev/zero of=/dev/sdb1
创建raid5
这里以sdb1、sdc1、sdd1、sde1及sda7为例创建4个阵列,1个备用(spare disk)
$mdadm -C /dev/md5 -a yes -l5 -n4 -x1 /dev/sd{b,c,d,e}1 /dev/sda7 PS:-n4表示4个磁盘参与raid -x1表示有一个磁盘作为spare disk 参与的磁盘在前,备用磁盘写在后面
查看文件/proc/mdstat可以观察制作过程
存配置文件
$mdadm -Ds /dev/md5 > /etc/mdadm.conf
格式化文件系统
$mkfs.xfs /dev/md5
- 挂载配置文件,激活
创建raid10
- 方法一
- $mdadm -C /dev/md1 -a yes -l1 -n 2 /dev/sd{d,e}1 <==先创建两组raid1
- $mdadm -C /dev/md0 -a yes -l1 -n 2 /dev/sd{b,c}1
- $mdadm -C /dev/md2 -a yes -l10 -n 2 /dev/md{0,1} <==将两组raid1组合进raid10
- 方法二
- $mdadm -C /dev/md10 -a yes -l10 -n 4 /dev/sd{b,c,d,e}1 <==直接创建raid10
- 方法一
1.3 RAID管理工具
- mdadm:模式化的工具 为软RAID提供管理界面
- 格式:mdadm [mode] ‘raiddevice’ [options] ‘component-devices’
- 支持的RAID级别:LINEAR,RAID0,RAID1,RAID4,RAID5,RAID6,RAID10
模式:
- -C:创建
- 参数
n#:使用#个块设备来创建次RAID
-l#:指明要创建的RAID的级别
-a{yes|no}:自动创建目标RAID设备的设备文件
-c CHUNK_SIZE:指明块大小,单位k
-x#:指明空闲盘的个数
- 参数
-D:显示raid的详细信息,长格式为–detail
# mdadm -D /dev/md0
-A:装配预先存在的设备,激活用
#mdadm -A /dev/md0
-S: 停止设备
#mdadm -S /dev/md0
- -G:改变活动数组的大小或类型
-R:强制启动
#mdadm -R /dev/md0
–zero-superblock:删除raid信息
#mdadm --zero-superblock /dev/sdb1
管理模式:
- -f:模拟磁盘为损坏
- -r:移除磁盘
- -a:添加磁盘
- -C:创建
1.4 软RAID测试修复
模拟磁盘故障
$mdadm /dev/md5 -f /dev/sdd1 <==模拟将md5中的sdd1损坏 $mdadm -D /dev/md5 ... <==前面省略 Update Time : Tue Aug 28 09:11:36 2018 State : clean, degraded, recovering <==状态信息增加了,被降级,恢复 Active Devices : 3 <==工作磁盘减少 Working Devices : 4 Failed Devices : 1 <==损坏的数量增加 Spare Devices : 1
移除磁盘
$mdadm /dev/md5 -r /dev/sdd1 <==移除损坏的磁盘sdd1 $mdadm -D /dev/md5 ... <==前面省略 Update Time : Tue Aug 28 09:11:36 2018 State : clean Active Devices : 4 <==spare磁盘自动替换损坏的部分 Working Devices : 4 Failed Devices : 0 <==已移除sdd1 Spare Devices : 0
添加磁盘
使用虚拟机添加一块5G的磁盘,磁盘不需要更换ID,ID是针对分区的$mdadm /dev/md0 -a /dev/sdf <==使用命令添加进RAID中 $mdadm -D /dev/md5 ... <==前面省略 Active Devices : 4 Working Devices : 5 <==总磁盘数增加到5 Failed Devices : 0 Spare Devices : 1 <==新增的磁盘sdf补充在Spare上
1.5 软RAID扩展容量
取一个干净分区,这里使用sdd1
$mdadm --zero-superblock /dev/sdd1 <==清除RAID信息,作为干净分区
增加新的成员
$mdadm -G /dev/md5 -n5 -a /dev/sdd1 模式-G,原RAID为-n4,这里要加一个所以为-n5,-a添加 $mdadm -D /dev/md5 ... <==前面省略 Active Devices : 5 <==组成RAID增加为5 Working Devices : 6 <==总磁盘数增加到6 Failed Devices : 0 Spare Devices : 1 <==新增的磁盘sdf补充在Spare上
- 同步文件系统来生效
增加后容量不会增长,因为没有在RAID整体文件系统中,所以还要同步文件系统
- xfs_growfs /mnt/raid0 (挂载点) xfs文件系统
- resize2fs /dev/md5 (设备名) exf文件系统
2. 逻辑卷管理器(LVM)
逻辑卷管理器是一种把硬盘空间分配成逻辑卷的方法。相比硬盘分区,逻辑卷更容易改变容量
2.1 概述
基本信息
- LVM:Logical Volume Manager,Version:2
- 逻辑卷命名
设备名:/dev/dm-#
解释:dm(device mapper):将一个或多个底层块设备组织成一个逻辑设备的模块 - 逻辑卷搭接
- Linux Block Device :准备块设备,使用分区工具,分区ID为8e,与RAID不同,不要求所有块设备大小相同
- Physical Volumes:使用命令pvcreate将设备指定为物理卷,是用固定大小的物理区域(Physical Extent,PE)来定义的,设备名称不会改变,只是贴个标签
- Volume Group:使用命令vgcreate将一个或者多个物理卷来pv创建为卷组
- Logical Volumes:使用命令lvcreate从VG上分割出LV
- 格式化档案系统后,就可以挂载了
- 优点:
- 允许对卷进行方便操作的抽象层,包括重新设定文件系统的大小
- 允许在多个物理设备间重新组织文件系统
LVM更改文件系统的容量
LVM可以弹性的更改LVM的容量 PE(extend)
通过交换PE来进行资料的转换,将原来LV内的PE转移到其他的设备中以降低LV的容量,或将其他设备中的PE加到LVM中以加大容量
2.2 pv管理工具
- 显示pv信息
- pvs:简要pv信息显示
- pvdisplay :详细信息显示
- 创建pv
pvcreate /dev/DEVICE
2.3 vg管理工具
- 显示卷组
- vgs
- vgdisplay
- 创建卷组
vgcreate [-s #[kKmMgGtTpPeE]] ‘卷组名’ ‘物理卷路径 …’
管理卷组
vgextend VolumeGroupName PhysicalDevicePath [PhysicalDevicePath…]
vgreduce VolumeGroupName PhysicalDevicePath [PhysicalDevicePath…]
删除卷组
先做pvmove,再做vgremove
2.4 lv管理工具
- 显示信息
- lvs
- lvdisplay
- 创建逻辑卷
- lvcreate -L #[mgtMGT] -n NAME VolumeGroup
- lvcreate -l 60%VG -n mylv testvg
- lvcreate -l 100%FRE -n yourlv testvg
- 删除逻辑卷
lvcreate /dev/VG_NAME/LV_NAME - 重设文件系统大小
- xfs系列的只能涨不能缩,ext可以减可以涨
- 增减时要取消挂载,不然会影响用户使用
- fsadm [options] resize device [new_size[BKMGTEP]]
resize2fs [-f] [-F] [-M] [-P] [-p] device [new_size]
2.5 扩展和缩减逻辑卷
- 扩展逻辑卷
- lvextend -L [+]#[mgtMGT] /dev/VG_NAME/LV_NAME
- resize2fs /dev/VG_NAME/LV_NAME
- lvresize -r -l +100%FREE /dev/VG_NAME/LV_NAME
- 缩减逻辑卷
- umount /dev/VG_NAME/LV_NAME
- e2fsck -f dev/VG_NAME/LV_NAME
- resize2fs /dev/VG_NAME/LV_NAME #[mgtMGT]
- lvreduce -L [-]#[mgtMGT] /dev/VG_name/lv_name
- mount
2.6 示例
- 分区,分出准备做逻辑卷的分区,改分区ID为逻辑卷8e,这里以sdb2、sde2和sdf1为例
标记为物理卷
#pvcreate /dev/sde2 /dev/sdf1
创建卷组
PE大小为2的n次方,最小为128k#vgcreate vg0 -s 16M /dev/sde2 /dev/sdf1 卷组名 指定PE大小 物理卷
创建逻辑卷,从vg0分割出1500M作为LV容量
#lvcreate -n lv0 -L 1500M vg0 -l (小写L)按pe数指定大小 -L 按容量大小 -n 命名
创建文件系统
#mkfs.ext4 /dev/vg0/lv0
挂载
#mount /dev/vg0/lv0 /data/lv0
扩展逻辑卷,要求逻辑卷的卷组有空间,增加物理卷到卷组
#pvcreate /dev/sdb2
将物理卷加到卷组中
#vgextend vg0 /dev/sdc
扩展逻辑卷
#lvextend -L 5G /dev/vg0/lv0 5G是扩展到5G,也可以写成+500M,意思是增加多少
- 同步文件系统
- ext4扩展文件系统,resize2fs /dev/vg0/lv0 (设备名)
- xfs扩展文件系统, xfs_growfs /mnt/lv1 (挂载点) 同步文件系统
- lextend -r -L 5G或者+500M /dev/vgo/1vo 加上-r选项不用同步文件系统
缩减ext系列可以,可能造成数据损坏,先备份,不支持在线缩减
#umount /dev/vg0/lv0 #e2fsck -f /dev/vg0/lv0 先检查文件系统,必须步骤 #resize2fs /dev/vg0/lv0 2g 缩减到2G 先缩减文件系统 #lvreduce -L 2G /dev/vg0/1v0 缩减逻辑卷
2.6 迁移逻辑卷示例
需要注意CentOS7向CentOS6迁移时候,文件系统XFS到CentOS6可能不识别
- 更改卷组名称,防止在迁移目标上有同名设备
vgrename vg0 newvg0 - 更改逻辑卷名称
lvrename /dev/newvg0/lv0 newlv0 - 取消挂载
umount /mnt/lv0 - 卷组设置为非活动状态
vgchang2 -an newvg0 - 设置卷组为导出状态
vgexport newvg0 - 将磁盘迁移过去
- 导入
vgimport newvg0 - 激活
vgchang -ay newvg0 - 挂载
2.7 跨主机迁移卷组
- 源计算机上
- 在旧系统中,umount所有卷组上的逻辑卷
- vgchange -a n vg0
lvdisplay - vgexprot vg0
pvscan
vgdisplay
拆下旧硬盘
- 在目标计算机上
- 在新系统中安装旧硬盘,并vgimport vg0
- vgchange -ay vg0
- mount所有卷组上的逻辑卷
3. 逻辑卷管理器快照
3.1概述
- 快照是特殊的逻辑卷,它是在生成快照存在的逻辑卷的准确拷贝
- 对于需要备份或者复制的现有数据临时拷贝以及其他操作来说,快照是最合适的选择
- 在生成快照时会分配给他一定的空间,但只有在原来的逻辑卷或者快照有所改变才会使用这些空间
- 当原来的逻辑卷中有所改变时,会将旧的数据复制到快照中
- 建立快照的卷大小只需要原始逻辑卷的15%~20%就够了,也可以使用lvextend放大快照
- 快照就是将当时的系统信息记录下来,就好像照相一般,若将来有任何数据改动了,则原始数据会被移动到快照区,没有改动的区域则由快照区和文件系统共享
- 由于快照区与原本的LV共用很多PE的区块,因此快照与被快照的LV必须在同一个VG中,系统恢复的时候的文件数量不能高于快照区的实际容量
- 创建逻辑卷快照,必须与原来的逻辑卷快照放在同一个卷组里,所以要考虑空间问题。
- 逻辑卷快照修改文件时,会将旧版本推送到快照区,会带来性能降低问题,一般用于实验情况、
3.2 实验,exf系列快照
为/dev/vg0/lv0做快照
$lvcreate -n lv0-snapshot -s -L 1G /dev/vg0/lv0 -n:命名为lv0-snapshot -s:表示是快照的逻辑卷 -p r :将快照设置为只读 $lvdisplay <==查看逻辑卷信息 --- Logical volume --- LV Path /dev/vg0/lv0 LV Name lv0 VG Name vg0 LV UUID Y6Dnxa-wgto-GDfg-EJyH-3tCw-Hdee-dUHwde LV Write Access read/write LV Creation host, time V9centos7.5, 2018-08-28 14:35:36 +0800 LV snapshot status source of <==多出逻辑卷快照信息 lv0-snapshot [active]
将快照挂载到文件夹上观察
$mkdir lv0-snapshot <==建立文件夹 $mount /dev/vg0/lv0-snapshot /data/lv0-snapshot/ <==可以看到假的文件,其实没有内容 $ll /data/lv0-snapshot/ f1.txt f2.txt f3.txt f4.txt f5.txt
删除/data/vg0/lv0上的f2文件 <==逻辑卷lv0的挂载点
$rm -f /data/vg0/lv0/f2.txt <==删除逻辑卷中的f2文件 $ll /data/lv0-snapshot/ f1.txt f3.txt f4.txt f5.txt $ll /data/lv0-snapshot/ <==查看快照文件目录,f2仍然在 f1.txt f2.txt f3.txt f4.txt f5.txt
恢复 逻辑卷lv0上的数据
$umount /data/lv0-snapshot/ <==快照取消挂载 $umount /data/file <==lv0取消挂载 $lvconvert --merge /dev/vg0/lv0-snapshot <==将快照合并到lv0中 $mount /dev/vg0/lv0 /data/file <==挂载 $ls /data/file f1.txt f2.txt f3.txt f4.txt f5.txt <==数据恢复,同时快照也已经删除
3.3 实验,xfs快照
- lvcreate –n lv1-snapshot -s -L 1G dev/vg0/lv1
- mount -o nouuid /dev/vg0/lv1-snapshot /data/lv1-snapshot
因为快照在xfs中会认为与原来的UUID相同,不能挂载,这里要忽略UUID
3.4 删除快照
取消挂载状态
umount /data/lv1-snapshot
删除快照
lvremove /dev/vg0/lv1-snapshot
3.4 实验,更换磁盘时迁移逻辑卷
- 确保同一个卷组,有足够的可迁移空间,示例迁移sde
将分区内的PE移动到别的物理卷上
pvmove /dev/sde <==迁移sde,目标为卷组的剩余空间,不需要指定
将/dev/sde物理卷从newvg0卷组上移除
vgreduce vg0 /dev/sde
删除物理卷,可以拆除
pvremove /dev/sde
3.5 删除全部逻辑卷
- 取消挂载关系,删除配置文件
取消所有逻辑卷
lvremove /dev/vg0/lv{0,1}
取消卷组
vgremove vg0
删除物理卷
pvremove /dev/sdc /dev/sdd1