生产环境LVM存储降级方案
近期基于磁盘使用率监控分析,现对业务服务器实施LVM存储资源优化,通过ext4/XFS文件系统缩容及PV迁移技术,将低负载磁盘(如300G使用率不足50%)智能调整为200G,预计节约20%存储成本,同时提供rsync数据迁移方案。
一、前提条件
1.数据量验证
确认已使用的数据量<=新磁盘的总量
#查看新旧磁盘空间
lsblk#查看目前磁盘使用量
du -sh /data#查看磁盘挂载类型
cat /etc/fstab |grep '/data'
2.服务停写
比如nginx、Java业务需要停止向磁盘写入数据。
#查找哪些进程正在使用挂载点
fuser -mv /data
lsof +f -- /data
二、lvm挂载缩容方案
1.创建物理卷
[root@kdxf-asr02 ~]# pvcreate /dev/vdcPhysical volume "/dev/vdc" successfully created.
[root@kdxf-asr02 ~]# pvsPV VG Fmt Attr PSize PFree /dev/vdb data_vgc lvm2 a-- <300.00g 0 /dev/vdc lvm2 --- 200.00g 200.00g
2.创建卷组或扩展卷组
#查看卷组
[root@kdxf-asr02 ~]# vgsVG #PV #LV #SN Attr VSize VFreedata_vgc 1 1 0 wz--n- <300.00g 0 #扩展卷组
[root@kdxf-asr02 ~]# vgextend data_vgc /dev/vdcVolume group "data_vgc" successfully extended
#发现卷组已多了200G空余
[root@kdxf-asr02 ~]# vgsVG #PV #LV #SN Attr VSize VFree data_vgc 2 1 0 wz--n- 499.99g <200.00g#vgs查看卷组没有的话就创建卷组
#创建卷组 data_vg 卷组名称
[root@kdxf-asr02 ~]# vgcreate data_vg /dev/vdc
3.创建新逻辑卷
[root@kdxf-asr02 ~]# lvsLV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convertdata_lv data_vgc -wi-ao---- <300.00g
#创建新逻辑卷(在 /dev/vdc 上)卷组名为data_vgc 逻辑卷名为data_new
[root@kdxf-asr02 ~]# lvcreate -n data_new -l 100%FREE data_vgc /dev/vdcLogical volume "data_new" created.
[root@kdxf-asr02 ~]# lvsLV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convertdata_lv data_vgc -wi-ao---- <300.00g data_new data_vgc -wi-a----- <200.00g
4.格式化
#如果原系统是 EXT4
[root@kdxf-asr02 ~]# mkfs.ext4 /dev/data_vgc/data_new# 如果原系统是 XFS
[root@kdxf-asr02 ~]# mkfs.xfs /dev/data_vgc/data_new
5. 临时挂载新逻辑卷
[root@kdxf-asr02 ~]# mkdir /mnt/data_new
[root@kdxf-asr02 ~]# mount /dev/data_vgc/data_new /mnt/data_new
6.拷贝数据到新磁盘
[root@kdxf-asr02 ~]# rsync -avh --progress /data/ /mnt/data_new/
等待数据传完至100%
7.检查数据完整性
# 应无输出
[root@kdxf-asr02 ~]# diff -r /data /mnt/data_new
# 以下两个输出应该一致
[root@kdxf-asr02 ~]# du -sh /mnt/data_new
134G /mnt/data_new
[root@kdxf-asr02 ~]# du -sh /data
134G /data
8.卸载新旧文件系统
umount /data
umount /mnt/data_new
9.重命名逻辑卷
# 原lv重命名data_lv为data_old data_vgc卷组名
[root@kdxf-asr02 ~]# lvrename data_vgc data_lv data_old Renamed "data_lv" to "data_old" in volume group "data_vgc"
[root@kdxf-asr02 ~]# lvsLV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convertdata_new data_vgc -wi-a----- <200.00g data_old data_vgc -wi-a----- <300.00g # 新LV重命名data_new为data_lv
[root@kdxf-asr02 ~]# lvrename data_vgc data_new data_lv Renamed "data_new" to "data_lv" in volume group "data_vgc"
[root@kdxf-asr02 ~]# lvsLV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convertdata_lv data_vgc -wi-a----- <200.00g data_old data_vgc -wi-a----- <300.00g
10.挂载新lv到/data
# 获取新LV的UUID
[root@kdxf-asr02 ~]# blkid /dev/data_vgc/data_lv
/dev/data_vgc/data_lv: UUID="27adfda7-5b86-4919-9a71-65672b2fca2b" BLOCK_SIZE="4096" TYPE="ext4"# 编辑fstab,替换原/data条目为新UUID
#示例条目:UUID=新UUID /data ext4 defaults 0 0
[root@kdxf-asr02 ~]# vim /etc/fstab
...
UUID=27adfda7-5b86-4919-9a71-65672b2fca2b /data ext4 defaults 0 0#挂载
[root@kdxf-asr02 ~]# mount -a#查看挂载信息
[root@kdxf-asr02 ~]# df -h | grep /data
/dev/mapper/data_vgc-data_lv 196G 134G 52G 73% /data
11.验证挂载
[root@kdxf-asr02 ~]# du -sh /data/
134G /data/
[root@kdxf-asr02 ~]# ll /data/
12.删除旧逻辑卷(确认成功后执行)
[root@kdxf-asr02 ~]# lvsLV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convertdata_lv data_vgc -wi-ao---- <200.00g data_old data_vgc -wi-a----- <300.00g
[root@kdxf-asr02 ~]# lvremove /dev/data_vgc/data_old
Do you really want to remove active logical volume data_vgc/data_old? [y/n]: yLogical volume "data_old" successfully removed
[root@kdxf-asr02 ~]# lvsLV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convertdata_lv data_vgc -wi-a----- <200.00g
13.从卷组移除旧PV(确认成功后执行)
[root@kdxf-asr02 ~]# vgsVG #PV #LV #SN Attr VSize VFree data_vgc 2 1 0 wz--n- 499.99g <300.00g
[root@kdxf-asr02 ~]# vgreduce data_vgc /dev/vdbRemoved "/dev/vdb" from volume group "data_vgc"
[root@kdxf-asr02 ~]# vgsVG #PV #LV #SN Attr VSize VFreedata_vgc 1 1 0 wz--n- <200.00g 0
14.移除旧PV(确认成功后执行)
[root@kdxf-asr02 ~]# pvsPV VG Fmt Attr PSize PFree /dev/vdb lvm2 --- 300.00g 300.00g/dev/vdc data_vgc lvm2 a-- <200.00g 0
[root@kdxf-asr02 ~]# pvremove /dev/vdbLabels on physical volume "/dev/vdb" successfully wiped.
[root@kdxf-asr02 ~]# pvsPV VG Fmt Attr PSize PFree/dev/vdc data_vgc lvm2 a-- <200.00g 0
至此,磁盘已完整缩容完成了。