日常运维过程中,我们经常需要处理磁盘空间问题,当接到告警后,第一时间会去找那些大文件,一般比如 Centos,可能大文件就是 /var/log/messages
。
但有的时候,会出现怎么也查不到大文件的情况,通过 du
查找的时候,统计出来的大小,跟 df
显示的占用空间对应不上。
如果通过 df -i
查看inode没有满的话,那么极有可能,是有大文件被直接rm了,但是仍然有进程打开了这个文件。
这种情况,由于进程没有退出,因此文件占用的空间并不会释放;直到进程退出,磁盘空间才会真正释放。
Linux上,由于进程仍然存活,因此可以通过查看所有进程打开的 fd,如果该文件已经被删除,则查看时,会显示(deleted)
。
示例如下:
$?sudo?find?/proc/*/fd?-ls?|?grep??'(deleted)'
???388609??????0?lrwx------???1?zerotier-one?zerotier-one???????64?Aug?21?00:19?/proc/29400/fd/4?->?/tmp/ibpX85Vd\?(deleted)
???388610??????0?lrwx------???1?zerotier-one?zerotier-one???????64?Aug?21?00:19?/proc/29400/fd/5?->?/tmp/ibCwAgAj\?(deleted)
???388611??????0?lrwx------???1?zerotier-one?zerotier-one???????64?Aug?21?00:19?/proc/29400/fd/6?->?/tmp/ibRZ5rep\?(deleted)
???388612??????0?lrwx------???1?zerotier-one?zerotier-one???????64?Aug?21?00:19?/proc/29400/fd/7?->?/tmp/ibBuNEzA\?(deleted)
???388616??????0?lrwx------???1?zerotier-one?zerotier-one???????64?Aug?21?00:19?/proc/29400/fd/11?->?/tmp/ibG68kpG\?(deleted)
不要直接删除该文件,而是通过将文件 truncate 的方式,释放磁盘空间。
一种方式是:
cat?/dev/null?>?${filename}
或者(新get!)
:?>?${filename}
如此,可以快速释放空间。
完整实例:http://github.crmeb.net/u/defu
来自 “开源世界 ” ,链接:http://ym.baisou.ltd/post/657.html,如需转载,请注明出处,否则将追究法律责任。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。