Hi StuPleb, thank you for the feedback. Here are the corrected
Steps to Reproduce, relevant logs, and what appears to be the
root cause:
═══════════════════════════════════════════
ENVIRONMENT
═══════════════════════════════════════════
- StartOS: v0.4.0-beta.9
- Bitcoin Knots: #knots:29.3.1:10
- Hardware: Beelink SER5 MAX (Ryzen 7 6800U, 32GB RAM, 4TB SSD)
- Node status: Fully synced prior to restart
═══════════════════════════════════════════
CORRECTED STEPS TO REPRODUCE
═══════════════════════════════════════════
- Bitcoin Knots running normally, fully synced (progress=1.000000)
- Stop service via StartOS UI → Services → Bitcoin Knots → Stop
- Wait for full stop
- Start service via StartOS UI → Services → Bitcoin Knots → Start
- Observe Health Checks panel:
- RPC → green
immediately
- Blockchain Sync → stuck on “Starting”

- Wait — Blockchain Sync never transitions to green
- Repeat Stop → Start multiple times → same result every time
- Duration stuck: 19+ hours
═══════════════════════════════════════════
ROOT CAUSE FOUND IN LOGS
═══════════════════════════════════════════
At startup (17:29:49 UTC), StartOS successfully executed the
runtime-info action and received a confirmed 100% sync response.
However, exactly 20 minutes later, startd threw a fatal error
and stopped all health check evaluation silently:
Jun 21 17:49:47 startd: ERROR startos::error: src/error.rs:672:
Network Error: Trying to work with closed connection:
Trying to work with closed connection
Jun 21 17:49:47 startd: DEBUG startos::error: src/error.rs:673:
0: Trying to work with closed connection
1: Trying to work with closed connection
Location: src/error.rs:227
After this error at 17:49:47 UTC, there is NO further startd
activity in the logs for the entire remaining window — the health
check evaluation process died and was never restarted or recovered.
The UI remained frozen on “Starting” for 19+ hours as a result.
═══════════════════════════════════════════
STARTUP SEQUENCE LOGS (17:29:49 UTC)
═══════════════════════════════════════════
– runtime-info action called –
startd: DEBUG execute:_execute: rpc_client.rs:117:
method: “execute”
procedure: “/actions/runtime-info/run”
timeout: 120000ms
– subcontainers mounted –
startd: INFO Mounting overlay ZDBX7LYY6MSE5HBA6NSA45HTWZO6LOAK
startd: INFO Mounted overlay ZDBX7LYY6MSE5HBA6NSA45HTWZO6LOAK
startd: DEBUG Unmounting ZDBX7LYY6MSE5HBA6NSA45HTWZO6LOAK
startd: INFO Mounting overlay EKXDOUELNVRL2QICKSOTQAL6Y6THO5PG
startd: INFO Mounted overlay EKXDOUELNVRL2QICKSOTQAL6Y6THO5PG
startd: DEBUG Unmounting EKXDOUELNVRL2QICKSOTQAL6Y6THO5PG
– runtime-info response (node fully synced) –
startd: DEBUG rpc_client.rs:50: result:
{
“Connections”: “12 (1 in / 11 out)”,
“Block Height”: “954724”,
“Synced Block Height”:“954724”,
“Sync Progress”: “100%”
}
– 20 minutes later – FATAL ERROR –
Jun 21 17:49:47 startd: ERROR
Network Error: Trying to work with closed connection
Location: src/error.rs:227
– No further startd activity after this point –
═══════════════════════════════════════════
BITCOIN KNOTS LOGS (node running fine throughout)
═══════════════════════════════════════════
While UI showed “Starting” for 19+ hours, Knots logs confirmed
full operation throughout:
2026-06-22T15:48:47Z UpdateTip: new best=00000000000000000002290504…
height=954856 progress=1.000000 cache=4.6MiB(32749txo)
2026-06-22T15:25:42Z CreateNewBlock(): total size: 299151
block weight: 806118 txs: 610 fees: 1089665
2026-06-22T15:45:37Z New outbound-full-relay v2 peer connected:
version: 70016, blocks=954855, peer=35
Node was actively building block templates, connecting peers,
and processing new blocks throughout the entire 19 hour period.
═══════════════════════════════════════════
SECONDARY BUG: BROKEN INTER-CONTAINER VOLUME MOUNT
═══════════════════════════════════════════
After the Bitcoin Knots restart, the Umbrel Bitcoin UI container
(IP: 10.0.3.183) lost its RPC cookie mount:
Expected inside Umbrel Bitcoin UI container:
/mnt/knots/.cookie ← Did NOT exist after restart
Actual cookie location:
/var/lib/lxc/6ICQ5PJLQRTMCDXMR55EUP25VLAUBHV6/
rootfs/media/startos/volumes/main/.cookie
This caused repeated RPC auth failures every 30 seconds
for the entire 19 hour period:
2026-06-22T15:24:52Z [warning] ThreadRPCServer incorrect
password attempt from 10.0.3.183:56168
Restarting Umbrel Bitcoin UI did NOT restore the mount.
Uninstalling was the only resolution.
═══════════════════════════════════════════
SUMMARY
═══════════════════════════════════════════
Two separate bugs identified:
BUG 1 — Health check frozen on “Starting”:
Root cause: startd throws “closed connection” error 20 minutes
after startup (src/error.rs:227) and silently stops all health
check evaluation with no recovery or retry mechanism.
The UI freezes on “Starting” indefinitely as a result.
BUG 2 — Inter-container volume mount not restored after restart:
Root cause: When Bitcoin Knots restarts, StartOS does not
re-establish volume mounts (RPC cookie) for dependent services.
Dependent services are not notified to remount, causing
continuous failed auth attempts.
Below are the Logs
Last login: Mon Jun 22 16:58:59 2026 from 192.168.20.117
start9@cphilipbitknot:~$ sudo journalctl -u “start9-bitcoin-knots*” --since “2026-06-22 00:00:00” --until “2026-06-22 01:00:00” | tail -100
Failed to add filter for units: No data available
start9@cphilipbitknot:~$ sudo journalctl --since “2026-06-21 16:00:00” --until “2026-06-21 17:00:00” | grep -i “bitcoin|knots|bitcoind|start9” | tail -100
start9@cphilipbitknot:~$ sudo journalctl --since “2026-06-21 15:00:00” --until “2026-06-21 18:00:00” | grep -i “bitcoin|knots|bitcoind” | tail -100
Jun 21 17:29:49 cphilipbitknot startd[1086]: 2026-06-21T17:29:49.754645Z INFO create_subcontainer_fs: startos::service::effects::subcontainer: src/service/effects/subcontainer/mod.rs:122: Mounting overlay ZDBX7LYY6MSE5HBA6NSA45HTWZO6LOAK for bitcoind
Jun 21 17:29:49 cphilipbitknot startd[1086]: 2026-06-21T17:29:49.805917Z INFO create_subcontainer_fs: startos::service::effects::subcontainer: src/service/effects/subcontainer/mod.rs:175: Mounted overlay ZDBX7LYY6MSE5HBA6NSA45HTWZO6LOAK for bitcoind
Jun 21 17:29:49 cphilipbitknot startd[1086]: 2026-06-21T17:29:49.895775Z INFO create_subcontainer_fs: startos::service::effects::subcontainer: src/service/effects/subcontainer/mod.rs:122: Mounting overlay EKXDOUELNVRL2QICKSOTQAL6Y6THO5PG for bitcoind
Jun 21 17:29:49 cphilipbitknot startd[1086]: 2026-06-21T17:29:49.902526Z INFO create_subcontainer_fs: startos::service::effects::subcontainer: src/service/effects/subcontainer/mod.rs:175: Mounted overlay EKXDOUELNVRL2QICKSOTQAL6Y6THO5PG for bitcoind
start9@cphilipbitknot:~$ sudo journalctl --since “2026-06-21 17:25:00” --until “2026-06-21 17:45:00” | grep -i “bitcoin|knots|bitcoind|startd|health|sync|blockchain” | tail -200
Jun 21 17:29:49 cphilipbitknot startd[1086]: 2026-06-21T17:29:49.748619Z DEBUG execute:_execute: startos::util::rpc_client: src/util/rpc_client.rs:117: [src/util/rpc_client.rs:117:29] serde_json::to_string(&request) = Ok(“{“id”:113,“method”:“execute”,“params”:{“id”:“SQJVYPAWUWJ5JGCG263PI3PRNBGBACXL”,“procedure”:“/actions/runtime-info/run”,“input”:{“input”:null},“timeout”:120000}}”)
Jun 21 17:29:49 cphilipbitknot startd[1086]: 2026-06-21T17:29:49.754645Z INFO create_subcontainer_fs: startos::service::effects::subcontainer: src/service/effects/subcontainer/mod.rs:122: Mounting overlay ZDBX7LYY6MSE5HBA6NSA45HTWZO6LOAK for bitcoind
Jun 21 17:29:49 cphilipbitknot startd[1086]: 2026-06-21T17:29:49.805917Z INFO create_subcontainer_fs: startos::service::effects::subcontainer: src/service/effects/subcontainer/mod.rs:175: Mounted overlay ZDBX7LYY6MSE5HBA6NSA45HTWZO6LOAK for bitcoind
Jun 21 17:29:49 cphilipbitknot startd[1086]: 2026-06-21T17:29:49.883864Z DEBUG destroy_subcontainer_fs:unmount: startos::disk::mount::util: src/disk/mount/util.rs:83: Unmounting /var/lib/lxc/6ICQ5PJLQRTMCDXMR55EUP25VLAUBHV6/rootfs/media/startos/subcontainers/ZDBX7LYY6MSE5HBA6NSA45HTWZO6LOAK.
Jun 21 17:29:49 cphilipbitknot startd[1086]: 2026-06-21T17:29:49.895775Z INFO create_subcontainer_fs: startos::service::effects::subcontainer: src/service/effects/subcontainer/mod.rs:122: Mounting overlay EKXDOUELNVRL2QICKSOTQAL6Y6THO5PG for bitcoind
Jun 21 17:29:49 cphilipbitknot startd[1086]: 2026-06-21T17:29:49.902526Z INFO create_subcontainer_fs: startos::service::effects::subcontainer: src/service/effects/subcontainer/mod.rs:175: Mounted overlay EKXDOUELNVRL2QICKSOTQAL6Y6THO5PG for bitcoind
Jun 21 17:29:49 cphilipbitknot startd[1086]: 2026-06-21T17:29:49.950193Z DEBUG destroy_subcontainer_fs:unmount: startos::disk::mount::util: src/disk/mount/util.rs:83: Unmounting /var/lib/lxc/6ICQ5PJLQRTMCDXMR55EUP25VLAUBHV6/rootfs/media/startos/subcontainers/EKXDOUELNVRL2QICKSOTQAL6Y6THO5PG.
Jun 21 17:29:49 cphilipbitknot startd[1086]: 2026-06-21T17:29:49.957446Z DEBUG startos::util::rpc_client: src/util/rpc_client.rs:50: [src/util/rpc_client.rs:50:61] &l = “{“jsonrpc”:“2.0”,“id”:113,“result”:{“version”:“1”,“title”:“Node Runtime Info”,“message”:null,“result”:{“type”:“group”,“value”:[{“type”:“single”,“name”:“Connections”,“description”:“The number of peers connected (inbound and outbound)”,“value”:“12 (1 in / 11 out)”,“copyable”:false,“masked”:false,“qr”:false},{“type”:“group”,“name”:“Blockchain Info”,“description”:null,“value”:[{“type”:“single”,“name”:“Block Height”,“value”:“954724”,“description”:“The current block height for the network”,“copyable”:false,“masked”:false,“qr”:false},{“type”:“single”,“name”:“Synced Block Height”,“value”:“954724”,“description”:“The number of blocks the node has verified”,“copyable”:false,“masked”:false,“qr”:false},{“type”:“single”,“name”:“Sync Progress”,“value”:“100%”,“description”:“The percentage of the blockchain that has been verified”,“copyable”:false,“masked”:false,“qr”:false}]}]}}}”
start9@cphilipbitknot:~$ sudo journalctl --since “2026-06-21 17:29:00” --until “2026-06-21 18:30:00” | grep -i “health|sync|check|bitcoind|startd” | tail -200
Jun 21 17:29:49 cphilipbitknot startd[1086]: 2026-06-21T17:29:49.748619Z DEBUG execute:_execute: startos::util::rpc_client: src/util/rpc_client.rs:117: [src/util/rpc_client.rs:117:29] serde_json::to_string(&request) = Ok(“{“id”:113,“method”:“execute”,“params”:{“id”:“SQJVYPAWUWJ5JGCG263PI3PRNBGBACXL”,“procedure”:“/actions/runtime-info/run”,“input”:{“input”:null},“timeout”:120000}}”)
Jun 21 17:29:49 cphilipbitknot startd[1086]: 2026-06-21T17:29:49.754645Z INFO create_subcontainer_fs: startos::service::effects::subcontainer: src/service/effects/subcontainer/mod.rs:122: Mounting overlay ZDBX7LYY6MSE5HBA6NSA45HTWZO6LOAK for bitcoind
Jun 21 17:29:49 cphilipbitknot startd[1086]: 2026-06-21T17:29:49.805917Z INFO create_subcontainer_fs: startos::service::effects::subcontainer: src/service/effects/subcontainer/mod.rs:175: Mounted overlay ZDBX7LYY6MSE5HBA6NSA45HTWZO6LOAK for bitcoind
Jun 21 17:29:49 cphilipbitknot startd[1086]: 2026-06-21T17:29:49.883864Z DEBUG destroy_subcontainer_fs:unmount: startos::disk::mount::util: src/disk/mount/util.rs:83: Unmounting /var/lib/lxc/6ICQ5PJLQRTMCDXMR55EUP25VLAUBHV6/rootfs/media/startos/subcontainers/ZDBX7LYY6MSE5HBA6NSA45HTWZO6LOAK.
Jun 21 17:29:49 cphilipbitknot startd[1086]: 2026-06-21T17:29:49.895775Z INFO create_subcontainer_fs: startos::service::effects::subcontainer: src/service/effects/subcontainer/mod.rs:122: Mounting overlay EKXDOUELNVRL2QICKSOTQAL6Y6THO5PG for bitcoind
Jun 21 17:29:49 cphilipbitknot startd[1086]: 2026-06-21T17:29:49.902526Z INFO create_subcontainer_fs: startos::service::effects::subcontainer: src/service/effects/subcontainer/mod.rs:175: Mounted overlay EKXDOUELNVRL2QICKSOTQAL6Y6THO5PG for bitcoind
Jun 21 17:29:49 cphilipbitknot startd[1086]: 2026-06-21T17:29:49.950193Z DEBUG destroy_subcontainer_fs:unmount: startos::disk::mount::util: src/disk/mount/util.rs:83: Unmounting /var/lib/lxc/6ICQ5PJLQRTMCDXMR55EUP25VLAUBHV6/rootfs/media/startos/subcontainers/EKXDOUELNVRL2QICKSOTQAL6Y6THO5PG.
Jun 21 17:29:49 cphilipbitknot startd[1086]: 2026-06-21T17:29:49.957446Z DEBUG startos::util::rpc_client: src/util/rpc_client.rs:50: [src/util/rpc_client.rs:50:61] &l = “{“jsonrpc”:“2.0”,“id”:113,“result”:{“version”:“1”,“title”:“Node Runtime Info”,“message”:null,“result”:{“type”:“group”,“value”:[{“type”:“single”,“name”:“Connections”,“description”:“The number of peers connected (inbound and outbound)”,“value”:“12 (1 in / 11 out)”,“copyable”:false,“masked”:false,“qr”:false},{“type”:“group”,“name”:“Blockchain Info”,“description”:null,“value”:[{“type”:“single”,“name”:“Block Height”,“value”:“954724”,“description”:“The current block height for the network”,“copyable”:false,“masked”:false,“qr”:false},{“type”:“single”,“name”:“Synced Block Height”,“value”:“954724”,“description”:“The number of blocks the node has verified”,“copyable”:false,“masked”:false,“qr”:false},{“type”:“single”,“name”:“Sync Progress”,“value”:“100%”,“description”:“The percentage of the blockchain that has been verified”,“copyable”:false,“masked”:false,“qr”:false}]}]}}}”
Jun 21 17:49:41 cphilipbitknot systemd-timesyncd[541]: Sent NTP request to [2001:ac8:81:65:0:2:0:3]:123 (2.pool.ntp.org).
Jun 21 17:49:41 cphilipbitknot systemd-timesyncd[541]: NTP response:
Jun 21 17:49:41 cphilipbitknot systemd-timesyncd[541]: leap : 0
Jun 21 17:49:41 cphilipbitknot systemd-timesyncd[541]: version : 4
Jun 21 17:49:41 cphilipbitknot systemd-timesyncd[541]: mode : 4
Jun 21 17:49:41 cphilipbitknot systemd-timesyncd[541]: stratum : 2
Jun 21 17:49:41 cphilipbitknot systemd-timesyncd[541]: precision : 0.000000 sec (-23)
Jun 21 17:49:41 cphilipbitknot systemd-timesyncd[541]: root distance: 0.091820 sec
Jun 21 17:49:41 cphilipbitknot systemd-timesyncd[541]: reference : n/a
Jun 21 17:49:41 cphilipbitknot systemd-timesyncd[541]: origin : 1782064181.753
Jun 21 17:49:41 cphilipbitknot systemd-timesyncd[541]: receive : 1782064181.762
Jun 21 17:49:41 cphilipbitknot systemd-timesyncd[541]: transmit : 1782064181.762
Jun 21 17:49:41 cphilipbitknot systemd-timesyncd[541]: dest : 1782064181.772
Jun 21 17:49:41 cphilipbitknot systemd-timesyncd[541]: offset : -0.001 sec
Jun 21 17:49:41 cphilipbitknot systemd-timesyncd[541]: delay : +0.020 sec
Jun 21 17:49:41 cphilipbitknot systemd-timesyncd[541]: packet count : 467
Jun 21 17:49:41 cphilipbitknot systemd-timesyncd[541]: jitter : 0.002
Jun 21 17:49:41 cphilipbitknot systemd-timesyncd[541]: poll interval: 2048
Jun 21 17:49:41 cphilipbitknot systemd-timesyncd[541]: adjust (slew): -0.001 sec
Jun 21 17:49:41 cphilipbitknot systemd-timesyncd[541]: status : 8193 sync
Jun 21 17:49:41 cphilipbitknot systemd-timesyncd[541]: time now : 1782064181.772
Jun 21 17:49:41 cphilipbitknot systemd-timesyncd[541]: constant : 7
Jun 21 17:49:41 cphilipbitknot systemd-timesyncd[541]: offset : -0.001 sec
Jun 21 17:49:41 cphilipbitknot systemd-timesyncd[541]: freq offset : +3230231 (+49 ppm)
Jun 21 17:49:41 cphilipbitknot systemd-timesyncd[541]: interval/delta/delay/jitter/drift 2048s/-0.001s/0.020s/0.002s/+49ppm
Jun 21 17:49:41 cphilipbitknot systemd-timesyncd[541]: Sent message type=signal sender=n/a destination=n/a path=/org/freedesktop/timesync1 interface=org.freedesktop.DBus.Properties member=PropertiesChanged cookie=469 reply_cookie=0 signature=sa{sv}as error-name=n/a error-message=n/a
Jun 21 17:49:47 cphilipbitknot startd[1086]: 2026-06-21T17:49:47.935734Z ERROR startos::error: src/error.rs:672: Network Error: Trying to work with closed connection: Trying to work with closed connection
Jun 21 17:49:47 cphilipbitknot startd[1086]: 2026-06-21T17:49:47.935761Z DEBUG startos::error: src/error.rs:673: Network Error:
Jun 21 17:49:47 cphilipbitknot startd[1086]: 0: Trying to work with closed connection
Jun 21 17:49:47 cphilipbitknot startd[1086]: 1: Trying to work with closed connection
Jun 21 17:49:47 cphilipbitknot startd[1086]: Location:
Jun 21 17:49:47 cphilipbitknot startd[1086]: src/error.rs:227
Jun 21 17:49:47 cphilipbitknot startd[1086]: Backtrace omitted. Run with RUST_BACKTRACE=1 environment variable to display it.
Jun 21 17:49:47 cphilipbitknot startd[1086]: Run with RUST_BACKTRACE=full to include source snippets.
Jun 21 18:23:50 cphilipbitknot systemd-timesyncd[541]: Sent NTP request to [2001:ac8:81:65:0:2:0:3]:123 (2.pool.ntp.org).
Jun 21 18:23:50 cphilipbitknot systemd-timesyncd[541]: NTP response:
Jun 21 18:23:50 cphilipbitknot systemd-timesyncd[541]: leap : 0
Jun 21 18:23:50 cphilipbitknot systemd-timesyncd[541]: version : 4
Jun 21 18:23:50 cphilipbitknot systemd-timesyncd[541]: mode : 4
Jun 21 18:23:50 cphilipbitknot systemd-timesyncd[541]: stratum : 2
Jun 21 18:23:50 cphilipbitknot systemd-timesyncd[541]: precision : 0.000000 sec (-23)
Jun 21 18:23:50 cphilipbitknot systemd-timesyncd[541]: root distance: 0.087791 sec
Jun 21 18:23:50 cphilipbitknot systemd-timesyncd[541]: reference : n/a
Jun 21 18:23:50 cphilipbitknot systemd-timesyncd[541]: origin : 1782066230.002
Jun 21 18:23:50 cphilipbitknot systemd-timesyncd[541]: receive : 1782066230.018
Jun 21 18:23:50 cphilipbitknot systemd-timesyncd[541]: transmit : 1782066230.018
Jun 21 18:23:50 cphilipbitknot systemd-timesyncd[541]: dest : 1782066230.030
Jun 21 18:23:50 cphilipbitknot systemd-timesyncd[541]: offset : +0.002 sec
Jun 21 18:23:50 cphilipbitknot systemd-timesyncd[541]: delay : +0.027 sec
Jun 21 18:23:50 cphilipbitknot systemd-timesyncd[541]: packet count : 468
Jun 21 18:23:50 cphilipbitknot systemd-timesyncd[541]: jitter : 0.002
Jun 21 18:23:50 cphilipbitknot systemd-timesyncd[541]: poll interval: 2048
Jun 21 18:23:50 cphilipbitknot systemd-timesyncd[541]: adjust (slew): +0.002 sec
Jun 21 18:23:50 cphilipbitknot systemd-timesyncd[541]: status : 24577 sync
Jun 21 18:23:50 cphilipbitknot systemd-timesyncd[541]: time now : 1782066230.029
Jun 21 18:23:50 cphilipbitknot systemd-timesyncd[541]: constant : 7
Jun 21 18:23:50 cphilipbitknot systemd-timesyncd[541]: offset : +0.002 sec
Jun 21 18:23:50 cphilipbitknot systemd-timesyncd[541]: freq offset : +3285302 (+50 ppm)
Jun 21 18:23:50 cphilipbitknot systemd-timesyncd[541]: interval/delta/delay/jitter/drift 2048s/+0.002s/0.027s/0.002s/+50ppm
Jun 21 18:23:50 cphilipbitknot systemd-timesyncd[541]: Sent message type=signal sender=n/a destination=n/a path=/org/freedesktop/timesync1 interface=org.freedesktop.DBus.Properties member=PropertiesChanged cookie=470 reply_cookie=0 signature=sa{sv}as error-name=n/a error-message=n/a
start9@cphilipbitknot:~$