暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Linux环境下删除海量文件的方式

IT那活儿 2024-08-05
98
点击上方“IT那活儿”公众号--专注于企业全栈运维技术分享,不管IT什么活儿,干就完了!!!

  
在Linux系统维护中,经常会遇到大量文件占用磁盘空间的情况,比如数据库的审计日志、应用程序的临时文件,如果不能及时清理过期文件,将会严重消耗系统inode资源,甚至影响系统正常写入。
在海量文件需要删除的情况下,当直接使用Linux系统提供的rm命令方式删除,将是一件非常耗时的工作,并且在极端情况下,会出现“-bash: bin/rm: Argument list too long”报错,进而不能正常删除过期文件。
本文结合生产操作实际,提供两种Linux系统环境下删除海量文件的操作思路。


思路一:使用rsync命令删除
首先创建一个空文件夹,然后通过rsync --delete-before -d <空文件夹> <需要清理删除小文件的目录> 命令,达到删除海量小文件的目的。以下以删除Oracle数据库审计日志的操作步骤。
[oracle@testdb adump]$ mkdir /data/null
[oracle@testdb adump]$ ls -l /data/null
total 0
[oracle@testdb ~]$ nohup rsync --delete-before -d /data/null/ /u01/gird/app/oracle/admin/testdb/adump/ &

使用man rsync查看rsync命令相关的参数说明如下:
-d, --dirs transfer directories without recursing
--delete-before receiver deletes before transfer (default)



思路二:使用find命令的delete参数
使用find <需要清理删除小文件的目录> -type f -delete命令直接删除大批小文件。
操作命令如下演示:
[oracle@test adump]$ nohup find /u01/gird/app/oracle/admin/testdb/adump/ -type f -delete &
可以参考下面的命令来简单监控删除过程中Inodes使用率的变化:
while true; do df -i /; sleep 30; done
在使用find命令删除文件时,可以结合maxdepth 、+n(for greater than n)、-n(for less than n)、n(for exactly n)、-ctime n(File's status was last changed n*24 hours ago)等常用参数进行。
总 结:
经过实际测试,两种删除海量小文件的方式效率相当,与存储IO有直接关系,建议在实际使用时,为避免终端超时退出,可以以nohup方式在后台执行。

END


本文作者:张 红(上海新炬中北团队)

本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论