pve系统对lvm分区容量重新调整

发布员1号 发布于 16 天前 24 次阅读


操作步骤

root@pve:~# df -Th
Filesystem           Type      Size  Used Avail Use% Mounted on
udev                 devtmpfs  1.9G     0  1.9G   0% /dev
tmpfs                tmpfs     388M  1.3M  386M   1% /run
/dev/mapper/pve-root xfs        41G  2.8G   38G   7% /
tmpfs                tmpfs     1.9G   28M  1.9G   2% /dev/shm
tmpfs                tmpfs     5.0M     0  5.0M   0% /run/lock
/dev/fuse            fuse      128M   16K  128M   1% /etc/pve
tmpfs                tmpfs     388M     0  388M   0% /run/user/0
root@pve:~# pvs
  PV         VG  Fmt  Attr PSize    PFree 
  /dev/sda3  pve lvm2 a--  <119.00g 14.75g
root@pve:~# vgs
  VG  #PV #LV #SN Attr   VSize    VFree 
  pve   1   3   0 wz--n- <119.00g 14.75g
root@pve:~# lvs
  LV   VG  Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  data pve twi-a-tz-- <57.50g             0.00   1.59                            
  root pve -wi-ao---- <40.75g                                                    
  swap pve -wi-ao----   4.00g  

可以看出这块磁盘还有14.75G的可用空间,我们可以直接把这未使用的分区扩容到root分区

# 将全部 14.75GB 空闲空间分配给 root 分区
lvextend -l +100%FREE /dev/pve/root
# 或手动指定扩容大小(例如 +10G)
# lvextend -L +10G /dev/pve/root

# 刷新文件系统(XFS 需要特殊操作)
xfs_growfs /dev/mapper/pve-root

验证结果

df -Th | grep root  # 检查 root 分区容量是否增加
#或者是下面的命令看所有磁盘分区情况(这里是root分区手动扩容10G容量)
root@pve:~# df -Th
Filesystem           Type      Size  Used Avail Use% Mounted on
udev                 devtmpfs  1.9G     0  1.9G   0% /dev
tmpfs                tmpfs     388M  1.3M  386M   1% /run
/dev/mapper/pve-root xfs        51G  2.9G   48G   6% /
tmpfs                tmpfs     1.9G   46M  1.9G   3% /dev/shm
tmpfs                tmpfs     5.0M     0  5.0M   0% /run/lock
/dev/fuse            fuse      128M   16K  128M   1% /etc/pve
tmpfs                tmpfs     388M     0  388M   0% /run/user/0

还有一种方法是回收 data 逻辑卷空间,剩余可用空间不足的情况下,可以调整小data逻辑卷的空间,去扩容root分区,下面是当前分区情况

root@pve:~# pvs
  PV         VG  Fmt  Attr PSize    PFree 
  /dev/sda3  pve lvm2 a--  <119.00g 14.75g
root@pve:~# vgs
  VG  #PV #LV #SN Attr   VSize    VFree 
  pve   1   3   0 wz--n- <119.00g 14.75g
root@pve:~# lvs
  LV   VG  Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  data pve twi-a-tz-- <57.50g             0.00   1.59                            
  root pve -wi-ao---- <40.75g                                                    
  swap pve -wi-ao----   4.00g 

确认 data 逻辑卷用途,如果 data 是未使用的 Thin Pool(如虚拟机磁盘存储池),可以通过缩小或删除它回收空间。

root@pve:~# lsblk | grep data   # 查看是否挂载或使用中
  ├─pve-data_tmeta 252:2    0    1G  0 lvm  
  │ └─pve-data     252:4    0 57.5G  0 lvm  
  └─pve-data_tdata 252:3    0 57.5G  0 lvm  
    └─pve-data     252:4    0 57.5G  0 lvm  

缩小或删除 data 逻辑卷

# 删除逻辑卷(⚠️ 会丢失数据!确保已备份)
lvremove /dev/pve/data

# 或者缩小 Thin Pool(需先确认是否支持)
# lvresize -L -20G /dev/pve/data  # 缩小 20GB
可能会报错,比如会出现以下信息
Thin pool volumes pve/data_tdata cannot be reduced in size yet.
那还不如备份data逻辑卷内的重要数据,比如虚拟机等,删掉逻辑卷重新创建

将回收的空间分配给 root

lvextend -L +20G /dev/pve/root  # 扩展 root
xfs_growfs /dev/mapper/pve-root  # 刷新文件系统

额外提醒:删除或缩小 Thin Pool这一关键步骤

步骤 1:确认 Thin Pool 是否被使用

检查 Proxmox VE 存储配置

pvesm list  # 查看存储是否关联到 `pve-data`
#如果存储配置中有一个 LVM-Thin 类型的存储指向 pve-data,且你未在此存储中创建虚拟机/磁盘,则可以删除它。如果此存储已被使用,需先迁移数据或解除绑定。

检查 Thin Pool 实际使用量

lvs -o lv_name,data_percent,metadata_percent,thin_count /dev/pve/data
#如果 thin_count 为 0,表示没有分配的子卷(可安全删除)。
root@pve:~# lvs -o lv_name,data_percent,metadata_percent,thin_count /dev/pve/data
  LV   Data%  Meta%  #Thins
  data 0.00   1.60        0

步骤 2:删除 Thin Pool(释放全部 68.49G)

删除逻辑卷 pve-data

lvremove /dev/pve/data  #系统会提示确认删除 Thin Pool,输入 y 继续。

检查释放的空间

vgs  # 确认 `VFree` 已增加约 68.49GB

扩容 pve-root

lvextend -L +50G /dev/pve/root  # 扩展 root 分区(例如 +50G)
xfs_growfs /dev/mapper/pve-root  # 调整文件系统

如果操作后仍需要 Thin Pool,可通过以下命令重建(例如 50G):

lvcreate -L 50G --thinpool data -n data pve  # 创建 50G 的 Thin Pool

操作后验证

df -Th | grep root  #检查 root 分区大小
vgs  #确认卷组剩余空间

注意事项

  1. 数据风险
    • 删除 Thin Pool 会丢失其中所有数据!确保它未被 Proxmox VE 存储使用。
    • 如果 pve-data 是默认的 local-lvm 存储,删除后需在 Proxmox Web 界面移除相关存储配置(Datacenter > Storage)。
  2. Thin Pool 操作限制
    • 缩小 Thin Pool 时,需确保剩余空间大于已分配的子卷大小。
    • XFS 文件系统只能扩容,不能缩小。
  3. 建议操作顺序
    • 如果 Thin Pool 完全未使用,直接删除是最简单的方案。
    • 如果 Thin Pool 被轻度使用,建议先迁移数据再删除。
  1. 无法缩小data分区
    • 为什么缩小 Thin Pool 失败?
      • LVM 限制:Thin Pool 的 tdata 卷不能直接缩小,除非满足以下条件:
        • Thin Pool 中所有子卷(thin volumes)的已用空间总和小于缩小后的容量。
        • 元数据卷 (tmeta) 有足够空间记录变更。
      • 由于你的 Thin Pool 可能关联 Proxmox VE 的默认配置(即使未使用),直接缩小操作被阻止。
    • 删除 Thin Pool 的影响
      • 如果 pve-data 是 Proxmox VE 的默认 local-lvm 存储,删除后需在 Web 界面中移除相关存储配置(Datacenter > Storage),否则可能出现警告(但不影响系统运行)。
      • 若未来需要 Thin Pool,可通过以下命令重建:
lvcreate -L 50G --thinpool data -n data pve  # 创建 50G 的 Thin Pool