Azure IoT Edge设备Node-RED模块故障及磁盘空间问题求助
Azure IoT Edge模块运行时错误(磁盘空间不足)排查与解决
故障根因
- 磁盘空间完全耗尽是触发
Connection reset by peer (os error 104)错误的核心原因:Docker及IoT Edge模块在磁盘满的情况下无法正常读写数据,导致网络连接被强制重置。 - Node-RED模块未配置日志轮转策略,持续生成无限制的日志文件,逐步占满磁盘。同类设备因日志管理策略合理,磁盘占用仅维持在10%左右。
紧急解决方法
1. 快速释放磁盘空间
- 先停止IoT Edge服务避免清理时冲突:
sudo systemctl stop iotedge - 清理Docker闲置资源(未使用的镜像、容器、卷等):
sudo docker system prune -af - 定位并处理Node-RED的超大日志文件:
- 找到Node-RED容器ID:
sudo docker ps -a | grep node-red - 查询容器日志文件路径:
sudo docker inspect <容器ID> | grep LogPath - 安全截断日志文件(避免直接删除导致容器异常):
sudo truncate -s 0 <日志文件路径>
- 找到Node-RED容器ID:
- 重启IoT Edge服务并验证:
sudo systemctl start iotedge # 检查磁盘空间 df -h # 检查模块状态 sudo iotedge list
2. 恢复模块连接
磁盘空间释放后,重启异常模块即可恢复连接:
sudo iotedge restart <模块名称>
长期预防措施
1. 配置全局Docker日志轮转
编辑Docker守护进程配置文件/etc/docker/daemon.json,添加日志大小与数量限制:
{ "log-driver": "json-file", "log-opts": { "max-size": "10m", "max-file": "3" } }
重启Docker服务生效:
sudo systemctl restart docker
2. 为Node-RED模块单独配置日志限制
在IoT Edge部署清单中,针对Node-RED模块添加更精细的日志控制:
"node-red": { "settings": { "LogConfig": { "Type": "json-file", "Config": { "max-size": "5m", "max-file": "2" } } } }
3. 定期监控磁盘空间
添加定时任务,定期检查磁盘使用率并触发告警:
# 编辑定时任务 sudo crontab -e # 添加以下内容(每天凌晨2点检查根分区,使用率超80%则记录告警) 0 2 * * * df -h | grep '/dev/root' | awk '{if($5+0 > 80) print "["$(date)"] Disk space warning: " $5 " used" >> "/var/log/disk_warn.log"}'
4. 定期清理IoT Edge冗余数据
- 清理未使用的模块镜像:
sudo docker image prune -af - 清理IoT Edge HSM缓存:
sudo rm -rf /var/lib/iotedge/hsm/cache/*
内容的提问来源于stack exchange,提问作者Arseniy Sleptsov
相关产品推荐
相关产品推荐

