How To Forget Untrusted Satellites

Hi , i have 14 node , all are 1+year old , all of them have some old data from old satellite
up to 10Gbyte

in blobs/6r2fgwqz3manwt4aogq343bfkh2n5vvg4ohqqgggrrunaaaaaaaa
and blobs/arej6usf33ki2kukzd5v6xgry2tdr56g45pp3aao6llsaaaaaaaa

same folder in trash but very few if no data at all

i tried to run docker command

docker exec -it node14 ./storagenode forget-satellite --force 12rfG3sh9NCWiX3ivPjq2HtdLmbqCrvHVEzJubnzFzosMuawymB --config-dir config --identity-dir config/ident

(my identity folder is indeed inside config/ident)

it doesnt work and give no error message back

then i try

docker exec -it node14 bash

then inside docker typed

cd app
./storagenode forget-satellite --force --config-dir config --identity-dir config/ident 12rfG3sh9NCWiX3ivPjq2HtdLmbqCrvHVEzJubnzFzosMuawymB 12tRQrMTWUWwzwGh18i7Fqs67kmdhH9t6aToeiwbo5mfS2rUmo

then got

Satellite ID Status
12rfG3sh9NCWiX3ivPjq2HtdLmbqCrvHVEzJubnzFzosMuawymB Failed
12tRQrMTWUWwzwGh18i7Fqs67kmdhH9t6aToeiwbo5mfS2rUmo Failed

what i might have do wrong ?

my config.yaml only contain this

healthcheck.details: false
healthcheck.enabled: true
identity.cert-path: config/ident/identity.cert
identity.key-path: config/ident/identity.key
log.level: info
log.output: “/app/ssd/storagenode.log”
metrics.app-suffix: -alpha
metrics.interval: 30m0s
operator.email: xxxxxx.xxxx@gmail.com
operator.wallet: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
operator.wallet-features: [“zksync-era”]
storage2.database-dir: “/app/ssd/database”
storage2.piece-scan-on-startup: false
version.server-address: https://version.storj.io

this is to have the same file in every node , and i pass address / port / size , by docker command line parameter

ok fixed on my own , by putting the address , size and port in config.yaml

it also work by passing --server.private-address as parameter when calling
./storagenode forget-satellite

yes, it need to have these addresses specified. My default docker config.yaml have them though, I do not know why yours doesn’t. Did you compose it manually?

i pass address and port and size as docker parameter , so i can have the same config.yaml for all my nodes

this way if i want to change a parameter in config.yaml , i only have to do it once , and run a script to copy this file to all my nodes

simple as that

Yes, but this is also mean that you need to provide them in any docker command, including this one.

Storage Node Dashboard ( Node Version: v1.112.2 )

Running Docker and was trying to do this. Seems this doc might be out of date. I previously had success doing this but now:

docker exec -it storagenode ./storagenode forget-satellite --force 1wFTAgs9DP5RSnCqKV1eLf6N9wtk4EAtmN5DpSxcs8EjT69tGE --config-dir config --identity-dir identity

OCI runtime exec failed: exec failed: unable to start container process: exec: “./storagenode”: stat ./storagenode: no such file or directory: unknown

Also:
docker exec -it storagenode bash
I have no name!@659d0b6aa629:/app$ ls
config dashboard.sh dbs identity
I have no name!@659d0b6aa629:/app$

It has been moved to /app/config/bin/, so the command should be

docker exec -it storagenode /app/config/bin/storagenode forget-satellite --force 1wFTAgs9DP5RSnCqKV1eLf6N9wtk4EAtmN5DpSxcs8EjT69tGE --config-dir config --identity-dir identity

Updated the guide, thanks!

3 Likes

And I believe the same goes for Graceful Exit…

Node 1:

docker exec -it storagenode /app/config/bin/storagenode exit-satellite --config-dir /app/config --identity-dir /app/identity --server.private-address 127.0.0.1:14021

docker exec -it storagenode /app/config/bin/storagenode exit-status --config-dir /app/config --identity-dir /app/identity --server.private-address 127.0.0.1:14021

Node 2:

docker exec -it storagenode2 /app/config/bin/storagenode exit-satellite --config-dir /app/config --identity-dir /app/identity --server.private-address 127.0.0.1:14022

docker exec -it storagenode2 /app/config/bin/storagenode exit-status --config-dir /app/config --identity-dir /app/identity --server.private-address 127.0.0.1:14022

Yes, of course, thus it was updated too:

1 Like

Does the forget satellite command survives a restart/update? I belive it dosen’t.
I have 10TB trash dir from SL. I started GE on it more than a month ago and now I decided to help the node in removing the trash. I started the command a few days back on ver. 112.
Today it updated to 113, so it gone through a restart. The status command shows successful only on the 2 decomisioned satellites, and nothing about the SL. The trash dir is still there. So, this proves that forget sat dosen’t survive a restart and if not finished, you must run it again.
I don’t know if there should be implemented a save state/resume feature for it and if it could be, but maybe it’s something to consider…?

It doesn’t survive restarts, there is no state.

I’m struggling to gracefully exit from a docker container on truenas.

$ sudo docker exec -it ix-storj-storj-1 /app/storagenode exit-satellite --config-dir /app/config --identity-dir /app/identity --server.private-address 127.0.0.1:14002

