CentOS7 清理系统垃圾
当发现虚拟机内存不足时,使用 df -h 查看磁盘占用率
使用 du -h * 查看目录下文件大小,再进行清理。
/var 目录下yum 缓存可能会很大,还有abort服务产生的日志文件
yum clean all
rm -rf /var/cache/yum/*
如果不想完全关闭ABRT服务,但同时希望减少日志产生的大小,可以通过调整 /etc/abrt/abrt.conf
配置文件解决。
#限制ABRT日志总空间占用,以MB为单位。超过限制则自动删除旧日志
MaxCrashReportsSize = 250
#是否记录非应用包中的执行指令的错误信息
ProcessUnpackaged = no
#是否在dump中包含完整的二进制镜像信息
SaveBinaryImage = no
CentOS7服务器磁盘清理
1.使用df-lh命令查看磁盘可用空间。
2.先用cd /进入根目录,然后使用 du -h --max-depth=1 命令查看实际存储的文件大小。
3.比较df -lh和du -h分析出来的使用量;如果两者相同,则从未删除的文件下手去清理 ,如果du -h分析出来的用量明显小于df -lh分析出来的用量,则从删除未释放磁盘的文件下手清理。
4.从未删除的文件下手,从根目录开始逐级通过 du -h --max-depth=1命令;从占用空间大的文件夹入手,逐级向下排查找到容量大的文件。
找到大文件后确认文件是无用文件后通过rm命令删除即可释放磁盘空间。切记文件不可是系统文件和程序正在使用中的问题。
5.从删除未释放磁盘的文件下手,通过lsof | grep deleted 命令查看文件是哪个程序产生的,通过重启那个程序就可以得到释放。虽然通过重启可以暂时释放磁盘,但是可以没根源上排查杜绝这种文件的产生。
6.如果要删除的大文件是系统文件,一般持续变大的文件一般是系统的日志文件。centos下通过
journalctl --vacuum-time=1w 保留一周内日志或者journalctl --vacuum-size=500M保留500M日志从而清理掉多余的部分且以后系统可以自动清理掉多余的部分,变能做到一劳永逸。
7.如果是mysql产生的日志,在root用下执行RESET MASTER;清理掉日志即可释放磁盘空间。然后执行SET GLOBAL expire_logs_days = 7; 设置日志只保留7天避免binlog日志的持续扩张。
CentOS7根目录空间占满怎么解决
问题背景是这样的,根目录初始大小是50G,我把mysql和docker都装在根目录底下了。
随着时间推移,mysql大小达到了27个G,docker则是22个G
根目录空间不够用了,上图:
图 1-1
想过的方案有数据库迁移,根目录扩容,和软连接,最后选择的是软连接,没别的意思,就是解决问题快,开搞:
如图1-1所示,home目录下空间有1.8T容量,我们把数据迁移到home下就达成目的了。
通过查询,mysql占用容量最大的是data目录。查询命令是: du -h --max-depth=1
图:1-2
先把data迁移到home目录底下
在home目录下新建文件夹
mkdir /home/mysql
关闭mysql
service mysqld stop
转移数据
mv /usr/mysql/data /home/mysql
制作软链接
ln -s /home/mysql/data /usr/mysql/data
开启mysql
service mysqld start
这样,mysql 数据就迁移到home下了
接下来做docker的迁移
cd /home
mkdir docker
修改docker的systemd的 docker.service的配置文件
不知道 配置文件在哪里可以使用systemd 命令显示一下
systemctl disable docker
systemctl enable docker
#显示结果
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
修改docker.service文件
vim /usr/lib/systemd/system/docker.service
在里面的EXECStart的后面增加后如下:
ExecStart=/usr/bin/dockerd --graph /home/docker
重新enable 一下docker 服务 重新进行软连接 以及进行一次 daemon-reload
systemctl disable docker
systemctl enable docker
systecmtl daemon-reload
systemctl start docker
可以看到:
方法 二
不修改 docker.service的配置文件的默认路径,直接制作软连接
到此,根目录空间也就降下来了。
以后真正的数据是保存的home文件夹下的。
Docker下/var/lib/docker/overlay2空间清理办法
Docker下/var/lib/docker/overlay2空间清理办法
-
查看磁盘占用
df -h -
Docker 的内置 CLI 指令docker system df
可用于查询镜像(Images)、容器(Containers)和本地卷(Local Volumes)等空间使用大户的空间占用情况。
~]# docker system df
查看详细
~]# docker system df -v -
空间清理
【1】通过 Docker 内置的 CLI 指令docker system prune来进行自动空间清理。
~]# docker system prune --help
该指令默认会清除所有如下资源:
已停止的容器(container)
未被任何容器所使用的卷(volume)
未被任何容器所关联的网络(network)
所有悬空镜像(image)。该指令默认只会清除悬空镜像,未被使用的镜像不会被删除。添加-a 或 --all参数后,可以一并清除所有未使用的镜像和悬空镜像。
可以添加-f 或 --force参数用以忽略相关告警确认信息。
【2】另外除了system级别的,还有针对容器或是镜像级别的删除命令:
docker image prune:删除悬空的镜像。
docker container prune:删除无用的容器。
–默认情况下docker container prune命令会清理掉所有处于stopped状态的容器
–如果不想那么残忍统统都删掉,也可以使用–filter标志来筛选出不希望被清理掉的容器。例子:清除掉所有停掉的容器,但24内创建的除外:
–$ docker container prune --filter “until=24h”docker volume prune:删除无用的卷。
docker network prune:删除无用的网络
【3】手动清除
对于悬空镜像和未使用镜像可以使用手动进行个别删除:
1、删除所有悬空镜像,不删除未使用镜像:
docker rmi $(docker images -f “dangling=true” -q)2、删除所有未使用镜像和悬空镜像 docker rmi $(docker images -q) 3、清理卷 如果卷占用空间过高,可以清除一些不使用的卷,包括一些未被任何容器调用的卷(-v 详细信息中若显示 LINKS = 0,则是未被调用): 删除所有未被容器引用的卷: docker volume rm $(docker volume ls -qf dangling=true) 4、容器清理 如果发现是容器占用过高的空间,可以手动删除一些: 删除所有已退出的容器: docker rm -v $(docker ps -aq -f status=exited) 删除所有状态为dead的容器 docker rm -v $(docker ps -aq -f status=dead)
-
查找系统中的大文件【以上三步仍然不可以的时候执行】
find /var/lib/docker/overlay2/ -type f -size +100M -print0 | xargs -0 du -h | sort -nr查找指定目录下所有大于100M的所有文件
-
对标准输入日志大小与数量进行限制
新建或修改/etc/docker/daemon.json,添加log-dirver和log-opts参数
vi /etc/docker/daemon.json
{
“log-driver”:“json-file”,
“log-opts”: {“max-size”:“3m”, “max-file”:“1”}
}重启docker的守护线程
systemctl daemon-reload
systemctl restart docker -
docker 清理空间命令
删除悬空镜像
docker rmi $(docker images -f “dangling=true” -q)
docker image prune -a -f
#显示所有的容器,过滤出Exited状态的容器,取出这些容器的ID,
sudo docker ps -a|grep Exited|awk ‘{print $1}’
#查询所有的容器,过滤出Exited状态的容器,列出容器ID,删除这些容器
sudo docker rmdocker ps -a|grep Exited|awk '{print $1}'
方法二:
#删除所有未运行的容器(已经运行的删除不了,未运行的就一起被删除了)
sudo docker rm $(sudo docker ps -a -q)方法三:
#根据容器的状态,删除Exited状态的容器
sudo docker rm $(sudo docker ps -qf status=exited)方法四:
#Docker 1.13版本以后,可以使用 docker containers prune 命令,删除孤立的容器。
sudo docker container prune#删除所有镜像
sudo docker rmi $(docker images -q) -
实在没办法,只有把/var目录下所有日志文件清空
~]# for i infind /var -name *.log*
;do >$i;done
然后重启node节点,因为有些日志文件被占用,清空后空间仍然无法释放
评论区