1. 故障背景

  • 现象:服务器根目录 / 使用率达到 100%,导致服务(如 Docker)无法正常运行。
  • 环境Ubuntu 26.04 (Resolute) 采用 LVM 逻辑卷管理。
  • 物理磁盘sda (25G),分区 sda3 (23G)。
  • 当前状态:逻辑卷 ubuntu--vg-ubuntu--lv 仅分配了约 11.5G,而物理分区 sda3 有 23G,存在大量未分配空间。

2. 排查思路(如何看出来的?)

通过对比 df -hlsblk 两个命令的输出差异来定位问题:

  1. 看文件系统 (df -h)
    • 发现 /dev/mapper/ubuntu--vg-ubuntu--lv 总大小仅为 12G,且已用 100%
  2. 看块设备结构 (lsblk)
    • 找到父级分区 sda3,其大小为 23G
    • 发现子级逻辑卷 ubuntu--vg-ubuntu--lv 大小仍为 11.5G
  3. 得出结论
    • $23\text{G} (\text{物理}) - 11.5\text{G} (\text{逻辑}) \approx 11.5\text{G}$。
    • 结论:物理分区有足够的剩余空间,只是没有划分给逻辑卷,也还没有扩展文件系统。这是一个典型的 LVM 在线扩容场景。

3. 解决方案(操作步骤)

第一步:确认文件系统类型

在操作前必须确认是 ext4 还是 xfs,因为两者的扩容命令不同。

df -T /

输出示例:
/dev/mapper/ubuntu--vg-ubuntu--lv ext4 ... (如果是 xfs 则显示 xfs)

第二步:扩展逻辑卷 (LV)

将卷组 (VG) 中所有剩余的空闲空间全部分配给根目录逻辑卷。此操作即时生效,无需卸载。

# -l +100%FREE 表示使用所有剩余空闲空间
sudo lvextend -l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv
第三步:扩展文件系统

逻辑卷变大后,文件系统还不知道,需要刷新文件系统边界。根据第一步的结果选择命令:

  • 如果是 ext4 文件系统:

    sudo resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv
    
  • 如果是 xfs 文件系统:

    # 注意:xfs_growfs 后面跟的是挂载点 /,而不是设备路径
    sudo xfs_growfs /
    
第四步:验证结果

再次检查磁盘使用情况,确认容量已增加且使用率下降。

df -h

4. 避坑指南 & 知识点

  1. 无需重启:LVM 扩容和文件系统在线调整都是热操作,不需要重启服务器,也不会影响正在运行的业务(如 Nginx, MySQL)。
  2. 数据安全:虽然 LVM 扩容非常成熟且安全,但在生产环境操作前,强烈建议对重要数据进行快照或备份
  3. Docker 存储位置:本次扩容解决了根目录满的问题。如果 Docker 数据量极大,未来建议将 Docker 的 data-root 迁移到独立的数据盘(如 /data),避免再次撑爆根目录。
  4. 命令区别记忆
    • resize2fs (ext4) -> 接设备路径 (/dev/mapper/...)
    • xfs_growfs (xfs) -> 接挂载点 (/)

这一份笔记,方便后续快速回顾和参考。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