Linux查看文件夹,已经使用了60g,但是实际只使用了22.81g
2 问题原因
使用rm命令删除文件时,只有当该文件不存在任何link才会被删除
当有进程访问这个文件时,这个文件的实际占用空间就不会释放
du是根据文件名进行的空间统计,使用rm时该文件对系统来说已经不可见,所以不会统计这个文件。
df则是磁盘实际占用的数量
状态为deleted为标记被删除,其实该文件并没有从磁盘中删除,类似windows下的回收站状态。
据称当有其他进程打开某文件时文件被删除,就会将该文件标记为deleted,并删除其目录节点。使用du查看时,因为没有该删除状态文件的节点信息,所以就不做统计,从而导致与df的结果不一致。
查找了下发现系统对rm进行了alias,因为Linux对删除操作没有回收站机制,对rm操作进行了自定义,对删除文件进行移动到/tmp 目录里面,又对/temp删除 但是还是没有发现磁盘空间释放
执行 lsof | grep deleted发现有大量刚刚删除文件的进程存在,kill掉进程(或者重启进程)
3 解决方案
lsof | grep deleted
lsof | grep delete |sort -nrk 7|more
sort -nrk 7是将已经删除的文件进行大小排序
结果如下:(deleted 状态)


单个杀死进程,执行kill命令
kill -9 27487 (PID)
批量杀死进程
lsof |awk '/deleted/{print $2}'|xargs kill -9
lsof | grep deleted | awk '{if (NR > 1){print $2}}'|uniq | xargs kill -9
详解 awk ‘{if (NR > 1){print $2}}’,获取第二列
uniq,去重复
xargs kill -9 ,就是将获取第二列,再通过uniq去重的值,传递给xargs,然后kill -9 进程号
1 问题描述
宝塔,查看使用空间,使用了60g
查看data文件夹,实际只使用了不到24g
df -h
du -sm /data


Leave a Reply
You must be logged in to post a comment.