在 CentOS 上遇到 readdir 报错,通常不是“readdir 本身有问题”,而是调用 readdir 的进程/程序在读取某个目录时出错。下面按「常见原因 → 排查步骤 → 解决办法」给你一个实用清单。
常见报错类似:
readdir: Too many open filesreaddir: No such file or directoryreaddir: Permission deniedreaddir: Input/output errorreaddir: Structure needs cleaning不同信息对应不同原因。
原因:进程用户无目录读权限。
排查:
ls -ld /path/to/dir
id <进程用户>
解决:
chmod +rx /path/to/dir
chown -R user:group /path/to/dir
原因:
排查:
ls -l /path/to/dir
mount | grep nfs
解决:
mount -a
原因:进程打开目录/文件过多。
查看:
ulimit -n
cat /proc/<pid>/limits | grep "open files"
解决:
ulimit -n 65535
或改 /etc/security/limits.conf:
* soft nofile 65535
* hard nofile 65535
原因:
排查:
dmesg | tail
journalctl -xe
解决(谨慎):
umount /mnt
fsck -y /dev/sdX
常见于 ext4 / xfs。
解决:
umount /mountpoint
xfs_repair /dev/sdX
# 或
fsck -y /dev/sdX
报错多在访问远程目录时。
解决:
systemctl restart nfs
mount -o remount /nfs/path
如果是你自己写的 C / Shell / Python 程序:
strace -e trace=readdir your_command
或:
lsof | grep deleted
请告诉我:
cat /etc/redhat-release)我可以直接给你对应的一条命令解决方案。