You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Raspbian系统下遍历NFS挂载NAS的os.walk循环无法完成问题

你遇到的脚本无报错挂起问题,核心原因大概率是NFS挂载配置或NAS服务端异常,和Python代码逻辑无关。

问题定位步骤

  • 先确认进程状态:执行ps aux | grep 你的脚本文件名,如果进程状态显示为D,说明进程处于不可中断睡眠状态,这是NFS硬挂载下服务端无响应的典型特征,直接实锤是NFS挂载侧问题。
  • 排除Python代码问题:直接在树莓派终端执行find /home/mnt/cams -type f -name "*.avi",如果find命令也出现同样的挂起情况,完全排除代码问题,故障点在存储或挂载配置。
  • 额外说明你代码里的逻辑bug:你写的if not ("trash" or "Cameras") in name逻辑错误,("trash" or "Cameras")的运算结果永远是trash,相当于你只过滤了文件名带trash的内容,没有过滤Cameras,修正写法为if "trash" not in name and "Cameras" not in name即可,这个问题不会导致脚本挂起,只是过滤逻辑不符合预期。

解决方案

  • 调整NFS挂载参数:默认的NFS硬挂载(hard mount)会在服务端无响应时永远阻塞访问进程,你可以改为软挂载加超时重试配置,挂载时添加参数soft,timeo=10,retrans=3(timeo单位是0.1秒,10就是1秒超时,retrans是重试次数),临时挂载命令示例:mount -t nfs -o soft,timeo=10,retrans=3 [NAS的NFS共享路径] /home/mnt/cams,需要永久生效则修改/etc/fstab中对应挂载项的参数即可。
  • 定位NAS异常目录:你可以修改代码的os.walk路径为NAS下的子目录逐个遍历,定位到具体触发挂起的目录后,检查该目录是否存在损坏的inode、循环软链接、特殊权限文件等异常,在NAS侧修复对应问题即可。
  • 确认底层调用状态:如果上述排查没有结果,可以用strace -p [脚本进程ID]命令查看进程挂起时卡住的系统调用,若卡在getdents64、stat等文件系统相关调用上,即可完全确认是NFS服务端或网络传输的问题。

内容的提问来源于stack exchange,提问作者stain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 07:24:07