V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
swordsmile
V2EX  ›  Linux

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

  •  
  •   swordsmile · 19 小时 15 分钟前 · 1338 次点击

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

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

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

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

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

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

    linux 上现在支持 openzfs 很好了

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

    要搞清楚这种日志文件系统的底层原理,你删文件的时候,其实没有真删除数据, 实际上是删出映射关系罢了
    删除百万小文件时,只动 SSD 上的元数据,根本不动存储盘
    caola
        11
    caola  
       15 小时 12 分钟前
    问一下 AI 吧,以前我的单个目录也是上百万个小文件,一条命令就很快就解决了
    pckillers
        12
    pckillers  
       14 小时 59 分钟前
    rm -rf 文件夹很慢么?
    Cooky
        13
    Cooky  
       14 小时 53 分钟前
    @mrzx 这得看客户端和服务端的配合,能挂载了直接扇区操作性能就没有影响,反而不需要服务端做文件检索
    realJamespond
        14
    realJamespond  
       14 小时 39 分钟前
    有用的拷出来,format
    yulgang
        15
    yulgang  
       14 小时 32 分钟前
    感觉在 S3 存储里按天建桶,用完直接删桶速度更快,不过他的写性能就比较糟糕了。
    ryd994
        16
    ryd994  
       12 小时 35 分钟前 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  
       12 小时 26 分钟前 via Android
    @mrzx 另外,如果想用好 zfs 的特性的话,我觉得这事可以这样做:每天新建一个 dataset ,删除的时候直接删 dataset 会比 rm -r 更快。因为 rm -r 或者 rsync 都是穷举所有文件,然后一个一个文件删除。删 dataset 是直接删文件系统索引。

    又或者,邪教:checkpoint 。缺点是必须单独一个 zpool 。因为 checkpoint 是整个 zpool 级别的操作,只允许有一个。可以全局回档。本意是对 zpool 进行高风险操作时有一次回档的机会。比如加 vdev 加错了就只能格盘。
    mrzx
        18
    mrzx  
       12 小时 21 分钟前
    @ryd994 学习了.
    swordsmile
        19
    swordsmile  
    OP
       11 小时 5 分钟前
    @ryd994 #17 感谢大神提供的思路。
    CapNemo
        20
    CapNemo  
       7 小时 6 分钟前
    能直接从 host 侧下手吗
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   926 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 48ms · UTC 20:03 · PVG 04:03 · LAX 13:03 · JFK 16:03
    ♥ Do have faith in what you're doing.