PVE重建 LVM-Thin 精简池:缩小默认 local-lvm 存储
背景
ProxmoxVE 的默认安装会创建 local 和 local-lvm 两个存储。其中local大约磁盘容量的10%,存储类别为目录。 大部分容量都给到了 local-lvm,也就是存储类别为 lvm-thin 的LVM精简卷。
前置知识: LVM逻辑卷管理器中,lv逻辑卷中还存在thin pool精简池模式,相当于
ESXI的精简制备(Thin provisioning); thin pool精简池就是一个存储池,可以在池子的基础再新建lv逻辑卷,也就是thin volume精简卷。
因为考虑空间回收问题,我不想像大多数网上教程一样,把全部存储空间改成目录,下面介绍如何将默认的 local-lvm 存储重建(缩小)。
一条龙命令
#假设你已经有了一个名为 pve 的 LVM 卷组
lvcreate -L 100G -T pve/thinpool
lvcreate -V 99G --thin -n thinvolume pve/thinpool
#剩下的空间给到目录
lvresize --extents +100%FREE --resizefs pve/root #+100%FREE也可以换成+多少G这种形式。
vim /etc/pve/storage.cfg
lvmthin: thinvolume
thinpool thinpool
vgname pve
content images,rootdir
参考我的命令历史:

一、删除默认thinpool精简池
- 失败操作
root@pve:~# lvremove /dev/pve/data
Removing pool "data" will remove 3 dependent volume(s). Proceed? [y/n]: y
Logical volume pve/vm-150-disk-0 in use.
root@pve:~# lvremove /dev/pve/data
Removing pool "data" will remove 3 dependent volume(s). Proceed? [y/n]: y
Do you really want to remove active logical volume pve/vm-150-disk-0? [y/n]: n
Logical volume pve/vm-150-disk-0 not removed.
- 成功
root@pve:~# lvremove /dev/pve/data
Removing pool "data" will remove 3 dependent volume(s). Proceed? [y/n]: y
Do you really want to remove active logical volume pve/vm-150-disk-0? [y/n]: y
Logical volume "vm-150-disk-0" successfully removed
Do you really want to remove active logical volume pve/vm-150-state-test-lvm-thin? [y/n]: y
Logical volume "vm-150-state-test-lvm-thin" successfully removed
Logical volume "snap_vm-150-disk-0_test-lvm-thin" successfully removed
Do you really want to remove active logical volume pve/data? [y/n]: y
Logical volume "data" successfully removed
删除后检查
LV
root@pve:~# lvscan
ACTIVE '/dev/pve/swap' [8.00 GiB] inherit
ACTIVE '/dev/pve/root' [96.00 GiB] inherit
root@pve:~# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root pve -wi-ao---- 96.00g
swap pve -wi-ao---- 8.00g
root@pve:~# lvdisplay
--- Logical volume ---
LV Path /dev/pve/swap
LV Name swap
VG Name pve
LV UUID 33LoWc-yYZH-VGZe-2tfz-WSZ0-a9V5-u4bdFr
LV Write Access read/write
LV Creation host, time proxmox, 2024-01-12 02:55:36 +0800
LV Status available
# open 2
LV Size 8.00 GiB
Current LE 2048
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
--- Logical volume ---
LV Path /dev/pve/root
LV Name root
VG Name pve
LV UUID qy6z0m-FQ3z-uf3r-MX1y-83F8-fMK5-8yGt3T
LV Write Access read/write
LV Creation host, time proxmox, 2024-01-12 02:55:36 +0800
LV Status available
# open 1
LV Size 96.00 GiB
Current LE 24576
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:1
lsblk
root@pve:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme0n1 259:0 0 476.9G 0 disk
├─nvme0n1p1 259:1 0 1007K 0 part
├─nvme0n1p2 259:2 0 1G 0 part /boot/efi
└─nvme0n1p3 259:3 0 475.9G 0 part
├─pve-swap 253:0 0 8G 0 lvm [SWAP]
└─pve-root 253:1 0 96G 0 lvm /
VG(腾出来的容量在这)
root@pve:~# vgscan
Found volume group "pve" using metadata type lvm2
root@pve:~# vgs
VG #PV #LV #SN Attr VSize VFree
pve 1 2 0 wz--n- <475.94g <371.94g
root@pve:~# vgdisplay
--- Volume group ---
VG Name pve
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 21
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size <475.94 GiB
PE Size 4.00 MiB
Total PE 121840
Alloc PE / Size 26624 / 104.00 GiB
Free PE / Size 95216 / <371.94 GiB
VG UUID 8G6toh-RMyr-x1c7-sQ5O-eSve-ICQp-rw5Idx

