龙空技术网

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

linux运维菜 466

前言:

此时朋友们对“删除磁盘空间 linux”大约比较注意,兄弟们都需要学习一些“删除磁盘空间 linux”的相关文章。那么小编同时在网上汇集了一些关于“删除磁盘空间 linux””的相关知识,希望兄弟们能喜欢,我们一起来学习一下吧!

简介

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



清理磁盘空间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,导致空间没释放。


标签: #删除磁盘空间 linux