主要观点:通过一次调试发现涉及 Bash、getcwd()
和 OverlayFS 的一系列问题,从客户报告的 OpenSSH scp 在切换到 OverlayFS 后失败开始,逐步深入探究原因。
关键信息:
- 客户报告 OpenSSH scp 失败及相关错误日志。
- 排除内核问题,发现 Bash 自带
getcwd()
函数且受GETCWD_BROKEN
影响。 - 追溯到交叉编译环境导致
GETCWD_BROKEN
,以及各项目对 Bash 交叉编译的处理。 - 分析 Bash
getcwd()
实现,揭示 OverlayFS 中 inode 相关问题及 Bash 对readdir()
的错误使用。
重要细节: - Bash 日志中
getcwd
错误,分析发现来自 Bash shell 而非 scp 本身。 - 检查内核 OverlayFS 源代码未找到相关代码路径。
- Bash 中
nm -D bash | grep getcwd
的输出情况及相关代码注释。 configure
脚本输出导致GETCWD_BROKEN
的原因。- OverlayFS 的合并机制及对 inode 编号的影响。
- Bash
getcwd()
中readdir()
的错误使用及对errno
的影响。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。