一、LVM基本术语
1、 物理卷(PV)
是由物理分区创建而成,使用命令 pvcreate 分区名
物理卷是组成卷组的单位
2、 卷组(VG)
由多个物理卷组成,使用命令 vgcreate 物理卷名
卷组可以理解为一块逻辑意义上的磁盘,提供给逻辑卷使用
3、 逻辑卷(LV)
类似与物理分区,提供分区的磁盘是卷组,创建逻辑卷
lvcreate [-L 1size ] -n LVNAME VGNAME
逻辑卷创建好后,就可以进行创建文件系统,并挂在使用了
4、 物理块(PE)
是物理分区的最小寻址单位,默认大小是4MB
5、 逻辑块(LE)
是逻辑卷的最小寻址单位,默认大小是4MB
二、建立LVM卷
#我这里使用的是虚拟机进行操作,增加一块硬盘,进行实验
使用fdisk -l 查看新的磁盘
1、 创建3个分区
fdisk /dev/sdb
n 创建分区
p 创建主分区 (1-3为主分区,4为扩展分区)
#first sector默认,last sector为 +200M 代表第一个分区200M
t 将分区类型改为8e
#使用 P 查看分区情况
#按之前的操作,创建分区2和3 第三个最后的大小不用写,默认剩下的都会给最后的分区
wq 保存退出
2、 创建物理卷
pvcreate /dev/sdb[1-3]
#使用pvs查看物理卷情况
3、 创建卷组vg0,将物理卷都加入到vg0中
#使用vgs查看卷组情况
#可以看到现在卷组由3个物理卷
4、 创建3个逻辑分区,lv0 lv1 lv2,并将它们挂载到/data/lv0 /data/lv1 /data/lv2
创建逻辑卷
命令 : lvcreate [ -L SIZE ] -n LVNAME VGNAME
lvcreate -L 200M -n lv0 vg0
lvcreate -L 200M -n lv1 vg0
#在创建第3个逻辑卷时,发现卷组可用空间不足200M
#所以指定第三个逻辑卷lv2的大小为188M
lvcreate -L 188M -n lv2 vg0
#查看逻辑卷
lvs
2)为逻辑卷创建文件系统ext4
#逻辑卷文件在/dev/vg0 下面 使用 ll 查看一下
#创建文件系统 命令: mkfs
mkfs.ext4 /dev/vg0/lv0
mkfs.ext4 /dev/vg0/lv1
mkfs.ext4 /dev/vg0/lv2
3)将逻辑卷分别挂载到/data/lv0 /data/lv1 /data/lv2
#创建/data/lv0 /data/lv1 /data/lv2 文件
mkdir -p /data/lv0 /data/lv1 /data/lv2
#进行挂载
mount /dev/vg0/lv0 /data/lv0
mount /dev/vg0/lv1 /data/lv1
mount /dev/vg0/lv2 /data/lv2
#使用df -h 查看是否挂载上
#分别在 /data/lv0 /data/lv1 /data/lv2 创建文件,查看是否可以正常使用
#lvm到这里就创建成功了
三、管理LVM
#lvm的管理大概就是这些东西了
#查看卷的信息就不看了,直接来实验一下扩容缩容
1、 卷组进行扩容和缩容
1)扩容
#假设新加入了一块磁盘需要加入到lvm卷组中
#将/dev/sdc进行分区,并创建物理卷,然后加入已有卷组
fdisk /dev/sdc
n
p
1
t
8e
P
wq
#将新的分区创建为物理卷
#查看物理卷
pvs
#可以看出/dev/sdc1现在已经是物理卷了
查看卷组
#现已有的卷组为vg0
#将物理卷/dev/sdc1加入到卷组vg0实现卷组扩容
vgextend vg0 /dev/sdc1
#查看/dev/sdc1是否加入到了卷组
pvs
#使用vgs查看卷组是否扩容了
#可以看出vg0卷组已经被扩容了
2)缩容
#所有就是将vg0中的物理卷卸载掉,这个物理卷必须是没有被使用
vgreduce vg0 /dev/sdc1
#查看物理卷情况
pvs
#可以看出物理卷/dev/sdc1已经被移除了vg0卷组
#在来看下卷组
vgs
#可以看出卷组多余的空间已经没有了
2、 逻辑卷进行扩容和缩容
1) 扩容
#先放大lv 在放大文件系统
#ext4文件系统使用resize2fs来调整缩容和缩容
#xfs系统通过 xfs_growfs /dev/mapper/cl-root (设备路径) 来进行扩容,无法缩容
#逻辑卷扩容的前提是卷组中必须由多余的空闲空间
vgs
#如何卷组没有空间需要加入新的物理卷到卷组,这里不在演示了
#命令格式
lvextend -L SIZE LV_DEVICE #扩容到一个固定值
lvextend -L +SIZE LV_DEVICE #增加多少空间
#查看逻辑卷情况
lvs
将逻辑卷lv0扩容200M,设备所在的位置在/dev/vg0/lv0
! 在进行扩容前最好对文件系统进行备份,以免误操作导致,导致文件丢失
lvextend -L 400M /dev/vg0/lv0 或者 lvextend -L +200M /dev/vg0/lv0
#查看一下逻辑卷情况
#可以看到逻辑卷已经被扩大了
#再来扩大文件系统(扩大文件系统时可以在已挂载的情况下进行)
resize2fs -p /dev/vg0/lv0
#使用df -h来查看一下文件系统是否被扩容
#可以看出已经从200M变成400M了
2) 缩容
#缩容时,文件系统容量必须大于现在的占有量
#命令格式
lvreduce -L SIZE LV_DEVICE #缩容到一个固定值
lvreduce -L -SIZE LV_DEVICE #缩容多少空间
#将lv1缩容200M
!缩容前最好配分一下文件系统,以免误操作,导致文件丢失
!缩容前需要卸载文件lv的文件系统
umount /data/lv0
fsck -f /dev/vg0/lv0
resize2fs -p /dev/vg0/lv0 200M #缩小文件系统
lvreduce -L -200M /dev/vg0/lv0 #缩小逻辑卷
mount /dev/vg0/lv0 /data/lv0 #挂载文件系统
df -h #查看是否缩容
#可以已经缩容了200M了
四、LVM高级应用
1、卷快照
#为lv卷做一个快照,保存当时状态(只支持逻辑卷)
命令:lvcreate -n LVNAME -s -L SIZE LVDEVICE #快照的大小取原来lv的15%-20%
#可以配合上面的扩容缩容进行备份
#查看lv的情况
lvs
#进入lv0的挂载点,给lv0创建5个文件
for i in {1..5};do touch $i;done
#为lv0创建一个快照,保留当前状态,快照名为lv0-snap
lvcreate -n lvo-snap -s -L 40M /dev/vg0/lv0 #快照大小取原lv卷的15%-20%
#lvs查看lv情况
#挂载lvo-snap 并查看文件
首先先创建挂载点,在挂载
mkdir -p /data/lvo-snap
mount /dev/vg0/lvo-snap /data/lvo-snap
#可以看到,快照内的文件和lv卷的一样,这个快照功能可以起到很好的备份功能(当然是在vg容量够的情况下)
#当快照不需要时可以进行卸载,前提升快照不能被挂载
命令: lvremove LVDEVICE
umount /data/lvo-snap #卸载lv0快照的挂载点,不能在/data/lvo-snap里面卸载
lvremove /dev/vg0/lvo-snap #卸载lv-snap快照
lvs查看
发现快照已经被卸载了
3、 移动卷
#假如某个物理卷代表的分区即将损坏或者需要更快的磁盘来代替旧的磁盘时,需要将旧的物理卷的数据转移到另一个容量较大的物理卷中
#查看物理卷情况
pvs
#假如/dev/sdb1即将损坏,现在要将/dev/sdb1的数据转移到/dev/sdc1中
#需要先做好备份
命令:pvmove [OPTIONS] [SOURCE] [DESTINATION]
pvs
可以看出/dev/sdb1已经没有被使用
#从卷组中卸载物理卷
命令:vgreduce VGNAME PVNAME
vgreduce vg0 /dev/sdb1
#物理卷/dev/sdb1已经脱离了vg0卷组了
#删除物理卷
命令:pvremove PVNAME
pvremove /dev/sdb1
#可以看到已经成功被删除了
五、删除所有LV,pV,VG,还原分区
1、卸载所有逻辑卷
lvs #查看所有的逻辑卷
#卸载所有挂载点
umount /data/lv[0-2]
#删除所有逻辑卷
lvremove /dev/vg0/lv[0-2]
#可以看到逻辑卷已经被删除了
2、删除所有的物理卷
#卸载物理卷,先把物理卷从vg中移除,在lvm中删除
#查看物理卷
pvs
#将所有物理卷移除vg0卷组
vgreduce vg0 /dev/sda2 /dev/sdb[23] /dev/sdc1
#最后保留了一个物理卷(估计是无法全部移除卷组)
#将所有物理卷删除
pvremove /dev/sda2 /dev/sdb[23]
pvremove --force --force /dev/sdc1 #由与/dev/sdc1没有被移出卷组,就强制删除它
#查看物理卷
pvs
#之前创建的物理卷已经不在了
#查看卷组
vgs
#物理卷被删除了卷组就自动消失了
4、 还原分区
#查看磁盘和分区情况
fdisk -l
#我们之前实验用的是sdb和sdc这两块磁盘,分区都被设置为LVM了,所有需要先分区删除,在重新创建分区
fdisk /dev/sdb
d
1
d
2
d
3
P
wq
#还有一个LVM分区也一样删掉