lvreduce命令用于减少逻辑卷的容量。这是一个高风险操作,因为缩小逻辑卷可能破坏文件系统数据。操作必须按照正确的顺序:先卸载或检查文件系统 → 缩小文件系统 → 缩小逻辑卷 → 重新挂载。
lvreduce [选项] 逻辑卷路径 [大小]
| 选项 | 说明 |
|---|---|
-L, --size [-]大小 |
设置或减少逻辑卷大小(-表示减少) |
-l, --extents [-]数量 |
设置或减少逻辑卷的PE数量 |
-r, --resizefs |
同时缩小文件系统(仅部分文件系统支持) |
-t, --test |
测试模式,不实际执行 |
-f, --force |
强制缩小,跳过安全检查 |
--alloc |
指定分配策略(contiguous, cling, normal, anywhere) |
-A, --autobackup |
自动备份元数据 |
-n, --nofsck |
跳过文件系统检查 |
--noudevsync |
不同步udev |
e2fsck或xfs_repair检查文件系统完整性# 将逻辑卷缩小到10GB
lvreduce -L 10G /dev/vg01/lv01
# 输出类似:
# WARNING: Reducing active logical volume to 10.00 GiB.
# THIS MAY DESTROY YOUR DATA (filesystem etc.)
# Do you really want to reduce vg01/lv01? [y/n]: y
# Size of logical volume vg01/lv01 changed from 20.00 GiB (5120 extents) to 10.00 GiB (2560 extents).
# Logical volume vg01/lv01 successfully resized.
# 减少5GB空间
lvreduce -L -5G /dev/vg01/lv01
# 减少到剩余空间的50%
lvreduce -L 50%VG /dev/vg01/lv01
# 使用PE数量减少(减少512个PE,假设PE大小为4MB,即减少2GB)
lvreduce -l -512 /dev/vg01/lv01
# 1. 备份数据(非常重要!)
rsync -av /data/ /backup/data_backup/
# 2. 检查当前大小
df -h /data
lvs /dev/vg01/lv01
# 3. 检查文件系统完整性
umount /data
e2fsck -f /dev/vg01/lv01
# 4. 缩小文件系统到15GB(必须先于逻辑卷缩小)
resize2fs /dev/vg01/lv01 15G
# 5. 缩小逻辑卷到15GB
lvreduce -L 15G /dev/vg01/lv01
# 6. 重新挂载并验证
mount /dev/vg01/lv01 /data
df -h /data
e2fsck -f /dev/vg01/lv01
# XFS无法直接缩小,需要以下流程:
# 1. 备份数据
mkdir /backup
xfsdump -l 0 -f /backup/data_backup.img /data
# 2. 卸载文件系统
umount /data
# 3. 删除原逻辑卷
lvremove /dev/vg01/lv01
# 4. 创建较小尺寸的新逻辑卷(例如从20G缩小到15G)
lvcreate -L 15G -n lv01 vg01
# 5. 创建XFS文件系统
mkfs.xfs /dev/vg01/lv01
# 6. 挂载并恢复数据
mount /dev/vg01/lv01 /data
xfsrestore -f /backup/data_backup.img /data
# 测试模式:显示将要执行的操作但不实际执行
lvreduce -t -L -5G /dev/vg01/lv01
# 输出示例:
# TEST MODE: Metadata will NOT be updated and volumes will not be (de)activated.
# TEST MODE: Would reduce logical volume vg01/lv01 to 15.00 GiB.
# 强制缩小,跳过确认提示
lvreduce -f -L 10G /dev/vg01/lv01
# 强制缩小并自动备份元数据
lvreduce -f -A y -L 10G /dev/vg01/lv01
# 缩小到当前大小的50%
lvreduce -L 50%ORIGIN /dev/vg01/lv01
# 缩小到卷组空间的10%
lvreduce -L 10%VG /dev/vg01/lv01
# 缩小到指定大小并保持相对比例
lvreduce -l 50% /dev/vg01/lv01
| 文件系统 | 缩小命令 | 支持情况 | 注意事项 |
|---|---|---|---|
| ext2/ext3/ext4 | resize2fs 设备名 新大小 |
支持 | 必须先卸载或进入单用户模式 |
| XFS | 不支持在线缩小 |
不支持 | 必须备份数据→删除卷→创建新卷→恢复数据 |
| btrfs | btrfs filesystem resize 大小 挂载点 |
支持 | 支持在线缩小,但需要内核3.2+ |
| swap | swapoff → mkswap → swapon |
有限支持 | 需要先禁用swap分区 |
| NTFS | ntfsresize -s 大小 设备名 |
支持 | 需要安装ntfs-3g,建议在Windows中操作 |
#!/bin/bash
# 缩小前的安全检查脚本
LV_PATH="/dev/vg01/lv01"
MOUNT_POINT="/data"
NEW_SIZE="15G"
echo "=== 逻辑卷缩小安全检查 ==="
echo "目标逻辑卷: $LV_PATH"
echo "挂载点: $MOUNT_POINT"
echo "目标大小: $NEW_SIZE"
# 1. 检查是否已备份
read -p "是否已备份重要数据?(y/n): " backed_up
if [ "$backed_up" != "y" ]; then
echo "错误:请先备份数据!"
exit 1
fi
# 2. 检查挂载状态
if mount | grep -q "$MOUNT_POINT"; then
echo "警告:文件系统已挂载在 $MOUNT_POINT"
read -p "是否继续卸载?(y/n): " unmount
if [ "$unmount" = "y" ]; then
umount $MOUNT_POINT || {
echo "卸载失败!"
exit 1
}
else
echo "操作取消"
exit 0
fi
fi
# 3. 检查文件系统类型
FS_TYPE=$(blkid -o value -s TYPE $LV_PATH 2>/dev/null)
echo "文件系统类型: $FS_TYPE"
# 4. 检查可用空间(对于ext文件系统)
if [ "$FS_TYPE" = "ext4" ] || [ "$FS_TYPE" = "ext3" ] || [ "$FS_TYPE" = "ext2" ]; then
echo "检查文件系统使用情况..."
e2fsck -f $LV_PATH
MIN_SIZE=$(resize2fs -P $LV_PATH 2>&1 | grep minimum | awk '{print $7}')
if [ -n "$MIN_SIZE" ]; then
echo "文件系统最小需要: ${MIN_SIZE}个4K块"
# 转换为GB
MIN_SIZE_GB=$(echo "$MIN_SIZE * 4 / 1024 / 1024" | bc)
echo "约等于 ${MIN_SIZE_GB}GB"
fi
fi
# 5. 检查逻辑卷当前大小
CURRENT_SIZE=$(lvs --noheadings --units g -o lv_size $LV_PATH | awk '{print $1}')
echo "当前逻辑卷大小: ${CURRENT_SIZE}G"
echo "=== 检查完成 ==="
read -p "是否继续缩小操作?(y/n): " proceed
if [ "$proceed" = "y" ]; then
echo "可以继续执行缩小操作"
else
echo "操作取消"
fi
原因:文件系统中已有数据占用的空间超过了要缩小到的大小。
解决方案:
df -hresize2fs -P查看最小可能大小# 查看ext文件系统最小可能大小
resize2fs -P /dev/vg01/lv01
# 输出示例:
# Estimated minimum size of the filesystem: 1234567
预防措施:
恢复尝试:
testdisk、photorec警告:缩小根分区非常危险,建议只在以下情况操作:
步骤:
# 1. 使用Live CD/USB启动系统
# 2. 激活LVM卷组
vgchange -ay
# 3. 检查根分区文件系统
e2fsck -f /dev/centos/root
# 4. 缩小文件系统
resize2fs /dev/centos/root 20G
# 5. 缩小逻辑卷
lvreduce -L 20G /dev/centos/root
# 6. 重新启动系统
reboot
lvextend扩展逻辑卷
lvresize调整逻辑卷大小(扩展或缩小)
resize2fs调整ext2/3/4文件系统大小
e2fsck检查ext2/3/4文件系统完整性
-t测试模式先验证操作vgcfgbackup