修开机慢 2 分钟:掉电重启后要 2 分 10 秒才能恢复

用户早上撞上 Cloudflare Error 1033。查出来是设备**掉电重启**:
上次开机到重启之间没有任何日志落盘(直接断电的特征),
dmesg 里还有 "l13: voltage operation not allowed"。

重启本身不是软件问题,但**恢复太慢**:
    Startup finished in 3.846s (kernel) + 2min 6.358s (userspace) = 2分10秒
那 2 分钟里浏览器看到的就是 1033。

根因:
    这台机器 NetworkManager 和 systemd-networkd 同时在跑,
    但 wlan0 归 NetworkManager 管。
      NetworkManager-wait-online   -> 开机 9 秒成功
      systemd-networkd-wait-online -> 等一个不归它管的网络,
                                      干等 2 分钟超时,然后 failed
    network-online.target 要等**两个都完成**,
    被那个失败的拖了整整 2 分钟,
    relay / tunnel / net-tune 全跟着等。

修法:
  1. mask 掉 systemd-networkd-wait-online(网络不归它管,只会拖后腿)
  2. watchdog 首次检查从"开机后 2 分钟"提前到 45 秒

实测(重启验证过):
    修之前  Startup finished in 3.846s + 2min 6.358s = 2分10秒
    修之后  Startup finished in 3.218s +   14.060s =   17.3秒
    掉电重启后公网恢复时间:**24 秒**(快了 5 倍多)

配套加了 scripts/speed-up-boot.sh,换设备时直接跑一遍。

顺带确认重启后一切自动恢复:
    三个服务 active + enabled ✓
    keepalive 30/10/3、MTU 探测、MSS 钳制、slow_start=0 全部持久化 ✓
    隧道 4 条连接 http2 ✓
    官网 / 管理页 / 截图全部 200 ✓
This commit is contained in:
xmz7891
2026-10-07 10:27:07 +08:00
parent bcb089eded
commit f4a146056f
12 changed files with 636 additions and 25 deletions
+46
View File
@@ -0,0 +1,46 @@
#!/bin/bash
# 加快掉电重启后的恢复速度。
#
# 背景(实测数据):
# 用户撞上的 Cloudflare Error 1033 是设备**掉电重启**造成的。
# 修之前开机要 2 分 10 秒公网才恢复,那段时间浏览器就是 1033。
#
# 根因:这台机器 NetworkManager 和 systemd-networkd 同时在跑,
# 但 wlan0 归 NetworkManager 管。
# NetworkManager-wait-online -> 9 秒成功
# systemd-networkd-wait-online -> 等不归它管的网络,
# 干等 2 分钟超时然后 failed
# network-online.target 要等两个都完成,
# 被那个失败的拖了整整 2 分钟,
# relay / tunnel / net-tune 全跟着等。
#
# 修完:用户空间 2分6秒 -> 14秒;掉电重启后 24 秒公网恢复。
set -u
echo " 1. mask 掉 systemd-networkd-wait-online(网络不归它管)"
systemctl disable --now systemd-networkd-wait-online.service 2>&1 | sed 's/^/ /'
systemctl mask systemd-networkd-wait-online.service 2>&1 | sed 's/^/ /'
echo " 2. watchdog 首次检查提前到开机后 45 秒"
cat > /etc/systemd/system/lanremote-watchdog.timer <<'EOF'
[Unit]
Description=每 20 秒检查一次隧道连接数
[Timer]
# 原来 OnBootSec=2min。开机后隧道几十秒就连上了,
# 干等 2 分钟才第一次检查没必要。
OnBootSec=45s
OnUnitActiveSec=20s
AccuracySec=5s
Unit=lanremote-watchdog.service
[Install]
WantedBy=timers.target
EOF
systemctl daemon-reload
systemctl restart lanremote-watchdog.timer
echo " 3. 确认"
echo " networkd-wait-online: $(systemctl is-enabled systemd-networkd-wait-online 2>&1)(应为 masked)"
echo " watchdog timer: $(systemctl is-active lanremote-watchdog.timer 2>&1)"
systemctl list-dependencies network-online.target --no-pager 2>/dev/null | sed 's/^/ /'