请教一下各位如何在 Linux 环境下快速删除大量文件

39 天前
 juniorzhou

因为某些需求,经常要在 linux 环境下读写/删除创建 千万量级的文件,每个文件大小在 1M 左右。

文件系统是 GPFS parallel file system ,顺序 IO 估计有个 100GB/s 吧。创建的时候问题不大,用 mpi 速度还挺快,几乎无感。2000 个 mpi 任务几分钟就写好了,所以感觉 IO 应该不是瓶颈(?)

只不过删除的时候有点痛苦,不太想调用运算集群来删,有点浪费资源,希望能用一个 node 来快速完成删除,最好调用小于 128 个核心。

rm 太慢,就不考虑了。试过 rscyn ,性能也一般。现在用 find + parellel rm ,用 10 个进程删,凑合能用。不知道各位有没有什么好的建议快速删除这些文件。

另外偶尔也有备份的需求,因为不太常用,基本就用 tar 打包,丢在那半天一天也就打包好了,打包完 1~10t 左右的量级。如果哪位大佬有快速打包/解包的方案建议在此一并谢过。

4081 次点击
所在节点    Linux
39 条回复
tianice
39 天前
如果需要频繁的创建、删除,是不是可以直接修改,别再删了😄️
lucasj
39 天前
可以试试 find + -delete ,我感觉挺快的
find . -type f -name "{file_pattern}" -delete
lucasj
39 天前
并行删除不一定比顺序删除快,因为瓶颈在文件 I/O 操作。

"The I/O bound is the limiting factor (CPU, disk and memory utilisation was very low) and parallelisation just adds some overhead (in the simple case)."
zlowly
39 天前
@lucasj 附议
我的实践经验也是 find 的 -delete 参数比 xargs 并行删除要快得多
LJason
39 天前
歪个楼,Linux 不知道,但我在 Win 下这么搞:
Get-ChildItem -Recurse "PATH" | Remove-Item -Force -Recurse

比单纯 Remove-Item -Force -Recurse "PATH" 快很多
julyclyde
39 天前
@ll26571 fsck 回收。哈哈哈哈
zsj1029
39 天前
rm -rf node_modules
想不到更快的了,这个比 win 删除可快多了
即便是在 win 下,用 git bash rm 也比 win 点删方便快速
lolizeppelin
39 天前
不要删 移送到回收站
定期清理回收站
ETiV
39 天前
楼上有提到过,find 有个 -delete 参数,可以试一下
leetom
38 天前
我记得看过一个测试,大多数情况下都是 rm 最快,比 rsync find 之类快多了,毕竟专门干这个的。

上面说的 qcow2 是个好方案,不一定非要 root 权限,可以丢到虚拟机里操作
jpuyy
38 天前
有没有可能一个程序把很多文件内容清空,另一个进程来删文件?
sunqb
38 天前
有个思路,直接改文件系统的索引
sendi
38 天前
juniorzhou
38 天前
@a7851578 是的,我知道 tar 不能压缩,我只是为了把小文件打包而已,硬盘容量足够大,1~2PB 呢。

@julyclyde 可惜运行的是一个比较大且老旧的程序,比较难改了。而且为了删文件去改好像也不值当。

@mayli 赞同。我去查查 gpfs 的手册吧。

@tianice 创建新的比修改旧的快的多的多,而且也节省计算资源,没理由去修改啊。

@lucasj 我这里 IO 应该不是瓶颈,并行删除肯定是更快的。就是想问问有没有什么更高效的删除操作。

@zsj1029 rm 单线程删除的确还行,可惜本身不支持多线程,我现在其实就是多开 rm 。
goodman111
38 天前
我问了一下 GPT-4o,感觉答案挺靠谱的。
P0P
38 天前
删除卡在元数据操作,线程高了估计也没太大帮助。
如果能改代码,把文件操作变为操作一个大文件不同 offset ,最后把大文件删除即可。
MrKrabs
38 天前
那你用 unlink 嘛,多少能快点
julyclyde
38 天前
@P0P offset ?是不是可以 loopback ?
realpg
37 天前
自己搞个 file system 是最省事的办法

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1042452

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX