网站首页 > 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,导致空间没释放。
Tags:linux磁盘满了
猜你喜欢
- 2024-11-26 VMware虚拟机中Linux系统磁盘空间扩容实战
- 2024-11-26 linux 排查磁盘问题的常用命令
- 2024-11-26 Linux 磁盘扩容(非LVM)方式
- 2024-11-26 Linux系统磁盘分区管理LVM概念及扩容操作
- 2024-11-26 linux系统磁盘空间使用情况
- 2024-11-26 k8s自动化运维十二-磁盘管理
- 2024-11-26 linux磁盘空间查看命令(du,df)剩余空间查看详解
- 2024-11-26 linux中crontab定时任务导致磁盘满和云监控未报警的的坑
- 2024-11-26 centos7 提示根目录系统文件已满,如何解决?
- 2024-11-26 Linux 查找占用磁盘IO读写很高的进程方法