linux 快速删除大量/大文件
经常会测试海量大数据,在不同文件系统下执行列出(list),删除(rm)等操作的执行时间,下面列出了,执行删除50万个文件时,使用不同的命令或者脚本,执行时间!
从上面可以看出,根据笔者之前用Hadoop,Spark等大数据使用rm命令来删除海量文件,耗时最长,且容量造成Hung机甚至系统崩溃!而使用find命令或者ls命令先列出,再通过管道传给-exec或者-delete来删除无疑是不错的选择,最快的可能就是使用Perl脚本和rsync命令来删除。
无论是海量文件或者是比较大的文件数,如果用rm和rsync做比较的话,比如说5万个文件,使用前者需要500秒,8分钟左右;而使用后者只需要10秒; 速度整整提升了50倍!
rsync --delete-before -avH --force -r /tmp/tmpdir /mnt/yourdir
原文链接:https://blog.youkuaiyun.com/Jerry_1126/article/details/79935157
1、先安装rsync:
yum install rsync
2、建立一个空的文件夹:
mkdir /tmp/test
3、用rsync删除目标目录:
rsync --delete-before -a -H -v --progress --stats /tmp/test log
这样我们要删除的log目录就会被清空了,删除的速度会非常快
1、快速删除大量文件:
假如你要在linux下删除大量文件,比如100万、1000万,那么rm -rf *可能就不好使了。 rsync 可以用来清空目录或文件,如下:
1)先建立一个空目录
mkdir/data/blank
2)用rsync删除目标目录
rsync--delete-before -d /data/blank/ /var/spool/clientmqueue/
这样目标目录很快就被清空了
注:其中--delete-before 接收者在传输之前进行删除操作
2、快速删除大文件:
假如你有一些特别大的文件要删除,比如nohup.out这样的实时更新的文件,动辄都是几十个G上百G的,也可以用rsync来清空大文件,而且效率比较高。
1)创建空文件
touch/data/blank.txt
2)用rsync清空文件
rsync-a --delete-before --progress --stats /root/blank.txt /root/nohup.out
3、为什么rsync能够快速删除大文件?
1)rm命令大量调用了lstat64和unlink,可以推测删除每个文件前都从文件系统中做过一次lstat操作。过程:正式删除工作的第一阶段,需要通过getdirentries64调用,分批读取目录(每次大约为4K),在内存中建立rm的文件列表;第二阶段,lstat64确定所有文件的状态;第三阶段,通过unlink执行实际删除。这三个阶段都有比较多的系统调用和文件系统操作。
2)rsync所做的系统调用很少:没有针对单个文件做lstat和unlink操作。命令执行前期,rsync开启了一片共享内存,通过mmap方式加载目录信息。只做目录同步,不需要针对单个文件做unlink。
另外,在其他人的评测里,rm的上下文切换比较多,会造成System CPU占用较多——对于文件系统的操作,简单增加并发数并不总能提升操作速度。
总结:频繁做减法不如直接从头来过
把文件系统的目录与书籍的目录做类比,rm删除内容时,将目录的每一个条目逐个删除(unlink),需要循环重复操作很多次;rsync删除内容时,建立好新的空目录,替换掉老目录,基本没开销。
另一种方法---------------------------------------------------------------------------------------------------------------------------
https://m.jb51.net/article/105890.htm
linux服务器运行久了,可能会出现海量的垃圾文件去删除,下面这篇文章就给大家分享了在Linux下正确快速删除海量文件的方法,需要的朋友可以参考借鉴,下面来一起看看吧。
前言
注意本文说的“海量”并不是指体积大,而是指数量,比如一个目录下有数百万个小文件。
最近在优化服务器时发现postfix下的maildrop目录和clientmqueue目录下发现有大量的文件,进入这些目录里使用ls命令是愚蠢的做法,而直接执行rm * , 没有任何反应,文件数量也没有减少,也就是说,在海量文件目录里直接使用rm命令进行删除是无效的。
那么正确的方法是什么呢?有两种方法可选:
第一种:
find /path/to/directory -type f -exec rm {} \;
第二种:
ls -1 /path/to/directory | xargs -I{} rm {}
上面这两种方法可以成功的删除海量文件,速度也很快。但还有一种更好的方法,比如要删除上面提到的clientmqueue目录,里面全部是一个一个的邮件,用下面的方法:
service sendmail stop
cd /var/spool
mv clientmqueue clientmqueue-todelete
mkdir clientmqueue
chown --reference=clientmqueue-todelete clientmqueue
chmod --reference=clientmqueue-todelete clientmqueue
service sendmail start
rm -rf clientmqueue-todelete
上面的方法是将目录重命名,然后使用了 --reference 引用参数来重建目录,然后删除重命名的目录。直接删除目录的方法速度是十分的快。也可以留着备份不删。更安全。
本文介绍在Linux环境下高效删除大量或大文件的策略,对比rm命令,rsync和find命令提供更快的解决方案,适用于海量小文件和大文件的清理。
1200

被折叠的 条评论
为什么被折叠?



