Linux nfs 客户端如何快速删除大量小文件 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
swordsmile
V2EX    Linux

Linux nfs 客户端如何快速删除大量小文件

  •  
  •   swordsmile 8 天前 1922 次点击

    linux 下有个程序每天在 NFS 共享目录(生成一个当天日期的文件夹)下缓存 100 万左右的文件,大小差不多 3-5T ,这个程序处理完成后可以删除,如何在 Linux 下快速删除它们呢。

    按照网上的这个同步空目录的方法,差不多耗时 7 个小时。 rsync --delete-before -d -H -O --progress /tmp/empty/ 2026-04-02/

    2 条回复    2026-04-17 08:35:53 +08:00
    yolee599
        1
    yolee599  
       8 天前 via Android
    试试问 AI 看它怎么说
    Cooky
        2
    Cooky  
       8 天前   6
    在 nfs 里放个足够大的镜像文件,客户端直接挂载这个镜像,在镜像里操作小文件,用完了直接重新格式化
    EchoWhale
        3
    EchoWhale  
       8 天前 via iPhone
    @Cooky
    swordsmile
        4
    swordsmile  
    OP
       8 天前
    Linux 下有没有删除上百万文件比较快的对象存储?
    paopjian
        5
    paopjian  
       8 天前
    内存盘卸载后直接空了, 按上面的思路一个是硬盘分区后直接格式化是不是更快, 我问 G 他说可以用 Loop Device (虚拟镜像文件)
    mrzx
        6
    mrzx  
       8 天前   1
    @swordsmile 按照运维的思维是

    直接想办法把这个目录单独映射一个分区
    然后 umount /dev/sdxx
    然后 mkfs.ext4 /dev/sdxx 在重新挂载

    这个速度会极快
    为什么要删?破坏这个分区不就行了吗
    mrzx
        7
    mrzx  
       8 天前
    @paopjian ramdisk 没有这么大的...人家 3T 到 5T 当然了,别人有钱是另外回事

    而且内存断掉数据就会丢失 如何将 ramdisk 里的数据缓慢的写入到其他存储也是另外个困难了..
    mrzx
        8
    mrzx  
       8 天前
    @Cooky 你这种方法也是个好方法,直接了当 就是写性能稍微有些低下...
    kome
        9
    kome  
       8 天前 via iPhone
    完全释放文件占用,直接删除目录,速度应该是最快的吧。
    mrzx
        10
    mrzx  
       8 天前
    还有个方法,我做运维用到的

    linux 上现在支持 openzfs 很好了

    咋办,利用 zfs 文件格式的特性 做元数据分离
    搞 2 块高性能固态硬盘独立 SLOG ,所有元数据修改、删除操作先落日志盘,

    要搞清楚这种日志文件系统的底层原理,你删文件的时候,其实没有真删除数据, 实际上是删出映射关系罢了
    删除百万小文件时,只动 SSD 上的元数据,根本不动存储盘
    caola
        11
    caola  
       8 天前
    问一下 AI 吧,以前我的单个目录也是上百万个小文件,一条命令就很快就解决了
    pckillers
        12
    pckillers  
       8 天前
    rm -rf 文件夹很慢么?
    Cooky
        13
    Cooky  
       8 天前
    @mrzx 这得看客户端和服务端的配合,能挂载了直接扇区操作性能就没有影响,反而不需要服务端做文件检索
    realJamespond
        14
    realJamespond  
       8 天前
    有用的拷出来,format
    yulgang
        15
    yulgang  
       8 天前
    感觉在 S3 存储里按天建桶,用完直接删桶速度更快,不过他的写性能就比较糟糕了。
    ryd994
        16
    ryd994  
       8 天前 via Android
    @mrzx 元数据不在 SLOG 上。SLOG 仅用于 sync 模式写入的文件。如果没有 SLOG ,那 sync 模式写入的数据会按随机顺序直接写入硬盘,等有空的时候再整理释放。
    因为同步写入要求必须落盘后才可以返回完成,这样可以避免阻塞写入的进程。
    async 模式写入的文件默认不会使用 SLOG ,会在内存里排序后再落盘。

    文件系统结构数据属于 special 。一般建议使用 3 块高性能 SSD RAID1 做 special vdev 。因为 special 比 SLOG 更危险。就算 SLOG 设备损坏,可以强行挂载,只是丢失 SLOG 里的新数据,其他没有写入的文件仍然完好。但是如果 special 设备丢失,整个池就彻底损毁,所以建议至少 3 度冗余。

    实际上,SLOG 是最常见的错误用法,除非是跑虚拟机或数据库,否则大部分人不会用到 SLOG 。
    其次是 L2ARC ,因为 L2ARC 需要内存 ARC 做索引,使用不当反而会挤占内存。L2ARC 是内存加满之后才需要考虑的选项。
    special 是最少人用的。原因也很简单,听起来就很危险。但是它对小文件性能的影响也是最大的。
    ryd994
        17
    ryd994  
       8 天前 via Android
    @mrzx 另外,如果想用好 zfs 的特性的话,我觉得这事可以这样做:每天新建一个 dataset ,删除的时候直接删 dataset 会比 rm -r 更快。因为 rm -r 或者 rsync 都是穷举所有文件,然后一个一个文件删除。删 dataset 是直接删文件系统索引。

    又或者,邪教:checkpoint 。缺点是必须单独一个 zpool 。因为 checkpoint 是整个 zpool 级别的操作,只允许有一个。可以全局回档。本意是对 zpool 进行高风险操作时有一次回档的机会。比如加 vdev 加错了就只能格盘。
    mrzx
        18
    mrzx  
       8 天前
    @ryd994 学习了.
    swordsmile
        19
    swordsmile  
    OP
       8 天前
    @ryd994 #17 感谢大神提供的思路。
    CapNemo
        20
    CapNemo  
       8 天前
    能直接从 host 侧下手吗
    swordsmile
        21
    swordsmile  
    OP
       7 天前
    @CapNemo NFS 共享是存储提供的,存储厂家一般不会开放后台的
    关于     帮助文档     自助推广系统   &nsp; 博客     API     FAQ     Solana     884 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 66ms UTC 21:50 PVG 05:50 LAX 14:50 JFK 17:50
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86