MySQL, Oracle, Linux, 软件架构及大数据技术知识分享平台

网站首页 > linux / 正文

linux - 清理磁盘空间,你会吗

2024-11-26 14:50 huorong linux 9 ℃ 0 评论

简介

磁盘空间监控是最基本的监控。清理磁盘空间也是有技术的。




清理磁盘空间

  • 1、查找大文件

查找大于1G的文件:

find /data/isos/ -type f -size +1048576k -exec ls -lh {} \; | awk '{ print $9 ": " $5 }'

清理掉不用的大文件




  • 2、df和du读取到的文件不一样

一般都是文件句柄没有释放造成的,有些人清理日志文件的时候是直接rm,不管程序是否还在占用句柄。这样子会造成文件已经被删除,但是磁盘空间不释放的情况:

可以通过命令去查看被标记为(deleted)的文件,第二列就是PID,重启或者重载一下对应的程序就可以了:

lsof -n | grep deleted

但是这个命令有一个很大的问题,就是文件句柄过多的情况下要统计很久,而且会造成负载过高。

这时候直接去找进程目录的描述目录比较快

ls -l  /proc/[0-9]*/fd/*   | grep deleted

/proc/[pid]/fd pid就是程序的IP,就可以找到对应的程序了,重启一下就可以了




  • 3、磁盘空间使用率都没有问题,但是就是报"no space left"

inode不够用了,这个是在磁盘格式化的时候就固定了,要重新格式化文件系统,一般格式化默认是够用的,不够用一般是太多小文件造成的。

例如邮件服务如果出现异常就会出现很多小文件在/var/spool/clientmqueue/,一般是cron任务产生的邮件,可以修改cron任务,将输入重定向到对应的文件就不会有邮件,

如果在 /var/spool/clientmqueue/下直接执行,rm -f * 会出现Bash Argument list too long的问题

这时候可以直接删除目录,重启一下服务。可以使用find命令逐个删除

find . -name "*.tmp" -exec rm -f {} \;

也可以使用xargs重定向逐个删除

ls * | xargs rm -f

也可以使用rsync同步一个空目录来删除文件。

mkdir /tmp/empty/
rsync -a --delete empty/  /var/spool/clientmqueue/




总结

清理磁盘的时候,如果不确认文件是否被占用,可以使用

echo -n ""> /var/log/somelog.log

清空文件,而不是直接rm,导致空间没释放。


Tags:linux磁盘满了

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言