lvextend -l 18111 /dev/pve/root
Web管理界面
已启用 是
活动 否
内容 磁盘映像, 容器
类别 LVM-Thin
使用率 N/A
没有移除虚拟机,导致无法还原原来ID
qm destroy 150 storage ’local-lvm’ does not exist
解决
rm /etc/pve/qemu-server/150.conf
二、创建精简池 + 创建精简卷LVM-Thin
1、创建thinpool精简池
必须在卷组之上创建精简池。
#创建
lvcreate [-L size(M/G) | -l PEnum] -n lv_name vg_name
lvcreate -L 100G -T pve/thinpool
lvcreate -L 80G --thin -n vmstore vmdata
lvcreate是用于创建逻辑卷的命令。- -L | –size:根据大小创建 LV逻辑卷,即分配多少空间给此 LV
- (-l |–extents :根据 PE 的数量来创建 LV,即分配多少个 PE 给此 LV)
- -T | –thin:表示要创建一个精简配置的逻辑卷(thin volume),即一个用于存储 thin 卷的特殊逻辑卷。Thin pool 可以通过共享空闲空间来优化存储利用率。
- -n:可以指定 LV 名称
- 最后参数:
pve/thinpool是要创建的 thin pool 的名称,其中pve是逻辑卷组的名称。
2、在精简池中,创建thinvolume精简卷
必须在精简池之上创建精简卷。
lvcreate -V | --virtualsize 大小[m|UNIT] --thinpool LV VG
#例子
lvcreate -V 50G --thin -n thinvolume pve/thinpool
lvcreate -V 50G --thin -n thinvolume pve/thinpool
-V | –virtualsize:(-V看man说明指virtual size,这里-V就不能使用-L或者-l来代替指明容量了)
- 实际占用空间与-V设置的大小可能不同,它不会立即占用这30GB空间
- 空间的真正分配是动态的,随着数据的写入而逐渐增加
- 所占用的存储来源于依附的thin pool池
PVE官方手册:
假设你已经有了 一个名为 pve 的 LVM 卷组,以下命令创建一个新的 LVM 精简池(大小 100G)
报错:WARNING: gpt signature detected on /dev/pve/local-thinpool at offset 512. Wipe it? [y/n]
lvcreate -L 100G -n local-thinpool pve
lvconvert --type thin-pool pve/local-thinpool
调整精简池的大小
调整 LV 和元数据池的大小可以通过以下命令方式实现。
# lvresize --size +<size[\M,G,T]> --poolmetadatasize +<size[\M,G]> <VG>/<LVThin_pool>
扩容数据池时,元数据池也必须扩容。
三、将空闲空间分配给目录
删除local-lvm给local扩容
lvremove pve/data #移除local-lvm
vgdisplay pve | grep Free #显示存在的卷组
lvextend -l +100%FREE -f pve/root #将卷组中的空闲空间扩展到根目录
resize2fs /dev/mapper/pve-root #刷新扩容根分区
Web控制台:添加存储
登陆WEB界面,打开宿主机“磁盘”管理,已经创建好了
去数据中心- 存储:添加 LVM-Thin类别
最终效果