2025-05-08T17:01:49Z INFO Configuration loaded {“Process”: “storagenode”, “Location”: “/app/config/config.yaml”}

2025-05-08T17:01:49Z INFO Anonymized tracing enabled {“Process”: “storagenode”}

2025-05-08T17:01:49Z INFO Identity loaded. {“Process”: “storagenode”, “Node ID”: “snip…”}

By starting a graceful exit from a satellite, you will no longer receive new uploads from that satellite.

This action can not be undone.

Are you sure you want to continue? [y/n]

:y


  • and then nothing!

The container log keeps logging piecestore downloads, so it appears to be running normal.

Any ideas?

I think graceful-exit just tells the satellites that they have 30 days to grab anything they need from you (which may be nothing), so you qualify for your witthheld coins… but the node otherwise runs normally. If you want to prevent uploads you could reduce the amount of space you want to share to below what you have now.

Never done it myself though: so don’t take my word for it :wink:

njahh - I believe somethings not right:

sudo docker exec -it ix-storj-storj-1 /app/dashboard.sh
Storage Node Dashboard ( Node Version: v1.126.2 )

======================

ID snip
Status ONLINE
Uptime 198h51m24s

               Available          Used        Egress     Ingress
 Bandwidth           N/A     242.38 GB     242.38 GB         0 B (since May 1)
      Disk       4.31 TB       5.69 TB

Internal 127.0.0.1:7778
External storj.toplevel.domain:28967

sudo docker exec -it ix-storj-storj-1 /app/storagenode exit-status --config-dir /app/config --identity-dir /app/identity --server.private-address 127.0.0.1:7778

2025-05-08T17:58:03Z INFO Configuration loaded {“Process”: “storagenode”, “Location”: “/app/config/config.yaml”}
2025-05-08T17:58:03Z INFO Anonymized tracing enabled {“Process”: “storagenode”}
2025-05-08T17:58:03Z INFO Identity loaded. {“Process”: “storagenode”, “Node ID”: “snip”}

Domain Name Node ID Percent Complete Successful Completion Receipt
us1.storj.io:7777 12EayRS2V1kEsWESU9QMRseFhdxYxKicsiFmxrsLZHeLUtdps3S 0.00% N N/A
ap1.storj.io:7777 121RTSDpyNZVcEU84Ticf2L1ntiuUimbWgfATz21tuvgk3vzoA6 0.00% N N/A
saltlake.tardigrade.io:7777 1wFTAgs9DP5RSnCqKV1eLf6N9wtk4EAtmN5DpSxcs8EjT69tGE 0.00% N N/A
eu1.storj.io:7777 12L9ZFwhzVpuEKMUNUqkaTLGzwY9G24tbiigLiXpmZWKwmcNDDs 0.00% N N/A

For graceful-exit, that “Percent Complete” field stays at 0% until it’s done. But maybe there is still a problem.

Should be /app/bin/storagenode

1 Like

In my Docker container the executables are in /app

this option is wrong:

since you run the node with a different private address:

So, you need to use the address 127.0.0.1:7778 instead of 127.0.0.1:14002

Thanks Alexey, yeah - I eventually figured that out yesterday, but the correct adress resulted in the dreaded “Can’t find any non-exiting satellites.”

$ sudo docker exec -it ix-storj-storj-1 /app/storagenode exit-status --config-dir /app/config --identity-dir /app/identity --server.private-address 127.0.0.1:7778
2025-05-09T09:54:51Z INFO Configuration loaded {“Process”: “storagenode”, “Location”: “/app/config/config.yaml”}
2025-05-09T09:54:51Z INFO Anonymized tracing enabled {“Process”: “storagenode”}
2025-05-09T09:54:51Z INFO Identity loaded. {“Process”: “storagenode”, “Node ID”: “snip”}

Domain Name Node ID Percent Complete Successful Completion Receipt
us1.storj.io:7777 12EayRS2V1kEsWESU9QMRseFhdxYxKicsiFmxrsLZHeLUtdps3S 0.00% N N/A
ap1.storj.io:7777 121RTSDpyNZVcEU84Ticf2L1ntiuUimbWgfATz21tuvgk3vzoA6 0.00% N N/A
saltlake.tardigrade.io:7777 1wFTAgs9DP5RSnCqKV1eLf6N9wtk4EAtmN5DpSxcs8EjT69tGE 0.00% N N/A
eu1.storj.io:7777 12L9ZFwhzVpuEKMUNUqkaTLGzwY9G24tbiigLiXpmZWKwmcNDDs 0.00% N N/A

$ sudo docker exec -it ix-storj-storj-1 /app/storagenode exit-satellite --config-dir /app/config --identity-dir /app/identity --server.private-address 127.0.0.1:7778
2025-05-09T09:56:08Z INFO Configuration loaded {“Process”: “storagenode”, “Location”: “/app/config/config.yaml”}
2025-05-09T09:56:08Z INFO Anonymized tracing enabled {“Process”: “storagenode”}
2025-05-09T09:56:08Z INFO Identity loaded. {“Process”: “storagenode”, “Node ID”: “snip”}
By starting a graceful exit from a satellite, you will no longer receive new uploads from that satellite.
This action can not be undone.
Are you sure you want to continue? [y/n]
:y
Can’t find any non-exiting satellites.

Any ideas appreciated(?)

Doesn’t that mean it’s working? If all the satellites are “exiting”… that’s what you want, no?

1 Like