解决Docker存储空间不足问题

news2025/6/2 4:13:19

虚拟机磁盘扩展实战:解决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交互模式虽然需要额外学习,但提供了更直观和安全的分区管理方式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2393526.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于SpringBoot的商家销售管理网站的设计与实现

湖南软件职业技术大学 本科毕业设计(论文) 设计(论文)题目 基于SpringBoot的商家销售管理网站的设计与实现 学生姓名 学生学号 所在学院 专业班级 校内指导教师 企业指导教师 毕业设计(论文)真实性承诺及声明 学生对毕业设计(论文)真实性承诺 本人郑重声明:所提交的毕…

word中表格拉不动以及插入图片有间距

1、word中表格插入图片始终有间隙,怎么调表格高度和宽度都消除不了间隙,如下所示: 可以在表布局—单元格边距—修改上下左右边距为0即可 2、经过上述调整后左右没有间隔了,但图片上下有间隔,直觉是行距问题&#xff0c…

【Java学习笔记】接口

接口 应用场景引出 一、接口的介绍 1. 接口的基本结构 interface 接口名{属性抽象方法 }引出关键字:implements 2. 子类实现接口 class a implements 接口名{}3. 接口中的属性说明:属性默认是public static final修饰的 (1)f…

代码随想录打卡|Day50 图论(拓扑排序精讲 、dijkstra(朴素版)精讲 )

图论part08 拓扑排序精讲 代码随想录讲解链接 题目链接 思路 在这个题目之中,个别文件的处理依赖于别的文件,因此,文件的处理顺序十分重要。我们用图来表示文件的处理顺序,文件s指向文件t,则说明如果要正确的处理文…

SI24R05国产低功耗2.4GHz+125K低频唤醒SoC人员定位/畜牧业牛羊定位/资产管理定位方案芯片

目录 SI24R05简介功能框图 主要特性开发工具方案特性 SI24R05简介 Si24R05 是一款高度集成的低功耗 SOC 芯片,具有低功耗、Low Pin Count、 宽电压工作范围,集成了 13/14/15/16 位精度的 ADC、LVD、UART、SPI、I2C、TIMER、WUP、IWDG、RTC、无线收发器、…

基于ELK的分布式日志实时分析与可视化系统设计

目录 一、ELK平台介绍 1.ELK概述 2.Elasticsearch 3.Logstash 4.Kibana 二、部署ES群集 1.资源清单 2.基本配置 3.安装Elasticsearch(elk1上、elk2上、elk3上) 4.安装logstash(elk1上) 5.Filebeat 6.安装Kibana&#x…

酒店管理系统设计与实现

本科毕业设计(论文) 设计(论文)题目 酒店管理系统设计与实现 学生姓名 学生学号 所在学院 专业班级 校内指导教师 李建 企业指导教师 毕业设计(论文)真实性承诺及声明 学生对毕业设计(论文)真实性承诺 本人郑重声明:所提交的毕业设计(论文)作品是本人在指导教师的指…

OpenCV---pointPolygonTest

一、基本概念与用途 pointPolygonTest 是 OpenCV 中用于判断点与多边形关系的重要函数,常用于: 目标检测:判断像素点是否属于检测到的轮廓区域碰撞检测:检测物体是否重叠图像分割:确定点是否在分割区域内几何分析&am…

Qt 的简单示例 -- 地址簿

这个工程里有两个窗口,都是QWidget派生的窗口 主窗口: 1. 运用了布局,按钮控件,单行编辑框,富文本编辑框等窗口部件; 2. 运用了 QMap 类; 3. 实现了点击按钮弹出子窗口的功能,这里子…

什么是DevOps的核心目标?它如何解决传统开发与运维之间的冲突?​

在当今数字化转型加速的时代,DevOps 已成为软件开发领域备受瞩目的明星理念。今天,本文将聚焦于 DevOps 的核心目标,并深入探讨它如何巧妙化解传统开发与运维之间的冲突,为大家揭开 DevOps 的神秘面纱并分享实用经验。本次介绍的与…

Android studio 查看aar源码出现/* compiled code */

如图查看aar源码时看不到具体实现,在排除是sdk版本导致的问题后,下面说解决方法 打开设置,找到插件 输入decompiler 搜索 这个是自带的反编译工具,启用就好了

用HTML5+JavaScript实现汉字转拼音工具

用HTML5JavaScript实现汉字转拼音工具 前一篇博文(https://blog.csdn.net/cnds123/article/details/148067680)提到,当需要将拼音添加到汉字上面时,用python实现比HTML5JavaScript实现繁琐。在这篇博文中用HTML5JavaScript实现汉…

基于Java,SpringBoot,Vue,UniAPP医院预约挂号买药就诊病例微信小程序系统设计

摘要 随着医疗信息化的不断推进以及“互联网医疗”模式的广泛普及,传统医院挂号流程中存在的排队时间长、资源分配不均等问题日益凸显,急需通过数字化手段加以解决。本研究设计并实现了一套基于Java、SpringBoot、Vue与UniAPP技术栈的医院预约挂号微信小…

ONNX模型的动态和静态量化

引言  通常我们将模型转换为onnx格式之后,模型的体积可能比较大,这样在某些场景下就无法适用。最近想在移动端部署语音识别、合成模型,但是目前的效果较好的模型动辄几个G,于是便想着将模型压缩一下。本文探索了两种压缩方法&…

如何用Python抓取Google Scholar

文章目录 [TOC](文章目录) 前言一、为什么要抓取Google Scholar?二、Google Scholar 抓取需要什么三、为什么代理对于稳定的抓取是必要的四、一步一步谷歌学者抓取教程4.1. 分页和循环4.2. 运行脚本 五、完整的Google Scholar抓取代码六、抓取Google Scholar的高级提…

Wireshark对usb设备进行抓包找不到USBPcap接口的解决方案

引言 近日工作需要针对usb设备进行抓包,但按照wireshark安装程序流程一步步走,即使勾选了安装USBPcap安装完成后开启wireshark依然不显示USBPcap接口,随设法进行解决。 最终能够正常显示USBPcap接口并能够正常使用进行抓包 解决方案&#x…

Socket 编程 UDP

目录 1. UDP网络编程 1.1 echo server 1.1.1 接口 1.1.1.1 创建套接字 1.1.1.2 绑定 1.1.1.3 bzero 1.1.1.4 htons(主机序列转网络序列) 1.1.1.5 inet_addr(主机序列IP转网络序列IP) 1.1.1.6 recvfrom(让服务…

Jenkins实践(8):服务器A通过SSH调用服务器B执行Python自动化脚本

Jenkins实践(8):服务器A通过SSH调用服务器B执行Python自动化脚本 1、需求: 1、Jenkins服务器在74上,Python脚本在196服务器上 2、需要在服务器74的Jenkins上调用196上的脚本执行Python自动化测试 2、操作步骤 第一步:Linux Centos7配置SSH免密登录 Linux Centos7配置S…

lua的注意事项2

总之,下面的返回值不是10,a,b 而且

前端八股之HTML

前端秘籍-HTML篇 1. src和href的区别 src 用于替换当前元素,href 用于在当前文档和引用资源之间确立联系。 (1)src src 是 source 的缩写,指向外部资源的位置,指向的内容将会嵌入到文档中当前标签所在位置&#xff1…