ubuntu将磁盘剩余空间自动分配指南

使用lsblk查看磁盘发现50G的sda有很多剩余空间没有使用

需求:将磁盘剩余空间自动分配给 /data 目录

效果:

操作指导文档:将磁盘剩余空间自动分配给 /data 目录

📌 适用于:Ubuntu / Debian 系统,使用 LVM,磁盘为 GPT 分区表,已有 sda1/sda2/sda3,剩余空间未分配。


🧭 一、目标

/dev/sda全部剩余空间 创建为新分区 sda4,加入现有 LVM 卷组 ubuntu-vg,并挂载到 /data 目录,实现:

  • ✅ 自动识别磁盘容量
  • ✅ 自动计算空闲空间起点和终点
  • ✅ 自动创建 LVM 分区 + 逻辑卷
  • ✅ 自动格式化并挂载
  • ✅ 自动写入 /etc/fstab 实现开机自启

⚠️ 二、重要前提

  1. 你当前系统已使用 LVM(卷组名通常是 ubuntu-vg
  2. 你有 root 权限或可使用 sudo
  3. 磁盘 /dev/sda 是 GPT 分区表,且有空闲空间(如截图所示:从 10.7GB 到 53.7GB)
  4. 操作前建议备份关键数据(虽安全,但谨慎无错)

🛠️ 三、完整操作步骤(按顺序执行)


✅ 步骤 1:手动修复 GPT 分区表(确保磁盘空间被正确识别)

bash 复制代码
sudo parted /dev/sda

进入交互模式后,依次输入:

bash 复制代码
print free
fix
quit

💡 当提示 "Not all of the space available to /dev/sda is used. Fix?" 时,输入 Fix(首字母大写)

这会将 GPT 表扩展至整个磁盘,避免后续"outside of device"错误。


✅ 步骤 2:保存并运行一键脚本(精准适配版 v2)

📜 脚本内容如下(复制保存为 extend-data-optimal-v2.sh):
bash 复制代码
#!/bin/bash
# extend-data-optimal-v2.sh - 自动扩展/data目录,动态计算空间余量

set -euo pipefail

echo "=== 开始执行: 扩展/data目录 (精准适配版 v2) ==="

[[ $EUID -ne 0 ]] && { echo "错误: 请使用 sudo 或 root 运行"; exit 1; }

PART_DEV=/dev/sda
VG_NAME=$(vgs --no-headings -o vg_name | head -n1 | xargs)

if [ -z "$VG_NAME" ]; then
    echo "错误: 未找到 LVM 卷组"
    exit 1
fi

echo "检测到卷组: $VG_NAME"

# ========== 1. 修复 GPT 分区表 ==========
echo "正在修复 GPT 分区表..."
(
echo fix
echo quit
) | parted "$PART_DEV" >/dev/null 2>&1 || true

sleep 2
partprobe "$PART_DEV"
sleep 2

# ========== 2. 获取磁盘真实总容量(单位 MB)==========
TOTAL_MB=$(blockdev --getsize64 "$PART_DEV" | awk '{print int($1/1024/1024)}')
echo "磁盘总容量: ${TOTAL_MB} MB"

# ========== 3. 获取 sda3 结束位置(即新分区起点)==========
START_MB=$(parted -s "$PART_DEV" unit MB print | grep "^ 3 " | awk '{print $3}' | tr -d 'MB')

if ! [[ "$START_MB" =~ ^[0-9]+$ ]]; then
    echo "错误: 无法获取 sda3 结束位置"
    exit 1
fi

echo "sda3 结束于: ${START_MB} MB"
echo "新分区将从 ${START_MB} MB 开始,到 ${TOTAL_MB} MB 结束"

# ========== 4. 创建 sda4 分区(LVM 类型)==========
sudo parted -s "$PART_DEV" mkpart primary ${START_MB}MB ${TOTAL_MB}MB
sudo parted -s "$PART_DEV" set 4 lvm on

sleep 2
partprobe "$PART_DEV"

# ========== 5. 加入 LVM ==========
sudo pvcreate /dev/sda4
sudo vgextend "$VG_NAME" /dev/sda4

# ========== 6. 创建 LV 并格式化 ==========
sudo lvcreate -l 100%FREE -n data "$VG_NAME"
sudo mkfs.ext4 "/dev/$VG_NAME/data"

# ========== 7. 挂载 ==========
sudo mkdir -p /data
sudo mount "/dev/$VG_NAME/data" /data

# ========== 8. 写入 fstab ==========
UUID=$(blkid -s UUID -o value "/dev/$VG_NAME/data")
echo "UUID=$UUID /data ext4 defaults 0 2" >> /etc/fstab

echo "✅ 成功完成!/data 已挂载全部剩余空间(约 $((${TOTAL_MB} - ${START_MB})) MB)。"
df -h /data

✅ 步骤 3:执行脚本

bash 复制代码
# 保存脚本
nano extend-data-optimal-v2.sh

# 赋予执行权限
chmod +x extend-data-optimal-v2.sh

# 执行脚本
sudo ./extend-data-optimal-v2.sh

🧪 四、验证结果

执行以下命令确认成功:

bash 复制代码
# 查看分区结构
lsblk

# 查看 /data 挂载点和容量
df -h /data

# 查看 fstab 是否写入
grep /data /etc/fstab

# 查看 LVM 状态
vgs
lvs
pvs

你应该看到:

  • /dev/sda4 存在,类型为 LVM
  • /dev/ubuntu-vg/data 挂载在 /data
  • 容量约为 40GB+(50G - 10.7G ≈ 39.3G,加上对齐误差)

📝 五、后续建议(可选)

1️⃣ 减少文件系统保留空间(释放更多可用空间)

bash 复制代码
sudo tune2fs -m 1 /dev/ubuntu-vg/data

→ 默认保留 5% 给 root,改为 1%,可多出约 2GB 可用空间。

2️⃣ 如果未来需要扩容

bash 复制代码
# 假设磁盘已扩容到 100G,只需重新运行脚本即可自动扩展
# 或手动扩展 LV:
sudo lvextend -L +10G /dev/ubuntu-vg/data
sudo resize2fs /dev/ubuntu-vg/data

📁 六、脚本备份与复用

bash 复制代码
# 备份脚本
cp extend-data-optimal-v2.sh ~/backup/

# 以后在其他服务器上可直接复制粘贴使用

❗ 七、常见问题排查

问题 解决方案
Error: The location ... is outside of the device 确保已执行 parted fix 修复 GPT
No such file or directory: /dev/sda4 等待 partprobe 刷新设备,或重启系统
vgextend: Volume group "ubuntu-vg" not found 使用 vgs 确认卷组名,替换脚本中 VG_NAME

✅ 八、总结

项目 状态
自动识别磁盘容量 ✅ ✔️
自动计算空闲空间 ✅ ✔️
自动创建分区 + LVM + LV ✅ ✔️
自动挂载 + fstab ✅ ✔️
安全可靠 ✅ ✔️

📌 你现在拥有一个独立、可扩展、开机自启的 /data 目录,可放心存储应用数据、日志、容器卷等。

如需支持多 VG、RAID、加密、或生成 PDF 版本,请告诉我,我可以为你定制更高级版本!


🎉 操作完成!你的系统现在更加健壮和灵活了!

相关推荐
invicinble1 小时前
对于后端要和linux打交道要掌握的点
linux·运维·python
leiming61 小时前
linux 进程学习之信号
linux·运维·学习
若风的雨1 小时前
linux Page Table 和 TLB 操作总结
linux
AlenTech1 小时前
如何解决Ubuntu中使用系统pip报错的问题,error: externally-managed-environment
linux·ubuntu·pip
被遗忘的旋律.2 小时前
Linux驱动开发笔记(二十四)——(上)IIO + icm20608驱动
linux·驱动开发·笔记
Y1rong2 小时前
刷机与系统启动
linux
zandy10112 小时前
衡石科技Agentic BI实战:基于自然语言查询与自动化分析的新一代智能系统
运维·科技·自动化·agentic bi
南梦浅2 小时前
[特殊字符]️ Docker 镜像加速器完整配置流程下面是在 CentOS 7 系统上配置 Docker 镜像加速器的完整步骤
linux·docker·centos
AiTEN_Robot2 小时前
机器人叉车的技术落地与效率挖掘:仓储自动化的效能提升方案
运维·机器人·自动化