Linux下清理大批量文件最佳实践(1)(3)
大批量文件自动清理的最佳实践
GPFS 文件系统下大规模额外年间自动清理的最佳实践
以下是在一个千万级的 GPFS 文件系统上进行的文件自动清理实践:硬件环境为两台 IBMx3650 服务器和存储容量为 50TB 的 DS4200 磁盘阵列,安装了 Linux 操作系统和 GPFS v3.2。目标是每天 2:00AM 执行文件清理操作,删除 30 天以前的文件和所有以 tmp 为结尾的文件。
mmapplypolicy 扫描结果显示该系统上有 323,784,950 个文件,158,696 个文件夹。
............. [I] Directories scan: 323784950 files, 158696 directories, 0 other objects, 0 'skipped' files and/or errors. .............
定义查找规则如下,保存为 trash_rule.txt
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 并配合 grep 和 awk 命令生成待删除文件完整列表,再用 split 命令将完整列表分割为每个列表包含 10,000 个文件的子列表:
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;
在文件删除过程中,我们可以采用以下命令计算每分钟文件删除数量。从下面的输出可以得出,文件删除速度为 1546 文件每分钟:
df – i /data;sleep 60;df – i /data Filesystem Inodes IUsed IFree IUse% Mounted on /dev/data 2147483584 322465937 1825017647 16% /data Filesystem Inodes IUsed IFree IUse% Mounted on /dev/data 2147483584 322467483 1825016101 16% /data
通过 `time` 命令对文件删除操作进行计时,从输出结果可以看出,本次文件删除操作一共耗时 1168 分钟19.5 小时):
time trash_clear.sh real 1168m0.158s user 57m0.168s sys 2m0.056s
当然,对于 GPFS 文件系统而言,文件系统本身还提供了其他的文件清理方法,譬如可以通过 mmapplypolicy 来执行文件删除操作,通过这种方法,有可能实现更加高效的文件清理任务。本文的目的在于讨论一种通用的大规模文件清理方法,在此就不对基于文件系统所提供功能的文件清理操作做进一步讨论了,感兴趣的读者可以尝试一下。
评论暂时关闭