LVM:linux系统中对磁盘管理的一个工具,建立在物理设备上的一个抽象层,优点在于灵活管理。
优点:
1.动态扩容
2.离线裁剪
3.条带化
4.镜像
基本概念:
物理卷(pv):底层真正提供容量的设备,可以时一块硬盘也可以时硬盘的分区
卷组(vg): 卷组是建立在物理卷之上的,由物理卷组成,其大小是该卷组中的物理卷大小之和
逻辑卷(lv):逻辑卷时我们最终使用的东西,是建立在卷组之上,大小是从卷组中切出来的一点空间
物理区域(PE):每一个物理卷被划分成称为PE的最小基本单元,是能被LVM寻址的最小单位,默认是4M
逻辑区域(LE):逻辑卷也被划分为称为LE的最小级别单元,在同一个卷组中,LE和PE是相同的一一对应的
物理的设备-》物理卷(pv)->卷组(vg)->逻辑卷(lv)->格式化lv->挂载使用lv
demo1:
需要一个1.5G的空间来存放业务数据,并且日后可以动态扩容
思路:
1.物理设备
2.物理卷->卷组(>1.5g)->逻辑卷(1.5g)
步骤:
1》、sdb5 sdb6 各1G
2》、创建物理卷
# pvcreate /dev/sdb[56]
# pvs 简单查看
/dev/sdb5 lvm2 a-- 1.01g 1.01g
/dev/sdb6 lvm2 a-- 1.01g 1.01g
# pvdisplay 详细查看
3》、创建卷组
# vgcreate vg01 /dev/sdb[56]
Volume group "vg01" successfully created
# vgs
VG #PV #LV #SN Attr VSize VFree
vg01 2 0 0 wz--n- 2.02g 2.02g
vg_node1 1 2 0 wz--n- 19.51g 0
# vgdisplay
4》、创建逻辑卷
# lvcreate -n lv01 -L 1.5G vg01
Logical volume "lv01" created
-L:指定最终大小
-l:指定pe的个数或者卷组剩余空间的百分比
lvcreate -n lv01 -l %50free vg01
# lvs
LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert
lv01 vg01 -wi-a----- 1.50g
lv_root vg_node1 -wi-ao---- 17.51g
lv_swap vg_node1 -wi-ao---- 2.00g
# lvdisplay
5》.格式化逻辑卷
逻辑卷创建好后会映射到两个地方:
# ll /dev/vg01/lv01
lrwxrwxrwx 1 root root 7 Apr 18 15:08 /dev/vg01/lv01 -> ../dm-2
# ll /dev/mapper/vg01-lv01
lrwxrwxrwx 1 root root 7 Apr 18 15:08 /dev/mapper/vg01-lv01 -> ../dm-2
# mkfs.ext4 /dev/vg01/lv01
6》、挂载使用
# mkdir /u01
# mount /dev/vg01/lv01 /u01
demo2: 动态扩容/u02 目录到3G
情况1: 当逻辑卷所在的卷组的卷组空间不够,需要先扩容卷组
# vgextend vg01 /dev/sdb2
Volume group "vg01" successfully extended
# lvextend /dev/vg01/lv01 -L +1.5G 扩容逻辑卷
# resize2fs /dev/vg01/lv01 同步文件系统
情况2:卷组空间足够
# lvextend /dev/vg01/lv01 -L 3G 扩容逻辑卷
# resize2fs /dev/vg01/lv01 同步文件系统
demo3:离线裁剪
1.备份数据
2. 卸载逻辑卷
# umount /u01
3.裁剪逻辑卷
# e2fsck -f /dev/vg01/lv01
# resize2fs /dev/vg01/lv01 1G
# lvreduce /dev/vg01/lv01 -L 1G
相关命令:
pvcreate
vgcreate
lvcreate
vgextend
lvextend
lvreduce
vgreduce vgname pvname
vgremove vgname
pvremove pvname
lvremove lvname
demo4:逻辑卷实现条带化
条带化:将保存在逻辑卷上的数据,分成n等分分别保存到不同的设备上;
优点:可以提高读写的速度;缺点:一个硬盘损坏,那么数据就损坏
创建前:
# pvs
PV VG Fmt Attr PSize PFree
/dev/sdc1 vg01 lvm2 a-- 2.00g 2.00g
/dev/sdc2 vg01 lvm2 a-- 2.00g 2.00g
创建实现条带化的逻辑卷lv01,大小为2G
# lvcreate -n lv01 -L 2G -i 2 vg01 /dev/sdc[12]
创建后:
# pvs
PV VG Fmt Attr PSize PFree
/dev/sdc1 vg01 lvm2 a-- 2.00g 1.00g
/dev/sdc2 vg01 lvm2 a-- 2.00g 1.00g
测试验证:
# mkfs.ext4 /dev/vg01/lv01
# mount /dev/vg01/lv01 /u01
# iostat -d m 2 /dev/sdc[12]
# cp /iso/xxx /u01
demo5:实现镜像的逻辑卷
镜像:将保存到逻辑卷上的数据复制一份写到另一个设备上,数据的冗余,浪费空间
创建前:
# pvs
PV VG Fmt Attr PSize PFree
/dev/sdc1 vg01 lvm2 a-- 2.00g 1.00g
/dev/sdc2 vg01 lvm2 a-- 2.00g 1.00g
/dev/sdc5 vg02 lvm2 a-- 2.00g 2.00g
/dev/sdc6 vg02 lvm2 a-- 2.00g 2.00g
# lvcreate -n lv02 -L 2G -m 1 vg02 /dev/sdc[56]
# lvs
LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert
lv01 vg01 -wi-ao---- 2.00g
lv02 vg02 mwi-a-m--- 2.00g lv02_mlog 69.92 初始化数据 100%代表完成
创建后:
# pvs
PV VG Fmt Attr PSize PFree
/dev/sdc1 vg01 lvm2 a-- 2.00g 1.00g
/dev/sdc2 vg01 lvm2 a-- 2.00g 1.00g
/dev/sdc5 vg02 lvm2 a-- 2.00g 4.00m
/dev/sdc6 vg02 lvm2 a-- 2.00g 0
测试验证:
mkfs -t ext4 /dev/mapper/vg02-lv02
mkdir /u02
mount /dev/mapper/vg02-lv02 /u02
echo hello888 > /u02/file1
破坏验证:
pvs
dd if=/dev/zero of=/dev/sdc5 bs=1M count=100
pvs
vgreduce vg02 --removemissing --force
umount /u02
mount /dev/vg02/lv02 /u02
cat /u02/file1
硬盘修复好后再次互为镜像:
pvcreate /dev/sdc5
vgextend vg02 /dev/sdc5
pvs
lvconvert -m1 /dev/vg02/lv02 /dev/sdc[56]
课后练习:
1、添加一块新的10g物理硬盘,并将其分2个分区,eg:sdb1和sdb2
2、创建一个大小为2G的逻辑卷lv01挂载到/u01目录下,并且在该目录下创建file1~file5文件
说明:lv01的空间完全来自于sdb1设备
3、假设sdb1分区有坏块,现在需要将sdb1分区上的数据快速放到另一个sdb2分区,怎么做?
pvmove
4、由于业务需要,/u01目录需要扩大到5G,怎么做?
5、新建一个名为vg02的卷组,PE大小为8M,并且在该卷组中创建一个lv02逻辑卷,大小为50个PE,格式化成vfat格式的文件系统类型,并且使用autofs自动挂载到/test目录下
6、给你的虚拟机的/增加10g空间
扩展:
1、测试验证已有逻辑卷的硬盘,从一台服务器换到另一台服务器上面是否可以正常读取到数据?怎么读?
2、测试验证已有互为镜像的逻辑卷硬盘,从一台服务器换到另一台服务器上面是否可以正常读取到数据?怎么读?