逻辑卷LVM配置
什么是LVM
LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。通过LVM系统管理员可以轻松管理磁盘分区,管理员可以在卷组上随意创建逻辑卷组(logical volumes),并进一步在逻辑卷组上创建文件系统。管理员通过LVM可以方便的调整存储卷组的大小,并且可以对磁盘存储按照组的方式进行命名、管理和分配。
LVM中常用概念
PV(physical volume):物理卷在逻辑卷管理系统最底层,可为整个物理硬盘或实际物理硬盘上的分区。
VG(volume group):卷组建立在物理卷上,一卷组中至少要包括一物理卷,卷组建立后可动态的添加卷到卷组中,一个逻辑卷管理系统工程中可有多个卷组。
LV(logical volume):逻辑卷建立在卷组基础上,卷组中未分配空间可用于建立新的逻辑卷,逻辑卷建立后可以动态扩展和缩小空间。
PE(physical extent):物理区域是物理卷中可用于分配的最小存储单元,物理区域大小在建立卷组时指定,一旦确定不能更改,同一卷组所有物理卷的物理区域大小需一致,新的pv加入到vg后,pe的大小自动更改为vg中定义的pe大小。
LE(logical extent):逻辑区域是逻辑卷中可用于分配的最小存储单元,逻辑区域的大小取决于逻辑卷所在卷组中的物理区域的大小。
LVM结构图
底层PV是一种LVM格式,VG相当于普通磁盘,LV相当于磁盘上的分区,结构如下:
LVM常用命令汇总
任务 |
PV阶段 |
VG阶段 |
LV阶段 |
查找(scan) |
pvscan |
vgscan |
lvscan |
新建(create) |
pvcreate |
vgcreate |
lvcreate |
显示(display) |
pvdisplay |
vgdisplay |
lvdisplay |
增加(extend) |
|
vgextend |
lvextend(lvresize) |
减少(reduce) |
|
vgreduce |
lvreduce(lvresize) |
删除(remove) |
pvremove |
vgremove |
lvremove |
改变容量(resize) |
|
|
lvresize |
改变属性(attribute) |
pvchange |
vgchange |
lvchange |
配置示例
下面用一个示例,演示LVM常用的配置流程
如上图,虚拟机新磁盘sdb为10G,满足以下要求:
1、新建一个2G的逻辑卷,要求卷组名vg0_ext3,逻辑卷名lvm0,大小为1G,文件系统类型ext3,挂载点/data0;
2、将lvm0增大2G,同时增大文件系统,不影响已有文件;
3、将lvm0减小660M,同时减小文件系统,不影响已有文件;
4、新建一个3G的逻辑卷,要求卷组名vg1_xfs,逻辑卷名为lvm1,大小为3G,文件系统类型xfs,挂载点/data1;
5、将lvm1增大1G,增大文件系统,不影响已有文件;
使用ext3文件系统配置LVM
创建LVM
配置如下:
首先使用fdisk划分出2G分区,分区类型为LVM格式;
fdisk /dev/sdb
n(新增分区)--->p(基础分区)--->1(分区号)--->Enter(起始柱面)--->+2G(分区大小)--->t(改变分区类型)--->1(改变的分区号)--->8e(LVM分区类型label)--->w(保存退出)
查看分区:
PV阶段,将sdb1设置为PV格式,并查看:
pvcreate /dev/sdb1
pvdisplay /dev/sdb1
VG阶段,在sdb1分区,新建VG,卷组名vg0_ext3,并查看该卷组;
vgcreate vg0_ext3 /dev/sdb1
vgdisplay /dev/vg0_ext3 #注意此时卷组名/dev/vg0_ext3
LV阶段,在卷组vg0_ext3上,新建LV,名称lvm0,大小为1G,并查看;
lvcreate -L 1G -n lvm0 /dev/vg0_ext3 #选项 -L指定大小 -n指定lvm名称
lvdisplay /dev/vg0_ext3/lvm0 #注意此处lvm格式
查看LVM配置结果:
格式化lvm0,文件系统类型ext3,挂载点/data0
mkfs.ext3 /dev/vg0_ext3/lvm0
echo '/dev/vg0_ext3/lvm0 /data0 ext3 defaults 0 0' >> /etc/fstab
mkdir /data0
mount -a
查看挂载结果:
扩大LVM
由于剩余PV空间不足2G,需重新划分一个分区,大小2G,加到/dev/vg0_ext3/lvm0中;
配置如下:
fdisk /dev/sdb
N--->p--->2--->Enter--->+2G--->t--->2--->8e--->w--->partprobe(强制内核检查分区表)
umount /data0 #扩大LVM,首先umount挂载点
pvcreate /dev/sdb2 #将/dev/sdb2创建PV
vgextend /dev/vg0_ext3 /dev/sdb2 #扩大原有VG,将/dev/sdb2加入
lvextend -L 3G /dev/vg0_ext3/lvm0 #扩大原有LV为3G
e2fsck -f /dev/vg0_ext3/lvm0 #要求强制检查文件系统
resize2fs /dev/vg0_ext3/lvm0 3G #调整/dev/vg0_ext3/lvm0分区大小为3G
查看增大后分区,并挂载
缩小LVM
缩小LVM,首先需要umount挂载点
umount /data0
减小660M文件系统,相当于文件系统减小为1024*3-660=2412M
e2fsck -f /dev/vg0_ext3/lvm0
resize2fs /dev/vg0_ext3/lvm0 2412M
lvreduce -L 2412M /dev/vg0_ext3/lvm0 #再减小LVM到2412M
重新挂载后结果
使用xfs文件系统配置LVM
创建LVM
首先使用fdisk创建/dev/sdb3,大小为3G,之后开始创建LVM
pvcreate /dev/sdb3
vgcreate vg1_xfs /dev/sdb3
注意此处,由于/dev/sdb3大小是3G,创建LV时可能出现PE不够的情况
用vgdisplay查看空闲PE数后,用PE数量创建LV
lvcreate -l 767 -n lvm1 /dev/vg1_xfs # -l 参数表示PE个数
LV建立后进行格式化、挂载
mkfs.xfs /dev/vg1_xfs/lvm1
echo '/dev/vg1_xfs/lvm1 /data1 xfs defaults 0 0' >> /etc/fstab
mkdir /data1
mount -a
扩大LVM
扩大dev/vg1_xfs/lvm1,首先fdisk新建分区/dev/sdb4,大小为1G,再增加LVM
pvcreate /dev/sdb4
vgextend /dev/vg1_xfs /dev/sdb4
查看VG,总PE数为1022
lvextend -l 1022 /dev/vg1_xfs/lvm1
扩大xfs文件系统,注意xfs文件系统可以在挂载的情况下扩大
xfs_growfs /dev/vg1_xfs/lvm1
查看LVM扩大后结果
删除LVM
过程跟创建LVM相反,先删除LV,再删除VG,举例删除/dev/vg1_xfs/lvm1
umount /data1
lvremove /dev/vg1_xfs/lvm1
vgremove vg1_xfs
pvremove /dev/sdb4
pvremove /dev/sdb3
最后用fdisk删除磁盘分区即可
总结
1、ext3文件系统调整前必须umount,强制检查后调整,即先e2fsck后再resize2fs;
2、xfs文件系统用xfs_growfs扩大,不能减小,没有相应的减小命令,在挂载状态下执行;
3、文件系统减小有风险,尽量避免对根分区操作;
4、如果LV扩大提示空间不足,考虑使用PE个数扩大;
5、PE大小默认4MB,如果要改变,VG阶段使用vgcreate -s指定PE大小,同时其他要加入的逻辑卷PE大小须保持一致;