这篇文章主要介绍了Linux下自动清理大量文件的方案探究,包括队Linux的文件删除机制作了简单的讲解,需要的朋友可以参考下
定期清理过期文件和垃圾文件,维持文件系统合理的空间使用率,是一个系统管理员的日常工作。对于中小规模文件系统而言,简单的系统命令或者脚本都就可以实现;但是对于拥有数亿甚至数十亿数文件的大型、超大型文件系统,文件清理就变成一项艰巨的任务。如果确定哪些文件需要被清理,怎样清理大批量文件,怎样确保清理性能,都是系统管理员需要解决的难题。本文探讨了 Linux 下大批量文件自动清理的相关命令和方法,以及实际操作中的最佳实践。
文件自动清理的需求
系统管理员的手中,管理着企业最有价值的资产——数据;而占据企业级服务器操作系统市场半壁江山的 Linux,更是让 Linux 系统管理员成为最重要的资产管理员。管理员的职责,就是让有限的 IT 资源,存储最有价值的数据。1991 年 IBM 推出 3.5 英寸 1GB 硬盘的时候,管理员洞悉硬盘上的每个文件,人工就可以实现文件管理;而今天 PB 级的存储设备,则给文件管理带来了前所未有的挑战。
文件删除操作,用过 Linux 的人都应该可以完成。那么以下这些文件删除操作,你能完成哪些?
删除整个文件系统中以特定后缀结尾的文件、
在一个有 1 百万的文件系统中删除某个指定文件、
从一个千万级的文件系统里,删除指定日期创建的 10 万个文件、
在亿级文件系统里,每天执行文件系统清理,删除 1 年前产生的上百万文件....
下面要讨论就是如何实现以上文件删除操作的策略和方法,如果以上操作对你来说轻而易举,可以忽略本文。
对于清理文件系统而言,我们可以简单的把清理任务分成两大类,清理过期文件和清理垃圾文件。
RULE EXTERNAL LIST 'trash_list' EXEC ''
RULE 'exp_scan_rule' LIST 'trash_list' FOR FILESET('data')
WHERE DAYS(CURRENT_TIMESTAMP) – DAYS(ACCESS_TIME) > 30
RULE 'tmp_scan_rule' LIST 'trash_list' FOR FILESET('data') WHERE NAME LIKE '%.tmp'
mmapplypolicy /data – P trash_rule.txt – L 3 | grep
“/data” |awk ‘ {pint $1} ’ > trash.lst
split – a 4 – C 10000 – d trash.lst trash_split_
执行以下命令进行删除操作:
代码如下:
for a in `ls trash_splict_*`
do
rm `cat $a`
done
将上述操作保存为 trash_clear.sh,然后定义 crontab 任务如下:
代码如下:
0 2 * * * /path/trash_clear.sh
手动执行删除任务,待删除文件扫描结果如下:
代码如下:
[I] GPFS Policy Decisions and File Choice Totals:
Chose to migrate 0KB: 0 of 0 candidates;
Chose to premigrate 0KB: 0 candidates;
Already co-managed 0KB: 0 candidates;
Chose to delete 0KB: 0 of 0 candidates;
Chose to list 1543192KB: 1752274 of 1752274 candidates;
0KB of chosen data is illplaced or illreplicated;