lvextend命令用于增加逻辑卷的容量。它可以在逻辑卷已经包含文件系统的情况下进行在线扩展,无需卸载文件系统或重启系统。通常与resize2fs(ext2/3/4)或xfs_growfs(XFS)命令结合使用来扩展文件系统。
lvextend [选项] 逻辑卷路径 [大小]
| 选项 | 说明 |
|---|---|
-L, --size [+]大小 |
设置或增加逻辑卷大小(+表示增加,-表示减少) |
-l, --extents [+]数量 |
设置或增加逻辑卷的PE数量 |
-r, --resizefs |
同时扩展文件系统(推荐) |
-t, --test |
测试模式,不实际执行 |
-f, --force |
强制扩展,跳过安全检查 |
--alloc |
指定分配策略(contiguous, cling, normal, anywhere) |
--poolmetadatasize |
指定精简池元数据大小 |
--use-policies |
使用分配策略 |
-n, --nofsck |
跳过文件系统检查 |
| 单位 | 说明 | 示例 |
|---|---|---|
k, K |
千字节(Kilobytes) | 1024K |
m, M |
兆字节(Megabytes) | 512M |
g, G |
千兆字节(Gigabytes) | 10G |
t, T |
太字节(Terabytes) | 2T |
% |
百分比 | 50%VG(卷组空间的50%) |
%FREE |
剩余空间的百分比 | +100%FREE(使用所有剩余空间) |
%ORIGIN |
原始卷大小的百分比 | +50%ORIGIN(增加原始大小的50%) |
将逻辑卷扩展到指定大小:
# 将逻辑卷扩展到20GB
lvextend -L 20G /dev/vg01/lv01
# 如果有足够的空间,输出类似:
# Size of logical volume vg01/lv01 changed from 10.00 GiB (2560 extents) to 20.00 GiB (5120 extents).
# Logical volume vg01/lv01 successfully resized.
# 增加5GB空间(相对当前大小)
lvextend -L +5G /dev/vg01/lv01
# 减少2GB空间(慎用)
lvextend -L -2G /dev/vg01/lv01
# 输出示例:
# Size of logical volume vg01/lv01 changed from 20.00 GiB (5120 extents) to 25.00 GiB (6400 extents).
# 扩展逻辑卷并自动调整文件系统大小(支持ext2/3/4、xfs等)
lvextend -r -L +10G /dev/vg01/lv01
# 输出示例(同时显示文件系统扩展):
# Size of logical volume vg01/lv01 changed from 25.00 GiB (6400 extents) to 35.00 GiB (8960 extents).
# Logical volume vg01/lv01 successfully resized.
# resize2fs 1.45.5 (07-Jan-2020)
# Filesystem at /dev/mapper/vg01-lv01 is mounted on /data; on-line resizing required
# old_desc_blocks = 3, new_desc_blocks = 5
# The filesystem on /dev/mapper/vg01-lv01 is now 9175040 (4k) blocks long.
# 查看当前PE大小
vgdisplay vg01 | grep "PE Size"
# 增加256个PE(假设PE大小为4MB,即增加1GB)
lvextend -l +256 /dev/vg01/lv01
# 设置总PE数量为5120
lvextend -l 5120 /dev/vg01/lv01
# 使用卷组剩余空间的所有空间
lvextend -l +100%FREE /dev/vg01/lv01
# 使用卷组总空间的50%
lvextend -L +50%VG /dev/vg01/lv01
# 增加原始大小的100%(大小翻倍)
lvextend -L +100%ORIGIN /dev/vg01/lv01
# 扩展精简池中的逻辑卷
lvextend -L +5G /dev/vg01/thin_lv
# 扩展精简池本身
lvextend -L +20G /dev/vg01/thin_pool
# 输出示例:
# Size of logical volume vg01/thin_lv changed from 10.00 GiB (2560 extents) to 15.00 GiB (3840 extents).
# Logical volume vg01/thin_lv successfully resized.
# 测试模式:显示将要执行的操作但不实际执行
lvextend -t -L +5G /dev/vg01/lv01
# 强制扩展(跳过安全检查)
lvextend -f -L +5G /dev/vg01/lv01
# 跳过文件系统检查
lvextend -n -L +5G /dev/vg01/lv01
# 指定使用特定的物理卷进行扩展
lvextend /dev/vg01/lv01 /dev/sdb1
# 使用多个物理卷
lvextend /dev/vg01/lv01 /dev/sdb1 /dev/sdc1
# 指定特定区域的扩展
lvextend --alloc anywhere /dev/vg01/lv01 /dev/sdb1
df -h /data
lvs /dev/vg01/lv01
vgs vg01
lvextend -L +10G /dev/vg01/lv01
resize2fs /dev/vg01/lv01
xfs_growfs /data
lvextend -r -L +10G /dev/vg01/lv01
df -h /data
lvs /dev/vg01/lv01
| 文件系统 | 扩展命令 | 注意事项 |
|---|---|---|
| ext2/ext3/ext4 | resize2fs 设备名 |
支持在线扩展,不需要卸载 |
| XFS | xfs_growfs 挂载点 |
必须指定挂载点,支持在线扩展 |
| btrfs | btrfs filesystem resize 大小 挂载点 |
支持在线扩展和收缩 |
| swap | swapoff → mkswap → swapon |
需要先禁用swap |
解决方案:先扩展卷组或添加新的物理卷
# 检查卷组可用空间
vgs
# 扩展卷组(添加新的物理卷)
vgextend vg01 /dev/sdd1
# 然后再次尝试扩展逻辑卷
lvextend -L +10G /dev/vg01/lv01
解决方案:需要手动扩展文件系统
# 对于ext2/3/4文件系统
resize2fs /dev/vg01/lv01
# 对于XFS文件系统
xfs_growfs /data
# 或者使用-r选项一次性完成
lvextend -r -L +10G /dev/vg01/lv01
步骤:
# 1. 检查当前根分区信息
df -h /
lsblk
# 2. 扩展逻辑卷(假设根分区在/dev/centos/root)
lvextend -r -L +5G /dev/centos/root
# 3. 如果使用initrd,可能需要重建
dracut --force
# 4. 重启系统验证
reboot
lvreduce缩小逻辑卷
lvresize调整逻辑卷大小(扩展或缩小)
vgextend扩展卷组
resize2fs扩展ext2/3/4文件系统
#!/bin/bash
# 自动扩展逻辑卷脚本
LV_PATH="/dev/vg01/lv01"
MOUNT_POINT="/data"
EXTEND_SIZE="5G"
echo "开始扩展逻辑卷..."
echo "当前空间使用情况:"
df -h $MOUNT_POINT
# 检查卷组是否有足够空间
VG_NAME=$(echo $LV_PATH | cut -d'/' -f3)
VG_FREE=$(vgs --noheadings --units g -o vg_free $VG_NAME | awk '{print $1}')
if (( $(echo "$VG_FREE < 5" | bc -l) )); then
echo "错误:卷组 $VG_NAME 可用空间不足(仅剩 ${VG_FREE}G)"
exit 1
fi
# 扩展逻辑卷和文件系统
echo "正在扩展逻辑卷 $LV_PATH ..."
if lvextend -r -L +$EXTEND_SIZE $LV_PATH; then
echo "逻辑卷扩展成功"
echo "扩展后空间使用情况:"
df -h $MOUNT_POINT
else
echo "逻辑卷扩展失败"
exit 1
fi
#!/bin/bash
# 监控磁盘空间并自动扩容
THRESHOLD=80 # 使用率阈值(%)
LV_PATH="/dev/vg01/app_lv"
MOUNT_POINT="/app"
# 获取当前使用率
USAGE=$(df -h $MOUNT_POINT | tail -1 | awk '{print $5}' | sed 's/%//')
if [ $USAGE -gt $THRESHOLD ]; then
echo "磁盘使用率 $USAGE% 超过阈值 $THRESHOLD%,开始自动扩容..."
# 计算需要扩展的大小(增加当前大小的20%)
CURRENT_SIZE=$(lvs --noheadings --units g -o lv_size $LV_PATH | awk '{print $1}')
EXTEND_SIZE=$(echo "$CURRENT_SIZE * 0.2" | bc | awk '{printf "%.1fG\n", $1}')
# 扩展逻辑卷
if lvextend -r -L +$EXTEND_SIZE $LV_PATH; then
echo "自动扩容成功,增加了 $EXTEND_SIZE"
# 发送通知
echo "逻辑卷 $LV_PATH 已自动扩展 $EXTEND_SIZE" | mail -s "磁盘自动扩容通知" admin@example.com
else
echo "自动扩容失败"
fi
else
echo "磁盘使用率正常:$USAGE%"
fi