Linux下快速删除大量小文件的方法探索

一、前言

Linux服务器磁盘中存在大量小文件,需要进行删除(文件小于1K,数量50w~100w),发现rm删除速度奇慢无比,甚至出现“argument list too long”的错误。网上资料一搜索基本都是建议rsync方法,所以本文对几种常见的方法进行试验对比。

二、相关知识

2.1 文件系统的元数据(metadata)

1)superblock:记录文件系统的整体信息,包含inode/block的大小、总量、使用量、剩余量,以及文件系统的格式,文件系统挂载时间,最近一次数据写入时间,最近一次校验磁盘的时间等。

2)inode:表示文件系统的对象,具备唯一标识符(一个文件占用一个inode),inode记录了文件的元信息,具体来说包含的信息为:文件所有者、访问权限(读、写、执行)、类型(是文件还是目录)、内容修改时间、inode修改时间、上次访问时间、对应的文件系统存储块(Block)的地址;

3)block:实际记录文件的内容,若文件太大,则会占用多个block,通常的block大小有1K,2K,4K三种,这里内核记录block信息的数据结构是Bitmap。

2.2 文件系统工作原理(ext2、ext3)

ext2 为索引式文件系统,新增一个文件的流程如下:

1)确定目录是否有写权限/打开权限(w/x),没有则返回失败;

2)根据inode-bitmap分配新的inode,将新文件权限/属性记入;

3)根据block-bitmap分配新的block,将文件数据写入block中,更新inode的block指向数据;

4)将新的inode、block数据同步到inode-bitmap、block-bitmap中,并更新superblock内容;

ext3 为日志式文件系统,对ext2的缺点进行改进(系统故障重启,修复元数据信息耗时长),多出一块日志记录区块来保证可靠性:

1)当系统准备写入一个文件时,先在日志记录区块记录文件要写入的信息;

2)写入文件权限/属性,写入文件数据,更新元数据内容(同ext2);

3)完成数据与元数据更新后,在日志记录区块完成文件的记录;

在出现故障需要恢复时,可根据日志追踪之前提交到主文件系统的更改,大大减少了磁盘的扫描时间,实现丢失数据的快速重建,比传统的索引式文件系统更安全[3]。Linux下的集中日志式文件系统有XFS(目前是CentOS7的默认文件系统),ReiserFS,Ext3,Ext4。


三、实验

3.1 实验环境

CPU:4核,Intel(R) Core(TM) i3-3120ME CPU @ 2.40GHz 

内存:8G

硬盘:1T(ST1000NM0055)

操作系统:Linux-3.10.25

文件系统:ext3

软件版本:find、rm(busybox1.24)、rsync3.1、bash3.2、perl5.8

3.2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值