清理目录下大于10m_linux清理磁盘空间,需要注意

简介

0dc20d726d2b7c99311f705023e6ff23.png

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


827c227df844e003fac773dc8f51fad9.png

清理磁盘空间

  • 1、查找大文件

查找大于1G的文件:

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

清理掉不用的大文件


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

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

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

lsof -n | grep deleted

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

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

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

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


3486515b1fb8f6fc6bb2b118936a5320.png
  • 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,导致空间没释放。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值