场景

  • 前期规划给了太多磁盘,实际用不到那么多,需要移除一个物理硬盘
  • 当前LV总占用小于需要保留的硬盘容量
  • 保留的物理卷未分配给lv的空间必须小于文件总容量,下面是一个参考

需要保留sdb,移除sdc

可迁移

lv总使用量: 1.5G

物理卷 物理卷大小 lv总分配量
sdb 2G 500M
sdc 2G 500M

不可迁移

lv总使用量: 3G

物理卷 物理卷大小 lv总分配量
sdb 2G 1.5G
sdc 2G 1G

技巧

root@debian:/# pvs
  PV         VG  Fmt  Attr PSize  PFree 
  /dev/sdb1  lvg lvm2 a--  <2.00g <2.00g
  /dev/sdc1  lvg lvm2 a--  <2.00g 20.00m
root@debian:/# 

通过pvs命令可以看到每个物理磁盘的空闲(PFree )大小,通过这个大小就可以知道结论

需要保留的物理磁盘空闲 总lv使用大小 迁移
1G 500M
1G 1.5G
  • 如果需要移除的设备PSize减去PFree 的值小于需要保留的设备PFree 则可以迁移并移除

  • 如果需要移除的设备PSize和自身PFree 的值一致说明这个磁盘并没有使用到,可以直接移除,不需要迁移数据

  • 如果需要移除的设备PSize减去PFree 的值大于需要保留的设备PFree 则可以无法迁移和移除

其他

Lvm创建请看: 从零开始创建LVM分区方案

配置

环境信息

root@debian:/# lvs
  LV   VG  Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  d1   lvg -wi-ao---- 500.00m                                                    
  d2   lvg -wi-ao---- 500.00m                                                    
  d3   lvg -wi-ao----   1.00g                                                    
root@debian:/# vgs
  VG  #PV #LV #SN Attr   VSize VFree 
  lvg   2   3   0 wz--n- 3.99g <2.02g
root@debian:/# 

写入文件

root@debian:/# ls d1 d2 d3
d1:
DSM_VirtualDSM_42661.pat  lost+found

d2:
DSM_DS918+_42962.pat  lost+found

d3:
d3.pat  lost+found
root@debian:/# df -h
Filesystem          Size  Used Avail Use% Mounted on
udev                953M     0  953M   0% /dev
tmpfs               197M  560K  196M   1% /run
/dev/sda2            30G  4.1G   25G  15% /
tmpfs               981M     0  981M   0% /dev/shm
tmpfs               5.0M     0  5.0M   0% /run/lock
/dev/sda1           511M  5.9M  506M   2% /boot/efi
tmpfs               197M  4.0K  197M   1% /run/user/0
/dev/mapper/lvg-d1  459M  326M  104M  76% /d1
/dev/mapper/lvg-d2  459M  347M   84M  81% /d2
/dev/mapper/lvg-d3  1.5G  347M  1.1G  26% /d3
root@debian:/# 

迁移数据

语法

在移除硬盘之前,需要先迁移数据

pvmove命令用于将源物理卷上的物理盘区移动到一个或多个其他的目标物理卷。其基本语法格式为:

pvmove [选项] [源物理卷[:PE[-PE]...] [目标物理卷[:PE[-PE]...]...]]

这里是一些常用选项和实例:

常用选项:
--abort:中止正在进行的任何移动。
实例:
移动物理卷/dev/sda5上的所有物理盘区:

pvmove /dev/sda5

将源物理卷/dev/sda5上的物理盘区移动到物理卷/dev/sda6上:

pvmove /dev/sda5 /dev/sda6

将源物理卷/dev/sda5上的物理盘区1000~1999移动到物理卷/dev/sda6上:

pvmove /dev/sda5:1000-1999 /dev/sda6

在执行pvmove命令之前,确保目标物理卷有足够的空间来容纳源物理卷上的数据,并且目标物理卷没有被其他逻辑卷使用。可以通过pvdisplay命令来查看物理卷的状态和使用情况。

需要注意的是,pvmove命令的执行可能需要一些时间,具体取决于数据的大小和系统的性能。在数据迁移过程中,建议避免对涉及的物理卷进行其他操作,以防止数据丢失或系统不稳定。

实践

sdc的数据迁移到sdb

root@debian:/# pvmove /dev/sdc1 /dev/sdb1 
  /dev/sdc1: Moved: 0.40%
  /dev/sdc1: Moved: 24.70%
  /dev/sdc1: Moved: 49.41%
  /dev/sdc1: Moved: 100.00%
root@debian:/# 

执行结束之后,查看pv信息

root@debian:/# pvs
  PV         VG  Fmt  Attr PSize  PFree 
  /dev/sdb1  lvg lvm2 a--  <2.00g 20.00m
  /dev/sdc1  lvg lvm2 a--  <2.00g <2.00g
root@debian:/# 

此时可以看到,数据已经全部在sdb1

从VG中移除

vgreduce lvg /dev/sdc1
root@debian:/# vgreduce lvg /dev/sdc1
  Removed "/dev/sdc1" from volume group "lvg"
root@debian:/# 

从pv中移除

root@debian:/# pvs
  PV         VG  Fmt  Attr PSize  PFree 
  /dev/sdb1  lvg lvm2 a--  <2.00g 20.00m
  /dev/sdc1      lvm2 ---  <2.00g <2.00g
root@debian:/# pvremove /dev/sdc1 
  Labels on physical volume "/dev/sdc1" successfully wiped.
root@debian:/# pvs
  PV         VG  Fmt  Attr PSize  PFree 
  /dev/sdb1  lvg lvm2 a--  <2.00g 20.00m
root@debian:/# 

可以看到,此时的pv已经没有sdc1

root@debian:/# vgs
  VG  #PV #LV #SN Attr   VSize  VFree 
  lvg   1   3   0 wz--n- <2.00g 20.00m
root@debian:/# 

vg的总大小也变化了