图片目录堆了八十多万个小文件,ls 和 find 要卡十几秒,du 扫一遍半小时,IO 并不忙但单核 CPU 接近跑满,看着像文件系统出了问题。第一次遇到会往复杂处想,其实漏掉的多是个小前提。
ls /data/pic | wc -l sudo dumpe2fs -h /dev/vdb1 | grep features sudo umount /data && sudo e2fsck -fD /dev/vdb1 find /data/pic -maxdepth 1 -type f | wc -l
目录索引没开时 ext4 的目录项是线性链表,几十万条目的查找退化成遍历,dumpe2fs 的 features 里一看就知道有没有开,重建索引要卸载分区,得挑停机窗口。这一点先确认清楚,后面就不用反复试。
「ext4 目录索引」这类改动最怕改一半,回滚脚本先准备好,再动生产。把这次用到的命令存进笔记,比记住结论有用,换个环境还能照着走。
改完隔一天再看一次,当场正常不代表能稳住。
具体做法是,用 dumpe2fs 查 features 里是否包含 dir_index 没开就说明问题在这 先记下来;卸载分区之后用 e2fsck 的 D 参数重建目录索引 这一步要停机做;长期按日期哈希分子目录把单目录文件压到万级 从源头避免。
改完照着核一遍,ls 该目录能在两秒内返回 文件总数与 find 统计一致 业务读写也顺畅。
