当前位置: 首页 > news >正文

解决Docker存储空间不足问题

虚拟机磁盘扩展实战:解决Docker存储空间不足问题

问题背景

在虚拟机中运行的Linux系统上,Docker服务因根分区空间不足而无法正常运行。初始状态如下:

[root@localhost ~]# df -h /
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   17G   17G  983M   95% /[root@localhost ~]# docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          8         7         3.914GB   260.4MB
Containers      8         4         6.741GB   18.13kB

根分区使用率已达95%,仅剩983MB空间,导致Docker无法正常工作。

完整解决方案

步骤1:安装parted工具(如未安装)

# 检查parted是否已安装
which parted || echo "parted not installed"# 安装parted工具
sudo yum install -y parted  # CentOS/RHEL
# 或
sudo apt-get install -y parted  # Ubuntu/Debian# 验证安装
sudo parted --version

步骤2:扩展虚拟机磁盘

  1. 关闭虚拟机
  2. 在虚拟机管理软件中:
    • VMware: 虚拟机设置 → 硬盘 → 扩展
    • VirtualBox: 设置 → 存储 → 调整大小
    • 将磁盘从30GB扩展到53.7GB
  3. 启动虚拟机

步骤3:进入parted交互模式

# 启动parted工具(需要root权限)
sudo parted /dev/sda

步骤4:parted交互操作指南

在parted交互模式中,按顺序执行以下命令:

# 1. 查看当前分区信息
(parted) print# 2. 调整分区大小(注意:100%后不要添加任何注释)
(parted) resizepart 2 100%# 3. 确认分区已扩展
(parted) print# 4. 退出parted
(parted) quit

关键操作截图

(parted) print  # 执行前
Number  Start   End     Size    Type     File system  标志
1      1049kB  1075MB  1074MB  primary  xfs          启动
2      1075MB  30.0GB  28.9GB  primary               lvm(parted) resizepart 2 100%  # 正确执行(parted) print  # 执行后
Number  Start   End     Size    Type     File system  标志
1      1049kB  1075MB  1074MB  primary  xfs          启动
2      1075MB  53.7GB  52.6GB  primary               lvm

步骤5:更新分区表

# 强制内核重新读取分区表
sudo partprobe -s /dev/sda
sudo udevadm settle# 确认分区已扩展
sudo fdisk -l /dev/sda

预期输出

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200   104857599    51379200   8e  Linux LVM

步骤6:扩展物理卷(PV)

# 强制物理卷使用整个分区空间
sudo pvresize /dev/sda2# 验证PV大小
sudo pvdisplay /dev/sda2

检查关键值

  • PV Size 应接近53.7GB
  • Free PE 应有大量空间

步骤7:扩展逻辑卷(LV)和文件系统

# 查看卷组可用空间
sudo vgdisplay centos | grep "Free"# 将所有空闲空间分配给根逻辑卷
sudo lvextend -l +100%FREE /dev/mapper/centos-root# 扩展XFS文件系统
sudo xfs_growfs /dev/mapper/centos-root# 验证最终结果
df -h /

成功验证

操作完成后,系统显示:

[root@localhost ~]# df -h /
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   54G   17G   37G   32% /[root@localhost ~]# docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          8         7         3.914GB   260.4MB
Containers      8         4         6.741GB   18.13kB

根分区从17GB扩展到54GB,Docker存储空间不足问题得到解决。

Parted交互模式详解

什么是parted交互模式?

parted是一个磁盘分区工具,提供两种使用方式:

  1. 命令行模式:sudo parted /dev/sda resizepart 2 100%
  2. 交互模式:通过sudo parted /dev/sda进入,然后输入命令

为什么使用交互模式?

  1. 更直观:每一步操作都有明确提示
  2. 更安全:操作前可预览更改
  3. 更灵活:支持多种磁盘操作命令

常用交互命令:

命令功能示例
print显示分区表(parted) print
resizepart调整分区大小(parted) resizepart 2 100%
rm删除分区(parted) rm 3
mkpart创建新分区(parted) mkpart primary 30GB 100%
quit退出交互模式(parted) quit

