panmeng
作者panmeng·2023-09-28 10:15
系统工程师·成都农商银行

海量小文件的统计、遍历和删除

字数 2057阅读 1050评论 0赞 3

### 1、统计和遍历

  • 共计文件60万
  • 文件系统xfs
  • 操作系统Centos7
  • SSD硬盘
/tmp/1 300000
/tmp/1/11 300000

通过du --inodes统计文件数量,用时约14s

# time du --inodes 1
300001 1/11
600002 1
real 0m13.133s
user 0m0.236s
sys 0m11.376s

# time du --inodes 1
300001 1/11
600002 1
real 0m13.472s
user 0m0.249s
sys 0m11.638s

# time du --inodes 1
300001 1/11
600002 1
real 0m14.723s
user 0m0.257s
sys 0m12.657s

通过ls -fR统计和遍历文件,用时约0.4s


# time ls -fR 1 | wc -l
600008
real 0m0.421s
user 0m0.108s
sys 0m0.281s

# time ls -fR 1 | wc -l
600008
real 0m0.284s
user 0m0.141s
sys 0m0.142s

# time ls -fR 1 | wc -l
600008
real 0m0.284s
user 0m0.136s
sys 0m0.147s

通过tree统计和遍历文件,用时约15s

# time tree 1 | wc -l
600004
real 0m14.550s
user 0m1.577s
sys 0m12.049s

# time tree 1 | wc -l
600004
real 0m15.918s
user 0m1.394s
sys 0m12.755s

# time tree 1 | wc -l
600004
real 0m15.191s
user 0m1.390s
sys 0m12.204s

通过rsync统计和遍历文件,用时约16s

# time rsync -avn 1/ 2 > 111
real 0m16.019s
user 0m1.406s
sys 0m13.019s

# time rsync -avn 1/ 2 > 111
real 0m15.751s
user 0m1.433s
sys 0m12.583s

# time rsync -avn 1/ 2 > 111
real 0m15.924s
user 0m1.426s
sys 0m12.902s

|命令|统计|遍历|用时|
|-|-|-|-|
|du --inodes|Y|N|14|
|ls -fR|Y|Y|0.4|
|tree|Y|Y|15|
|rsync -avn|Y|Y|16|

综合以上结果,带有-f参数的ls具有最高的统计和遍历效率,du --inodes并不高效。

### 2、删除文件

使用rsync删除,耗时41s

# ls -fR 6 | wc -l
3
# ls -fR 4 | wc -l
600008

# time rsync -av --delete-before 6/ 4
building file list ... done
sent 43 bytes received 6,900,026 bytes 166,266.72 bytes/sec
total size is 0 speedup is 0.00

real 0m40.643s
user 0m1.174s
sys 0m34.911s

使用ls -fR | xargs rm -rf删除,耗时28s,但是需要手动遍历目录,单一目录推荐

# ls -fR 3 | wc -l
600008

# time find 3 -type d
3
3/11
real 0m0.329s
user 0m0.179s
sys 0m0.149s

# cd 3
[root@centos7_1 3]# time ls -f | xargs rm -f
real 0m13.784s
user 0m0.418s
sys 0m12.607s

[root@centos7_1 3]# cd 11
[root@centos7_1 11]# time ls -f | xargs rm -f
real 0m13.463s
user 0m0.460s
sys 0m12.293s

使用tree+rm删除,耗时41s,和rsync速度相当

# ls -fR 2 | wc -l
600008

# time tree -afi 2 | xargs rm -rf
real 0m41.808s
user 0m2.362s
sys 0m35.686s

# time tree -afi 1 | xargs -n 1000 rm -rf
real 0m38.698s
user 0m2.727s
sys 0m33.240s

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

3

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广