




























# Proxmox 虚拟机 LVM 磁盘无损缩容实战指南 (100G -> 70G)
## 0. 背景与核心挑战
在 Proxmox (PVE) 环境下,缩小一个使用了 LVM 且带 GPT 分区表的虚拟机磁盘。
核心难点:数据碎片化。即使文件系统已缩小,如果逻辑卷(LV)的物理块(PE)分布在磁盘末尾,底层分区就无法收缩。
## 1. 核心操作流程图
## 2. 详细操作步骤
### 第一阶段:内部手术 (Live CD 环境)
1. 进入 GParted Live CD:确保根目录未挂载。
2. 缩小文件系统 (ext4):
e2fsck -f /dev/mapper/ubuntu--vg-ubuntu--lv (检查)
resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv 60G (缩小到 60G)
3. 缩小逻辑卷 (LV):
lvreduce -L 60G /dev/mapper/ubuntu--vg-ubuntu--lv
### 第二阶段:数据搬运 (数据整理的关键)
这是我们遇到的最大障碍pvresize 报错,提示末尾有数据。
1. 分析物理分布:
pvs -v --segments /dev/sda3
发现数据分布像“夹心饼干”,中间有洞,尾部有钉子户。
2. 强制搬运数据 (pvmove):
使用 --alloc anywhere 强制将尾部区块挪到前面的空洞。
sudo pvmove --alloc anywhere /dev/sda3:尾部起始-尾部结束
3. 收尾:确保 pvs 显示磁盘最后一段完全是 free。
### 第三阶段:底层切割 (PVE Host 环境)
1. GParted UI:拖动分区条,将 /dev/sda3 缩小到 65G(留 5G 缓冲)。
2. PVE Shell 缩容:
lvreduce -L 70G pve/vm-100-disk-0
3. 修改配置:
编辑 /etc/pve/qemu-server/100.conf,将 size=100G 手动改为 size=70G。
### 第四阶段:修复引导 (GPT 补丁)
由于切掉了磁盘末尾,GPT 备份表丢失。
1. 使用 gdisk 修复:
sudo gdisk /dev/sda -> x (专家模式) -> e (重定位备份表到末尾) -> w (保存)。
Skills verson
# Skill: Proxmox LVM Disk Shrinking (Expert Mode)
## Definition
无损缩小 Proxmox 虚拟机磁盘(LVM over GPT),处理数据碎片化并修复引导。
## Requirements
- GParted Live ISO
- Target VM Backup (Mandatory)
## Execution Protocol
### Step 1: Internal Filesystem & LV Shrink
1. Boot GParted Live.
2. e2fsck -f /dev/mapper/VG-LV
3. resize2fs /dev/mapper/VG-LV {TargetSize}G
4. lvreduce -L {TargetSize}G /dev/mapper/VG-LV
### Step 2: Clear Disk Tail (The "Data Move" Skill)
1. Run pvs -v --segments /dev/sdaX to identify fragments.
2. If segments exist near the disk end:
pvmove --alloc anywhere /dev/sdaX:{Tail_Start}-{Tail_End}
3. Repeat until the last segment in pvs is "free".
### Step 3: Partition & Host Adjustment
1. GParted UI: Resize /dev/sdaX to {TargetSize + 5}G.
2. PVE Host Shell: lvreduce -L {FinalSize}G {Path_to_LV}
3. Edit /etc/pve/qemu-server/{VMID}.conf: Update size={FinalSize}G.
### Step 4: GPT Repair (Fix initramfs boot error)
1. gdisk /dev/sda
2. Key sequence: x -> e -> w -> Y.
## Error Handling
- "later ones are allocated": Execute Step 2 (pvmove).
- "initramfs prompt": Execute Step 4 (gdisk).
- "Storage not showing": Check Datacenter > Storage > Content (Enable "Disk image").
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。