关键要点

  1. 操作顺序至关重要

    • 先扩展虚拟机磁盘
    • 再扩展Linux分区
    • 最后扩展LVM和文件系统
  2. parted命令注意事项

    # 正确命令(简洁无注释)
    (parted) resizepart 2 100%# 错误命令(会导致失败)
    (parted) resizepart 2   # 选择要调整的分区(这里是分区2)
    
  3. LVM扩展逻辑

    物理磁盘 → 分区 → 物理卷(PV) → 卷组(VG) → 逻辑卷(LV) → 文件系统
    
  4. XFS文件系统特性

    • 支持在线扩展(无需卸载)
    • 使用xfs_growfs命令扩展

常见问题解决方案

问题1:parted未安装

# CentOS/RHEL
sudo yum install -y parted# Ubuntu/Debian
sudo apt-get update && sudo apt-get install -y parted

问题2:parted命令无效

# 确保使用正确语法
(parted) help resizepart  # 查看命令帮助# 使用绝对路径
/sbin/parted /dev/sda

问题3:空间未完全释放

# 清理Docker无用数据
docker system prune -af# 清理系统日志
sudo journalctl --vacuum-size=200M
sudo rm -rf /var/log/journal/*

问题4:parted无法调整分区

使用fdisk替代方案:

# 备份分区表
sudo sfdisk -d /dev/sda > sda.bak# 进入fdisk交互模式
sudo fdisk /dev/sda# 在fdisk中执行:
d      # 删除分区
2      # 选择分区2
n      # 新建分区
p      # 主分区
2      # 分区号2
2099200 # 起始扇区(必须相同!)
Enter  # 使用默认结束位置(整个磁盘)
t      # 更改类型
2      # 选择分区2
8e     # Linux LVM 类型
w      # 写入更改

总结

通过本指南,您成功实现了:

  1. parted工具的安装与使用
  2. 虚拟机磁盘从30GB扩展到53.7GB
  3. Linux分区扩展到整个可用空间
  4. LVM物理卷和逻辑卷的扩展
  5. XFS文件系统的在线扩展
  6. Docker存储空间不足问题的解决

经验提示:在生产环境中操作前,务必对虚拟机进行快照备份,以防操作失误导致数据丢失。parted交互模式虽然需要额外学习,但提供了更直观和安全的分区管理方式。

相关文章:

  • Redis 数据恢复的月光宝盒,闪回到任意指定时间
  • powershell 中 invoke-expression 报错解决
  • 机器视觉运动控制一体机在背靠背点胶焊锡机上的应用
  • ESP32-C3 Vscode+ESP-IDF开发环境搭建 保姆级教程
  • Apache SeaTunnel部署技术详解:模式选择、技巧与最佳实践
  • 数学建模之最短路径问题
  • 历年南京大学计算机保研上机真题
  • 应用系统适配瀚高报错:字段为numeric,但是表达式为varchar(APP)
  • LearnOpenGL-笔记-其十一
  • Ubuntu开机自动运行Docker容器中的Qt UI程序
  • Prometheus安装及使用(二进制方式)
  • ansible-playbook 进阶 接上一章内容
  • pikachu通关教程-目录遍历漏洞(../../)
  • 【AI-安装指南】Redis Stack 的安装与使用
  • LNMP环境中php7.2升级到php7.4
  • [JVM] JVM内存调优
  • SQL面试提问 :如何计算每个月的订单数量和总金额以及与上个月相比的环比增长率
  • TCP通信与MQTT协议的关系
  • HAProxy 可观测性最佳实践
  • Maven---配置本地仓库
  • 无锡网络公司服务平台/我赢seo
  • wordpress表单收集/优化设计方法
  • wordpress gitbook/seo优化师培训
  • 石家庄建站程序/做网站推广一般多少钱
  • 网站建设南京/seo实战密码在线阅读
  • 自己做的网站怎么放视频教程/网站网址大全