环境
Centos7.6
当前存在下列盘
[root@initnode ~]# fdisk -l|grep "Disk /dev/sd*"
Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 sectors
Disk /dev/sdb: 2147 MB, 2147483648 bytes, 4194304 sectors
Disk /dev/sdc: 3221 MB, 3221225472 bytes, 6291456 sectors
Disk /dev/sde: 1073 MB, 1073741824 bytes, 2097152 sectors
Disk /dev/sdd: 1073 MB, 1073741824 bytes, 2097152 sectors
1 创建并挂载lvm卷
1.1 创建PV
# 创建物理卷
[root@initnode ~]# pvcreate /dev/sdb /dev/sde /dev/sdd
Physical volume "/dev/sdb" successfully created.
Physical volume "/dev/sde" successfully created.
Physical volume "/dev/sdd" successfully created.
# 检查,创建了一个2G的和2个1G的
[root@initnode ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <19.00g 0
/dev/sdb lvm2 --- 2.00g 2.00g
/dev/sdd lvm2 --- 1.00g 1.00g
/dev/sde lvm2 --- 1.00g 1.00g
可以使用 pvdisplay 或 pvdisplay -v 查看详细信息
1.2 创建VG
# 创建vg
[root@initnode ~]# vgcreate mytestvg /dev/sdb /dev/sde /dev/sdd
Volume group "mytestvg" successfully created
# 查看
[root@initnode ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <19.00g 0
mytestvg 3 0 0 wz--n- <3.99g <3.99g
可以使用 vgdisplay 或 vgdisplay -v 查看详细信息
1.3 创建LV
# 从mytestvg中创建一个名称为lvtest的lvm卷,大小为2G
[root@initnode ~]# lvcreate -n lvtest -L 2G mytestvg
Logical volume "lvtest" created.
# 查看
[root@initnode ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- <15.05g
swap centos -wi-ao---- <3.95g
lvtest mytestvg -wi-a----- 2.00g
可以使用 lvdisplay 或 lvdisplay -v 查看详细信息
1.4 格式化
# 格式化新建的卷
[root@initnode ~]# mkfs.xfs /dev/mytestvg/lvtest
meta-data=/dev/mytestvg/lvtest isize=512 agcount=4, agsize=131072 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=524288, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
1.5 挂载
# 挂载
[root@initnode ~]# mount /dev/mytestvg/lvtest /u01
# 查看
[root@initnode ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 16G 4.2G 11G 28% /
devtmpfs 475M 0 475M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.5M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda1 1014M 133M 882M 14% /boot
tmpfs 98M 0 98M 0% /run/user/0
/dev/mapper/mytestvg-lvtest 2.0G 33M 2.0G 2% /u01
1.6 设置开机启动
# 注意边的地址是 /dev/mytestvg/lvtest,而不是 /dev/mapper/mytestvg-lvtest
echo "/dev/mytestvg/lvtest /u01 xfs defaults 0 0" >> /etc/fstab
2.在线扩容与缩容
在线扩容与缩容并不会影响到已有文件
2.1 扩容
假设还需要添加3G空间上去
2.1.1 查看当前剩余空间
[root@initnode ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <19.00g 0
mytestvg 3 1 0 wz--n- <3.99g <1.99g # 当前剩余 1.99g
[root@initnode ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <19.00g 0
/dev/sdb mytestvg lvm2 a-- <2.00g 0
/dev/sdd mytestvg lvm2 a-- 1020.00m 1020.00m
/dev/sde mytestvg lvm2 a-- 1020.00m 1016.00m
2.1.2 创建pv
# 创建pv
[root@initnode ~]# pvcreate /dev/sdc
Physical volume "/dev/sdc" successfully created.
[root@initnode ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <19.00g 0
/dev/sdb mytestvg lvm2 a-- <2.00g 0
/dev/sdc lvm2 --- 3.00g 3.00g # 新添加,但并不在 vg组内
/dev/sdd mytestvg lvm2 a-- 1020.00m 1020.00m
/dev/sde mytestvg lvm2 a-- 1020.00m 1016.00m
2.1.2 添加进vg
[root@initnode ~]# vgextend mytestvg /dev/sdc
Volume group "mytestvg" successfully extended
[root@initnode ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <19.00g 0
mytestvg 4 1 0 wz--n- 6.98g 4.98g # 当前剩余 4.98g了
2.1.3 扩lv
# 源lv大小为2g
[root@initnode ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- <15.05g
swap centos -wi-ao---- <3.95g
lvtest mytestvg -wi-ao---- 2.00g
# 对原lv扩大3g
[root@initnode ~]# lvextend -L +3G /dev/mytestvg/lvtest
Size of logical volume mytestvg/lvtest changed from 2.00 GiB (512 extents) to 5.00 GiB (1280 extents).
Logical volume mytestvg/lvtest successfully resized.
# lv已扩为5g
[root@initnode ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- <15.05g
swap centos -wi-ao---- <3.95g
lvtest mytestvg -wi-ao---- 5.00g
# 文件系统还没有扩
[root@initnode ~]# df -h
/dev/mapper/mytestvg-lvtest 2.0G 33M 2.0G 2% /u01
2.1.4 扩文件系统
[root@initnode ~]# xfs_growfs /dev/mytestvg/lvtest
meta-data=/dev/mapper/mytestvg-lvtest isize=512 agcount=4, agsize=131072 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=524288, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 524288 to 1310720
# 当前已变为5g
[root@initnode ~]# df -h
/dev/mapper/mytestvg-lvtest 5.0G 33M 5.0G 1% /u01
ext4 文件扩容使用 resize2fs /dev/mytestvg/lvtest
2.2 缩容
缩容一般都有一定风险,且缩容需要 umount,假设当前缩小到2G
xfs不支持直接缩容,ext4可如下操作
resize2fs /dev/mytestvg/lvtest 2G #可能需要执行下提示的检查
lvreduce -L -3G /dev/mytestvg/lvtest
mount /u01
2.2.1 vg缩容
[root@initnode ~]# umount /u01
[root@initnode ~]# vgreduce mytestvg /dev/sdd
Removed "/dev/sdd" from volume group "mytestvg"
[root@initnode ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <19.00g 0
/dev/sdb mytestvg lvm2 a-- <2.00g 0
/dev/sdc mytestvg lvm2 a-- <3.00g 1012.00m
/dev/sdd lvm2 --- 1.00g 1.00g # 这能看出
/dev/sde mytestvg lvm2 a-- 1020.00m 0
[root@initnode ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <19.00g 0
mytestvg 3 1 0 wz--n- <5.99g 1012.00m # 只有1G
2.2.2 pv清楚不再vg内的盘
[root@initnode ~]# pvremove /dev/sdd
Labels on physical volume "/dev/sdd" successfully wiped.
2.2.2 盘挂载回去
不影响当前文件
mount /u01
3.删除pv、vg、lv
# 卸载挂载
[root@initnode ~]# umount /u01
[root@initnode ~]# lvremove /dev/mytestvg/lvtest
Do you really want to remove active logical volume mytestvg/lvtest? [y/n]: y
Logical volume "lvtest" successfully removed
# 卸载vg
[root@initnode ~]# vgremove mytestvg
Volume group "mytestvg" successfully removed
# 卸载pv
[root@initnode ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <19.00g 0
/dev/sdb lvm2 --- 2.00g 2.00g
/dev/sdc lvm2 --- 3.00g 3.00g
/dev/sde lvm2 --- 1.00g 1.00g
[root@initnode ~]# pvremove /dev/sdb /dev/sdc /dev/sde
Labels on physical volume "/dev/sdb" successfully wiped.
Labels on physical volume "/dev/sdc" successfully wiped.
Labels on physical volume "/dev/sde" successfully wiped.
# 因为已删除,再次挂载就不成功了
[root@initnode ~]# mount /u01
mount: special device /dev/mytestvg/lvtest does not exist