扩展根分区
当前情况分析
根据之前提供的 vgdisplay
输出:
- 卷组
cl
的总大小为 ~1.82TB。 - 已分配了几乎所有的空间(仅剩 1 个 PE,即 4MB)。
因此,在缩小 /home
分区并释放空间之前,无法直接扩展根分区。
解决方案
我们需要先执行以下步骤:
- 备份
/home
数据 并确保数据安全。 - 缩小
/home
逻辑卷 并释放空间回到卷组中。 - 使用释放的空间扩展根分区。
以下是更新后的脚本,它将完成这些步骤,并确保有足够的空间进行扩展。
#!/bin/bash# 设置变量
HOME_BACKUP_DIR="/backup/home_backup"
BACKUP_FILE="${HOME_BACKUP_DIR}/home_backup.tar.gz"
ROOT_TARGET_SIZE="+450G" # 增加到目标大小 (当前大小基础上增加)
HOME_NEW_SIZE="1T" # 新的 home 分区大小
VG_NAME="cl" # 卷组名称
LV_HOME_NAME="home" # home 逻辑卷名称
LV_ROOT_NAME="root" # root 逻辑卷名称
LV_HOME_PATH="/dev/mapper/${VG_NAME}-${LV_HOME_NAME}"
LV_ROOT_PATH="/dev/mapper/${VG_NAME}-${LV_ROOT_NAME}"echo "开始执行自动化脚本..."# 创建备份目录
mkdir -p $HOME_BACKUP_DIR || { echo "创建备份目录失败"; exit 1; }# 备份 /home 数据
echo "正在备份 /home 数据..."
tar czf $BACKUP_FILE -C / home || { echo "备份 /home 数据失败"; exit 1; }
echo "/home 数据备份完成"# 检查 /home 是否挂载
if mountpoint -q /home; thenecho "/home 已挂载,正在卸载..."umount /home || { echo "卸载 /home 失败"; exit 1; }
elseecho "/home 当前未挂载,跳过卸载步骤。"
fi# 检查文件系统一致性
echo "检查 XFS 文件系统的一致性..."
xfs_repair -n $LV_HOME_PATH || { echo "检查 XFS 文件系统失败"; exit 1; }
echo "XFS 文件系统检查完成"# 缩小 XFS 文件系统至新大小
echo "缩小 XFS 文件系统至 ${HOME_NEW_SIZE}..."
# 注意:XFS 不支持直接缩小,所以需要删除并重新创建逻辑卷
lvremove $LV_HOME_PATH -y || { echo "删除旧的 cl-home 逻辑卷失败"; exit 1; }
echo "旧的 cl-home 逻辑卷已删除"# 创建新的 cl-home 逻辑卷
echo "创建新的 cl-home 逻辑卷..."
lvcreate -L ${HOME_NEW_SIZE} -n ${LV_HOME_NAME} ${VG_NAME} || { echo "创建新的 cl-home 逻辑卷失败"; exit 1; }
echo "新的 cl-home 逻辑卷已创建"# 格式化新的 cl-home 逻辑卷为 XFS 文件系统
echo "格式化新的 cl-home 逻辑卷为 XFS 文件系统..."
mkfs.xfs $LV_HOME_PATH || { echo "格式化新的 cl-home 逻辑卷失败"; exit 1; }
echo "新的 cl-home 逻辑卷已格式化"# 挂载新的 cl-home 逻辑卷
echo "挂载新的 cl-home 逻辑卷..."
mount $LV_HOME_PATH /home || { echo "挂载新的 cl-home 逻辑卷失败"; exit 1; }
echo "新的 cl-home 逻辑卷已挂载"# 恢复 /home 数据
echo "正在恢复 /home 数据..."
tar xzf $BACKUP_FILE -C / || { echo "恢复 /home 数据失败"; exit 1; }
echo "/home 数据恢复完成"# 扩展根分区
echo "扩展根分区 (/)..."
lvextend -L ${ROOT_TARGET_SIZE} $LV_ROOT_PATH || { echo "扩展根分区失败"; exit 1; }
xfs_growfs / || { echo "扩展根分区文件系统失败"; exit 1; }
echo "根分区 (/) 已扩展"# 清理
rm -rf $HOME_BACKUP_DIR || { echo "清理备份文件失败"; exit 1; }echo "✅ 自动化脚本执行完成!"
关键点说明
- 备份和恢复数据:首先备份
/home
数据到一个临时目录,然后在调整完逻辑卷后恢复数据。 - 处理 XFS 文件系统:由于 XFS 不支持直接缩小,我们通过删除旧的逻辑卷并创建一个新的较小的逻辑卷来实现。
- 确保有足够的空间:通过缩小
/home
来释放空间,使得可以扩展根分区。
使用方法
- 将上述脚本保存为
resize_lvm_v2.sh
。 - 给予脚本执行权限:
chmod +x resize_lvm_v2.sh
- 以 root 用户身份运行脚本:
sudo ./resize_lvm_v2.sh
请确保在运行此脚本之前已经做好了充分的数据备份工作,以防意外发生。如果还有其他问题或需要进一步的帮助,请告诉我!