最近将几台 VPS 的 sing-box 更新到 1.14.3 后,发现节点无法连接,其中一台服务器还出现了 Bus error 。经过排查,最终成功修复,Shadowsocks 和 VLESS REALITY 节点均恢复正常。
这里记录完整的排查和解决过程,供遇到类似问题的朋友参考。一、故障环境 项目 环境 系统 Debian 12 架构 Linux AMD64 / x86_64 虚拟化 KVM sing-box 1.14.3 管理脚本 sing-box script v1.18 磁盘 2GB 节点协议 Shadowsocks / VLESS REALITY 更新后出现以下问题: sing-box 服务启动失败 执行 sing-box version 提示 Bus error 客户端所有节点无法正常访问网络 VPS 磁盘使用率达到 100% 注意:以下操作适用于使用 systemd 、且 sing-box 安装在 /etc/sing-box/bin/sing-box 的服务器。
其他安装方式需要调整路径。二、检查 sing-box 服务 SSH 登录服务器,执行: systemctl status sing-box --no-pager -l 发现报错: Active: failed (Result: signal) Main process exited, code=killed, status=7/BUS Start request repeated too quickly. 继续检查: /etc/sing-box/bin/sing-box version 结果: Bus error 说明程序在执行基本版本命令时就发生崩溃。
这种情况优先检查二进制文件本身,而不是直接修改节点配置。三、检查 VPS 磁盘空间 执行: df -h / 发现: Filesystem Size Used Avail Use% /dev/vda1 2.0G 2.0G 0 100% 磁盘已经完全写满。
继续检查: du -xhd1 /var /root /etc /usr 2>/dev/null 发现: 836M /var/log 进一步检查: du -ah /var/log 2>/dev/null | sort -hr | head -30 发现问题: 836M /var/log 772M /var/log/sing-box/access.log 原来 sing-box 的访问日志已经增长到 772MB 。对于只有 2GB 磁盘的 VPS ,这个日志文件占用了大量空间。
解决方法:清空访问日志 确认不需要保留历史访问日志后,执行: truncate -s 0 /var/log/sing-box/access.log 再次检查: df -h / 清理后: Filesystem Size Used Avail Use% /dev/vda1 2.0G 1.3G 583M 69% 磁盘空间成功恢复。注意:不要直接执行 rm -rf /var/log/* ,避免误删其他系统和服务日志。
四、修复 sing-box Bus error 磁盘恢复后,发现原来的 sing-box 二进制仍然出现: Bus error 怀疑此前升级时磁盘空间不足,造成二进制文件损坏。这属于根据故障过程作出的推测,并非已经通过文件校验证实的唯一原因。
- 备份原程序 systemctl stop sing-box cp -a /etc/sing-box/bin/sing-box \ /root/sing-box.broken 2. 下载官方 sing-box 1.14.3 创建新目录: mkdir -p /root/sing-box-fix cd /root/sing-box-fix 下载: curl -fL --retry 3 \ -o sing-box.tar.gz \ /ai-market-guide/ 检查压缩包: tar -tzf sing-box.tar.gz >/dev/null && echo "Archive OK" 输出: Archive OK 解压: tar -xzf sing-box.tar.gz 注意:压缩包能够解压并不等于通过官方校验和验证;如果需要校验来源和完整性,应进一步核对官方发布的 SHA-256 。
- 测试新程序 /root/sing-box-fix/sing-box-1.14.3-linux-amd64/sing-box version 正常输出: sing-box version 1.14.3 Environment: go1.26.8 linux/amd64 新下载的程序运行正常,没有出现 Bus error 。 4. 替换原程序 确认新程序正常后,执行: install -m 755 \ /root/sing-box-fix/sing-box-1.14.3-linux-amd64/sing-box \ /etc/sing-box/bin/sing-box 验证: /etc/sing-box/bin/sing-box version 成功显示版本号,二进制崩溃问题解决。
五、修复 DNS 解析失败 替换程序后,sing-box 可以启动,但是节点仍然无法正常访问网络。查看日志: tail -n 30 /var/log/sing-box/access.log 发现: ERROR ntp: initialize time: lookup time.apple.com: The name org.freedesktop.resolve1 was not provided by any .service files 同时,Shadowsocks 出站报错: lookup www.gstatic.com: The name org.freedesktop.resolve1 was not provided by any .service files VLESS REALITY 握手也失败: TLS handshake: REALITY: failed to dial dest: lookup dash.cloudflare.com 由此发现: sing-box 端口已经正常监听 客户端能够连接到服务器 服务器 DNS 域名解析失败 REALITY 无法解析目标域名 Shadowsocks 无法正常建立域名出站连接 1. 检查 DNS 配置 执行: grep -n -A 20 '"dns"' /etc/sing-box/config.json 原来的主配置为: "dns": {} 2. 备份配置 cp -a /etc/sing-box/config.json \ /etc/sing-box/config.json.bak 3. 修改 DNS 配置 执行: nano /etc/sing-box/config.json 找到: "dns": {} 替换为: "dns": { "servers": [ { "type": "local", "tag": "local", "prefer_go": true } ], "final": "local" } 这里最重要的参数是: "prefer_go": true 它可以使本地 DNS 优先使用 Go 解析方式,避免当前环境中不可用的 systemd-resolved D-Bus 解析路径。
注意:这个修改适用于本次遇到的空 DNS 配置和对应错误。其他服务器如果已经配置了复杂 DNS 规则,不应直接覆盖整个 DNS 对象。
此外,仍需确保 /etc/resolv.conf 中有可用的 DNS 解析服务器。 4. nano 保存方法 修改完毕: 按 Ctrl + O 保存 按 Enter 确认文件名 按 Ctrl + X 退出 5. 检查配置 执行: /etc/sing-box/bin/sing-box check \ -c /etc/sing-box/config.json \ -C /etc/sing-box/conf 没有报错,代表配置检查通过。
注意:以上命令同时检查主配置和 /etc/sing-box/conf 目录配置,与本次 systemd 服务实际使用的启动参数一致。 6. 重启 sing-box systemctl reset-failed sing-box systemctl restart sing-box systemctl status sing-box --no-pager -l 成功显示: Active: active (running) 随后测试客户端: Shadowsocks 正常 VLESS REALITY 正常 网页访问正常 至此,两个节点全部恢复。
六、防止日志再次占满磁盘 之前的访问日志增长到了 772MB ,所以必须解决日志持续增长的问题。 1. 降低 sing-box 日志级别 编辑配置: nano /etc/sing-box/config.json 找到: "log": { "output": "/var/log/sing-box/access.log", "level": "info", "timestamp": true } 修改为: "log": { "output": "/var/log/sing-box/access.log", "level": "warn", "timestamp": true } 这样能减少大量普通连接日志,仅保留警告和错误信息。
- 配置 logrotate 执行: cat > /etc/logrotate.d/sing-box <<'EOF' /var/log/sing-box/*.log { size 10M rotate 3 missingok notifempty compress copytruncate } EOF 检查: logrotate -d /etc/logrotate.d/sing-box 配置含义: size 10M :logrotate 检查时,日志达到 10MB 则轮转 rotate 3 :保留最多 3 份旧日志 compress :压缩旧日志 copytruncate :复制日志后清空原文件,避免必须重启服务 注意:logrotate 不是实时监控。实际轮转频率取决于系统的定时任务。
如果日志增长非常快,建议提高检查频率或进一步减少日志写入。七、最终检查 执行: systemctl is-active sing-box 预期: active 检查监听端口: ss -lntup | grep sing-box 检查磁盘: df -h / 检查日志: du -sh /var/log/sing-box 检查最近错误: tail -n 30 /var/log/sing-box/access.log 最后通过客户端实际测试节点,确认连接正常。
八、其他 VPS 遇到相同问题怎么办?如果有多台服务器出现类似情况,可以按照以下顺序处理: 故障现象 处理方法 磁盘使用率 100% 检查并清理占空间的大日志 sing-box 提示 Bus error 重新下载并测试官方二进制 resolve1 DNS 错误 检查系统 DNS 和 prefer_go REALITY TLS handshake 失败 检查目标域名是否能正常解析 Shadowsocks 连接后无法上网 检查出站 DNS 和网络 access.log 持续增长 设置 warn 日志级别和 logrotate 建议先选择一台服务器修复成功,再逐台处理其他 VPS ,不要直接同时重启所有服务器。
不同 VPS 的系统、安装目录、DNS 配置和管理脚本可能不同,不能保证所有服务器都适用相同修改。九、总结 这次 sing-box 1.14.3 更新后的故障,主要经历了以下过程: sing-box 更新 | v 发现节点全部失效 | v 检查服务:SIGBUS / Bus error | v 发现 VPS 磁盘 100% | v 找到 772MB access.log | v 清理日志,释放磁盘 | v 重新下载官方 sing-box | v 替换异常二进制 | v sing-box 成功启动 | v 发现 DNS / resolve1 错误 | v 添加 prefer_go: true | v Shadowsocks + VLESS REALITY 恢复正常 | v 降低日志级别 + 设置日志轮转 最终成功恢复全部节点,无需重装 Debian ,也无需重新配置节点或证书。
最后提醒 如果 VPS 只有 2GB 磁盘,建议平时定期检查: df -h / 以及: du -sh /var/log/sing-box 尽量保留充足的可用空间。本次实际修复成功,但磁盘满与二进制损坏之间的因果关系尚未经过完整校验。
遇到相同报错时,应根据实际日志判断原因。希望这篇记录能帮到同样在更新 sing-box 后遇到问题的朋友。