linux解决rm -rf删除大量文件很慢 实现快速删除

转载  郑建华   2020-06-17   105人阅读  0 条评论

在linux上使用rm -rf删除海量文件非常慢,慢到无法等待到结果,慢到无法接受,慢到怀疑生命。先分析一下为什么rm 删除文件慢,然后给出解决方法


1.为什么rm删除大量文件很慢

rm命令大量调用了lstat64和unlink,可以推测删除每个文件前都从文件系统中做过一次lstat操作。过程:正式删除工作的第一阶段,需要通过getdirentries64调用,分批读取目录(每次大约为4K),在内存中建立rm的文件列表;第二阶段,lstat64确定所有文件的状态;第三阶段,通过unlink执行实际删除。这三个阶段都有比较多的系统调用和文件系统操作。


2.使用rsync解决删除慢的问题

rsync是类unix系统下的数据镜像备份工具,从软件的命名上就可以看出来了——remote sync。rsync是Linux系统下的文件同步和数据传输工具,它采用“rsync”算法,可以将一个客户机和远程文件服务器之间的文件同步,也可以在本地系统中将数据从一个分区备份到另一个分区上。


rsync所做的系统调用很少:没有针对单个文件做lstat和unlink操作。命令执行前期,rsync开启了一片共享内存,通过mmap方式加载目录信息。只做目录同步,不需要针对单个文件做unlink。


rsync删除文件的原理就是把一个空文件夹同步到有很多文件的文件夹


2.1安装rsync 命令


yum install rsync

2.2 rsync删除文件夹


先建立一个空目录


mkdir -p /root/blank

用rsync删除目标目录


rsync --delete-before -d /root/blank/ /root/edatacache/

这样/root/edatacache目录就被快速的清空了。


2.3 和删除有关的选项

rsync –help | grep delete
–del an alias for –delete-during
–delete delete files that don’t exist on the sending side
–delete-before receiver deletes before transfer (default)
–delete-during receiver deletes during transfer, not before
–delete-after receiver deletes after transfer, not before
–delete-excluded also delete excluded files on the receiving side
–ignore-errors delete even if there are I/O errors
–max-delete=NUM don’t delete more than NUM files
其中–delete-before 接收者在传输之前进行删除操作

2.4 rsync 选项参数说明

–delete-before 接收者在传输之前进行删除操作
–progress          在传输时显示传输过程
-a                       归档模式,表示以递归方式传输文件,并保持所有文件属性
-H                      保持硬连接的文件
-v                       详细输出模式
–stats                给出某些文件的传输状态
-d                      transfer directories without recursing

2.5 使用rsync删除大文件


和删除文件夹的原理一样


创建一个空文件


touch /root/empty.txt

用rsync清空/root/data.txt文件


rsync --delete-before -d --progess --stats /root/empty.txt /root/data.txt


本文地址:https://www.zjh336.cn/?id=1866
温馨提示:文章内容系作者个人观点,不代表华仔部落对观点赞同或支持。
版权声明:本文为转载文章,来源于 郑建华 ,版权归原作者所有,欢迎分享本文,转载请保留出处!

发表评论


表情

还没有留言,还不快点抢沙发?