服务器空间不足处理与解决思路—实战docker占用空间太大

news2024/12/26 23:47:48

前言

服务器Centos操作系统,空间不足的问题处理了三次了,决定把它的解决思路和处理过程记录下来。服务器空间不足是一个经常会遇到的问题,尤其是在大型应用程序和网站上。当服务器空间不足时,应该采取一些步骤来处理和解决这个问题。以下记录最近这次的解决方案和思路(原因:docker占用空间太大了)

现象

服务器空间不足会导致以下一些现象:

  1. 应用程序无法运行:当服务器空间不足时,某些应用程序可能会无法正常启动或运行,因为这些程序需要在硬盘上读取或写入数据。
  2. 文件上传失败:如果服务器的空间已经耗尽,用户可能会无法上传文件,因为没有足够的空间可供存储。
  3. 数据库出错:当服务器空间不足时,数据库可能会出现错误,因为数据库需要写入和读取数据到磁盘上。
  4. 日志文件无法写入:当服务器空间不足时,系统和应用程序的日志文件可能无法写入,这将使得故障排查和系统运行监控变得困难。
  5. 系统崩溃:如果服务器的空间不足并且无法处理数据和任务,可能会导致系统崩溃或宕机。

因此,保持足够的服务器空间是确保服务器运行稳定和高效的重要因素。

解决过程

一、服务器空间不足问题定位

  1. 登录服务器 ,可以通过运行一些命令,如df -hdu -h来检查服务器上的磁盘使用情况,查看哪些目录或文件夹占用了大量的空间。
1   [root@luntek tmp]# df -h
2   Filesystem      Size  Used Avail Use% Mounted on
3   devtmpfs        7.8G     0  7.8G   0% /dev
4   tmpfs           7.8G     0  7.8G   0% /dev/shm
5   tmpfs           7.8G  827M  7.0G  11% /run
6   tmpfs           7.8G     0  7.8G   0% /sys/fs/cgroup
7   /dev/vda1        40G   38G     0 100% /
8   /dev/vdb        656G  154G  469G  25% /mnt
9   tmpfs           1.6G     0  1.6G   0% /run/user/0
10   overlay          40G   38G     0 100% /var/lib/docker/overlay2/0e4870d22fb 1c79fd3c0b8ad2023475715a5a56c05b1900de76070d0a80e3001/merged
11   overlay          40G   38G     0 100% /var/lib/docker/overlay2/cd5f647aa8a eede41e2642d56dd346632718c8bc9b07e7bbd7f1cc6dcdea23b6/merged
12   overlay          40G   38G     0 100% /var/lib/docker/overlay2/f7eb94f2fd3 c4b37de3538f965ce64833b5b69a59616ef317833c7039ef5da78/merged
13   overlay          40G   38G     0 100% /var/lib/docker/overlay2/da95b27c0e8 25567df0e483f0c5bb2ba58768604c867b4ceb45928beeef015f2/merged
14   overlay          40G   38G     0 100% /var/lib/docker/overlay2/4fea6e878f2 f317a63d124c2a3831cd9b8ffcdd0bb249b73b39d92adc7d555eb/merged
15   overlay          40G   38G     0 100% /var/lib/docker/overlay2/b910801159c 76ffe6ae68c5596aa13994ff5e9d2eebd2e1febb147b3b10cd2ac/merged
16   overlay          40G   38G     0 100% /var/lib/docker/overlay2/ef09bb54935 3ca0af146aa854b48d7757407cb7429deae1e20e107f40b78796e/merged
17   overlay          40G   38G     0 100% /var/lib/docker/overlay2/d1b236f57e4 09d49d0d7ef0ecf21c3d684ed8317bb88ef530907c4c4e5e57799/merged
18   overlay          40G   38G     0 100% /var/lib/docker/overlay2/ae369ee56f0 8206507b53cb29cbc32e88198f9d38ba1331636a7970a338f30ad/merged
19   overlay          40G   38G     0 100% /var/lib/docker/overlay2/3f84613ee8d b82cf00fc2883b9e31b42766a5d7d1cc910f2a7b9fce6cf74c435/merged
20   overlay          40G   38G     0 100% /var/lib/docker/overlay2/6e2272faed5 9954f4a29f60a0ba6618eede5ccaad24ff79385d98cd2e7c3d0da/merged
21   overlay          40G   38G     0 100% /var/lib/docker/overlay2/3c8f75522e7 2d64eb20b4656cbd11358581a61619ad209f788f3eac03ce0ed15/merged
22   overlay          40G   38G     0 100% /var/lib/docker/overlay2/832ed62f362 edd6d0350828aac3aad454a5dc1679a435d3be0e8efd60e6d25b2/merged
23   overlay          40G   38G     0 100% /var/lib/docker/overlay2/d96561964a2 015583c62329eac1587c3ff4b0a962ed9d30a2dd47609c3cfcc67/merged
24   shm              64M     0   64M   0% /var/lib/docker/containers/dd2e19f40 abcfafe515db471ab89735b79e05b1ca5e97ede16e9074cd53d35a6/mounts/shm
25   shm              64M     0   64M   0% /var/lib/docker/containers/23a9c891d cc3696c294fa9b2867ac96eda72b1422ffb6bc1527c2f00d5ec7f15/mounts/shm
26   shm              64M     0   64M   0% /var/lib/docker/containers/833eae2de d2733e5b3daddc1bcae9ea7ba943e1a1a2bc421d1119265db45fa80/mounts/shm
27   shm              64M     0   64M   0% /var/lib/docker/containers/7ae786e73 c5cd21c8a00d531f73902374150cbb8d6a3a10139324b9924375900/mounts/shm
...
  1. 抓住主要的物理设备,不用关心其他逻辑设备, 物理设备⼀般挂载在/dev目录下
