Linux硬盘空间占用排查及Docker磁盘空间占用排查解决

  • Post author:
  • Post category:linux




一、linux系统占用



1、查询全局磁盘占用

# 查看总磁盘占用量
df -hl



2、查看某个文件夹下每个文件大小

ls -l
# 按照M显示
ls -l --block-size=m



3、查看某个文件夹下所有文件大小

# 查看当前文件
du -sh .
# 查看指定文件夹
du -sh /home/*



二、docker磁盘占用



1、首先查看每个容器cpu内存等使用情况

docker stats

在这里插入图片描述



2、查看整个docker占用情况

docker system df
# 或
df -Th /var/lib/docker/

在这里插入图片描述



3、查看每个image、container占用情况

docker system df -v

在这里插入图片描述



4、查看每个镜像占用量

docker ps --format "table {{.Size}}\t{{.Names}}"



5、平常主要是containers中占用比较大,也就是日志 日志主要在这个目录/var/lib/docker/containers

# 进入容器目录
cd /var/lib/docker/containers
# 查看哪个容器占用大
du -sh .
# 也可以具体进入某个容器
cd /var/lib/docker/containers/a40b469c66170a20baef5d650e6584de71d74fd1f33351955a1ec128de73de05
# 查看文件大小
ls -l --block-size=m
# 清理日志
cat /dev/null > /var/lib/docker/containers/a40b469c66170a20baef5d650e6584de71d74fd1f33351955a1ec128de73de05/a40b469c66170a20baef5d650e6584de71d74fd1f33351955a1ec128de73de05-json.log

一般是.log文件比较大,可以清理,清理Docker容器日志(治标)如果docker容器正在运行,那么使用rm -rf方式删除日志后,通过df -h会发现磁盘空间并没有释放。原因是在Linux或者Unix系统中,通过rm -rf或者文件管理器删除文件,将会从文件系统的目录结构上解除链接(unlink)。如果文件是被打开的(有一个进程正在使用),那么进程将仍然可以读取该文件,磁盘空间也一直被占用。正确姿势是cat /dev/null > *-json.log,当然你也可以通过rm -rf删除后重启docker。



6、接下来,提供一个日志清理脚本clean_docker_log.sh,内容如下:

#!/bin/sh 
echo "======== start clean docker containers logs ========"  

logs=$(find /var/lib/docker/containers/ -name *-json.log)  

for log in $logs  
        do  
                echo "clean logs : $log"  
                cat /dev/null > $log  
        done  

echo "======== end clean docker containers logs ========"
# 授权 
chmod +x clean_docker_log.sh
# 执行 
./clean_docker_log.sh



版权声明:本文为Blueeyedboy521原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。