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