/dev/vda1         40G   38G     0 100% /
/dev/vdb         656G  154G  469G  25% /mnt

观察到/根目录空间已经使用100%, 虽然名义上还有2G空间 ,但是这些空间可能是被内存交换分区占 用 ,所以不用拘泥于具体数字, 如果出现100%即可以确认。

注意:如果设备空间严重不足, 可能会导致正常命令⾏也无法执⾏, 此时可以先试试下面的释放空间思路

二、释放空间

  1. 首先最安全的可以释放的空间往往在/home目录下,在一般情况下,用户上传的临时文件和安装包等往往会存储在/home目录下,因此这些文件可以首先被删除或转移到其他有空间的分区中来释放空间。但是需要注意的是,如果这些文件是某些应用程序的必要文件,删除可能会导致应用程序无法正常运行,因此在删除前需要进行确认。此外,如果/home目录下存在用户的个人数据(例如文档、音乐、图片等),则不应该轻易删除或转移这些文件,而应该寻找其他的空间释放方案。
  2. /md目录下的一些文件可能可以删除,但是有一些文件可能记录了当前正在运行的进程的登录和临时状态数据,如果不熟悉这些服务,不建议删除这些文件。
  3. 可以通过清理无用的文件和目录,以及删除过期的日志和备份文件来释放空间。另外,可以通过压缩和归档文件来减少文件占用的磁盘空间。在释放空间之前,需要确保不会误删除重要的文件和目录。
  4. 重启一些进程和常见的服务,可以释放掉这些进程所生成的临时文件占用的空间。在重启之后,这样做可以基本保证会有一定的磁盘空间回收。
  5. 清理无用的进程镜像或者删除的 Docker 容器。
  6. 清理进程的缓存,可以运行进程的系统命令,清除所有未被使用的对象(包括镜像、容器、网络和卷),以及所有未标记的镜像和构建缓存。这可以帮助释放更多的磁盘空间。

三、分析空间占用的原因

使用du命令来逐层分析文件夹所占用的空间大小。其中,-d 1表示只分析当前目录下的一级子目录,-h表示以易读的方式显示结果(例如使用KB、MB等单位),-p L表示只分析L级子目录,而-u则表示使用M来显示结果,即以MB为单位。

du -d 1 -h

在这里插入图片描述
例如 ,从上述分析看到, 目录/var/docker/overlay2 ⼀个目录就占用了28GDocker Overlay2是⼀种容器存储驱动程序,它使用了⼀个特殊的文件系统来管理Docker容器和镜像的存储 。Overlay2驱动程序将多个镜像层堆叠在⼀起,以便对这些层进行读取和写⼊操作时只需要查找最上面的层 。因此 ,在使用Overlay2驱动程序时,Docker会为每个容器创建⼀个单独的目录,该目录包含容器所需的所有文件系统内容。
分析结果:这基本上无解了,不能删除Overlay2文件夹释放空间,此时所能做的就只能是把docker安装环境移到有空间的/mnt 分区去。

四 、Docker迁移

将Docker目录 ( 默认为/var/lib/docker) 移到其他磁盘, 可以通过以下步骤实现:

  1. 停止所有正在运行的Docker容器:运行docker stop $(docker ps -aq)命令停止所有正在运行的容器。
docker stop $(docker ps -aq)
  1. 停止Docker服务:运行systemctl stop docker命令停止Docker服务。
systemctl stop docker
  1. 复制Docker目录到新的位置:使用cp或rsync等工具将Docker目录复制到新的位置 。例如,将 Docker目录从/var/lib/docker复制到/new/path/docker, 可以运行sudo rsync -aqxP /var/lib/docker/ /mnt/var/lib/docker 命令。
