LVM逻辑卷管理
LVM是Logical Volume Manager
的缩写,中文逻辑卷管理,LVM是建立在磁盘分区和文件系统之间的一个逻辑层,LVM会更加灵活,可以动态扩容缩容分区大小。调整分区大小有风险,请做好充分测试再决定是否执行。
如果没有启用lvm
,请查看linux磁盘扩容 - 非LVM
那么怎么知道机器有没有启用LVM呢,可以执行sudo lvdisplay
查看有没有已存在的LV,对比df -hT
里面的Filesystem
,也可以用lsblk
查看有没有lvm。
LVM 的一些概念
PV: 物理卷,比如一个分区,一个磁盘
VG: 卷组,将多个PV整合在一起,形成一个大的池子
LV: 逻辑卷,从VG划分出来一个个空间,可以当作分区来看待,可以格式化,可以挂载
常用命令
查看 | 扩展 | 创建 |
---|---|---|
vgdisplay(vgs) | vgextend | vgcreate |
lvdisplay(lvs) | lvextend | lvcreate |
pvdisplay(pvs) | – | pvcreate |
扩容文件系统
物理扩容
虚拟机扩容就是扩容虚拟磁盘,物理机扩容比如可以增加硬盘。
新增硬盘,只能创建新的PV
创建新分区
1 | [root@centos7 ~]# fdisk /dev/sdb |
这里有个疑问,如果不设置分区ID为
8e
,也不影响后续操作,但是fdisk -l /dev/sda
的时候,查看到的新分区Type为Linux,而不是Linux LVM,不知道这两种有什么不同,知道的大佬麻烦告诉我一下。。
创建pv
1 | pvcreate /dev/vdb1 |
添加PV到VG
1 | vgextend vg1 /dev/vdb1 |
添加完成
sudo vgdisplay
可以看到Free PE / Size
的空间大小
如果虚拟机是通过扩容现有硬盘的方式来扩容,可以扩展现有PV,如果是新增的硬盘,只能新建PV来扩容
安装 cloud-utils
1 | sudo apt install cloud-guest-utils |
1 | sudo yum install cloud-utils-growpart |
扩容 PV
1 | growpart /dev/vdb 1 |
创建或扩展LV
1 | lvextend /dev/mapper/vg1-lv1 /dev/sda4 |
1 | # 创建一个指定大小的lv,并指定名字为lv2 |
格式化并挂载
新创建的
LV
类似于硬盘分区,需要格式化后再挂载
格式化
1 | mkfs.xfs /dev/mapper/vg1-lv1 |
挂载
1 | mount /dev/mapper/vg1-lv1 /opt |
1 | /dev/mapper/vg1-lv1 /opt xfs defaults 0 0 |
调整文件系统大小
1 | sudo resize2fs /dev/mapper/vg1-lv1 |
1 | sudo xfs_growfs /dev/mapper/vg1-lv1 |
在早期的RHEL中,由于resize2fs无在线resize功能,故额外提供了ext2online。
1 | sudo ext2online /dev/mapper/vg1-lv1 |
缩小文件系统
卸载文件系统
1
umount /dev/vg_name/lv_name
检查文件系统是否有错误
1
e2fsck -f /dev/vg0/lvm1
调整文件系统大小
1
resize2fs /dev/vg0/lvm1 10G
调整LV的大小
1
lvreduce -L 10G /dev/vg0/lvm1
重新挂载LV
1
mount /dev/vg0/lvm1 /lvm1
移除PV
比如某个PV对应的硬盘损坏,需要更换,比如需要更换
/dev/sdb
查看pv使用情况
1
sudo pvdisplay
查看对应的PV参数
Allocated PE
,若不为0表示有逻辑卷在使用,需要使用pvmove /dev/sdb
将数据转移到其他空闲的PV上面将PV从VG移出
1
vgreduce vg_name /dev/sdb
移除PV
1
pvremove /dev/sdb
更换硬盘,然后重新创建PV,添加VG等