sudo rsync -aqxP /var/lib/docker/ /mnt/var/lib/docker
  1. 更新Docker配置文件:修改Docker服务配置文件/etc/docker/daemon.json,并将旧的Docker目录路径替换为新的位置 。如果该文件不存在,请创建它 。示例配置文件如下所示:
{
"registry-mirrors": ["https://nrbewqda.mirror.aliyuncs.com"],
"dns": ["100.125.1.250", "100.125.64.250"],
"data-root": "/mnt/var/lib/docker"
}
  1. 启动Docker服务:运行systemctl start docker命令启动Docker服务, 并检查是否已成功加载新的 Docker目录。
systemctl start docker
  1. 启动Docker容器:运行docker start <container_id>命令启动之前停止的所有容器。
    注意:如果docker容器设置了restart ,则这些docker本身就会自动启动,这⼀步不是必须得。
docker start <container_id>

重点注意:完成迁移后,不要立即删除原来的docker目录,可以先通过修改目录名的方式隔离原来的docker目录,要反复确认启动没有问题后,再进行删除。

cd /var/lib/docker/
mv docker docker2
mv docker2 /mnt/

总结

拓展:如果docker资源太大,可以将其迁移至其他服务器或者外部存储设备。可以使用docker镜像导出和导入的方式来实现迁移。另外,也可以使用其他工具,如rsync或scp来迁移文件和目录。需要注意的是,迁移过程中需要保证数据的完整性和可用性。

总之,当服务器空间不足时,需要采取一些步骤来处理和解决这个问题。首先,需要定位空间不足的原因,并尽可能地释放空间。如果问题仍然存在,需要进一步分析空间占用的原因,并考虑调整相关设置或者进行迁移。最后,需要在处理问题的同时保证数据的完整性和可用性。

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

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

相关文章

AWT_绘图_组件绘图原理

组件绘图原理&#xff1a; 之前我们已经学习过很多组件&#xff0c;例如Button、Frame、Checkbox等等&#xff0c;不同的组件&#xff0c;展现出来的图形都不一样&#xff0c;其实这些组件展示出来的图形&#xff0c;其本质就是用AWT的绘图来完成的。 在AWT中&#xff0c;真正提…

idea使用 ( 三 ) 常用配置

4.常用配置 4.1.Settings 配置 接 2.3.2.设置配置 也可以 从菜单选择 设置配置 File > Settings 打开配置窗口 其中 Appearance & Behavior : 外观 与 行为 Keymap : 快捷键 Editor : 编辑器 Plugins : 插件 Version Control : 版本控制 Build, Execution,…

数据库系统--并发控制

文章目录 一、为什么要并发控制1.2 并发控制解决的问题1.2.1 脏读1.2.2 幻读1.2.3 不可重复读1.2.4 数据丢失问题 二、事务调度及可串行性2.1 事务2.1.1 事务的宏观2.1.2 事务的微观2.1.3 事务的特性 ACID 2.2 事务调度与可串行性2.3 冲突可串行化判定 三、基于封锁的并发控制方…

【MySQL高级】——存储引擎

一、查看存储引擎 show engines;二、设置系统默认的存储引擎 <1> 查看默认的存储引擎 show variables like %storage_engine%; #或 SELECT default_storage_engine;<2> 修改默认的存储引擎 1. 命令方式 SET DEFAULT_STORAGE_ENGINEMyISAM;2. 配置文件方式 …

研读Rust圣经解析——Rust learn-13(并发)

研读Rust圣经解析——Rust learn-13&#xff08;并发&#xff09; 并发创建新线程使用 join 等待所有线程结束线程获取环境所有权通过消息传递传送数据创建通道发送|接收消息隐式调用recv 共享状态并发通过使用互斥器Mutex创建Mutex共享MutexArc<T>原子引用计数 使用 Syn…

top命令学习

文章目录 一、top命令回显信息含义1、第一行2、第二行3、第三行4、第四行5、第五行6、第六行进程信息 二、top简单交互1、按数字“1”&#xff0c;显示列出所有cpu的信息2、按“M”&#xff0c;按内存使用率从大到小排序3、按“P”&#xff0c;按CPU使用率从大到小排序 一、top…

深度学习基础知识-感知机+神经网络的学习

参考书籍&#xff1a;&#xff08;找不到资源可以后台私信我&#xff09; 《深度学习入门&#xff1a;基于Python的理论与实现 (斋藤康毅)》 《Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow, 2nd Edition (Aurelien Geron [Gron, Aurlien])》 机器学习…

(转)mysql数据库安装指南

如果你的电脑是mac&#xff0c;参考社群会员 奔跑的土豆 的分享&#xff1a; https://http://zhuanlan.zhihu.com/p/37942063232 赞同 162 评论文章 如果你的电脑是windows&#xff0c;参考下面的安装步骤。 一、下载mysql数据库 进入MySQL官方网站&#xff08;MySQL Co…

ARM Cortex-R52 通用中断控制器GIC:Generic Interrupt Controller(一)

ARM Cortex-R52 GIC:Generic Interrupt Controller 前言&#xff1a;名词解释 英文缩写英文全称&#xff08;中文释义&#xff09;GICgeneral interrupt controllerITSInterrupt Translation Service:用来解析中断SPIShared Peripheral InterruptsPPIPrivate peripheral inte…

BM40-重建二叉树

题目 给定节点数为 n 的二叉树的前序遍历和中序遍历结果&#xff0c;请重建出该二叉树并返回它的头结点。 例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6}&#xff0c;则重建出如下图所示。 提示: 1.vin.length pre.length 2.pre 和 vin 均无重复…

超算云服务深度学习环境配置及使用方法

目录 一、环境配置 1. 通过SSH连接服务器 2. 查看服务器已安装模块 3. 调用Anaconda模块 4. 创建Python3.7的虚拟环境&#xff08;不是必须。不需要的话可以使用默认安装的环境&#xff09; 5. 虚拟环境下安装CUDA11.6Pytorch1.12.1 二、使用方法 1、提交作业 2、其他…

CKA证书模拟考试24道题

CKA证书模拟24道题-题解 快捷别名 alias kkubectl # will already be pre-configured export do"--dry-runclient -o yaml" # k create deploy nginx --imagenginx $do export now"--force --grace-period 0" # k delete p…

FPGA学习_01_基础知识(有点劝退,心灵弱小者勿入)

有些人喜欢直接拿开发板看教程开干&#xff0c;我认为了解点历史发展没什么坏处&#xff0c;一些FPGA的基础知识也是同样重要的。 1.1. FPGA的主要厂商 XILINX 占据FPGA绝大部分的市场份额 ALTERA 被 INTEL 167亿美元收购 改名为INTEL LATTICE 被神秘的中国公…

成就客户 | 企业如何培养“数据文化”?Smartbi教你3个步骤

随着数字化浪潮的发展&#xff0c;越来越多企业在实际工作中通过采用BI等各种数据处理工具提升工作效率。诚然&#xff0c;BI 工具可以帮助员工更好地理解和分析数据&#xff0c;从而发现业务中的机遇和挑战&#xff0c;然而如果仅仅只是提供工具和技术&#xff0c;而不重视培养…

浅谈“孔乙己的长衫“是脱不下来还是难脱下?

名人说&#xff1a;往者不可谏&#xff0c;来者犹可追。——《论语微子篇》 创作者&#xff1a;Code_流苏(CSDN) ★温馨提示&#xff1a;以下仅代表个人观点&#xff0c;不代表其它任何人看法。 目录 〇、缘由一、社会对于学历和职业之间的关系认知是怎样的&#xff1f;二、学…

密歇根大学Python系列之二:Python 编程进阶

Python如今无疑是全球最受欢迎的编程语言。它最大的好处&#xff0c;就是让越来越多的人通过它加入了编程的世界。学习Python是个好主意。无论你是一个初学者还是C或Java专家&#xff0c;都无需担心其派不上用场。 Paul Resnick 教授是密歇根大学迈克尔科恩学院的信息学教授&a…

解决软件项目冲突的5个重点

1、针对人员冲突管理 信任和沟通是解决人员冲突的关键。常见的人员冲突多表现为不信任和沟通不畅。 企业高层需要对项目经理充分信任和授权&#xff0c;以充分发挥项目经理的能力。项目经理对项目至关重要&#xff0c;如果项目经理频繁换人&#xff0c;高层领导变动&#xff0c…

云原生-k8s核心概念(pod,deploy,service,ingress,configmap,volume)

Gitee-k8s学习 云原生实战-kubernetes核心实战 namespace Namespace是kubernetes系统中的一种非常重要资源&#xff0c;它的主要作用是用来实现多套环境的资源隔离或者多租户的资源隔离 Pod Pod可以认为是容器的封装&#xff0c;一个Pod中可以存在一个或者多个容器。 De…

C#开发的OpenRA的游戏用户的添加

C#开发的OpenRA的游戏用户的添加 OpenRA游戏前面在游戏开始的按钮的界面, 可以看到可以添加游戏用户,小规模战斗的界在,就是默认两个用户, 一个是玩家,一个是电脑的AI, 如果感觉少了,可以添加多几个电脑AI,这样做也是可以的。 不过在代码里是怎么样实现添加用户的呢…

word表格

新建&#xff08;修改&#xff09;“表格”样式 新建和修改样式的设置差不多&#xff0c;这里放在一起介绍 设置样式时&#xff0c;注意按图中的步骤设置&#xff0c;以免导致格式的应用出错&#xff0c;这里分四步&#xff1a; 格式应用于 “整个表格”&#xff1a;“字体”…