np, the guide did not mention what permission to set neither if i should create the folders first or if they would be created automatic
the reason i use portainer is that i have a gui that way and can just drop in the stack file and it should “just run”… but in a nutshell portainer i just that, a gui for docker
EDIT: well some folders i had to create myself, the Identity one as i copied the ident files from a folder belonging to root user, and yes i know you should not run things as root, but that is what i did when i created the ident
EDIT2:
the guide shows this example for running directly from CLI
That tells the node to run as same user and group that ran docker compose - ie current user/group - this is ideal - would use whatever user portainer uses.
chmod 755 -R /srv/mergerfs/Data/Storj/
may fix it. If not 775, 777 will definitely fix, but far from ideal.
I even tried to delete everything in the storage folder and use
- SETUP=true
EDIT:
will look at this in the morning…. but yes i use mergerfs to join several disks, the smart thing is that i can replace a small disk in the array with a bigger one without loosing data and it does not take long to do
and other posts only says its a real problem if the disks fail
I bet it has something to do with the extended ACLs on the files and folders in /srv/mergerfs/Data/Storj/Storage (the + at the end of file permission string -rw-------+). I would remove those and also recursive set the ownership of /srv/mergerfs/Data/Storj/Storage to the same values you specify under user in your docker-compose file.
If you do not set a user in the docker compose file the container will run as root. Then you can set userid and groupid to your userid and groupid and root will be able to read/write. You can find those with
id -u
id -g
But most important part is to get rid of the + on the permissions
root@bo-omv:/srv/mergerfs/Data/Storj/Storage# sudo docker logs --tail 40 storagenode1
2025-10-30T00:12:04Z INFO Operator wallet {"Process": "storagenode", "Address": "****"}
2025-10-30T00:12:04Z INFO db database does not exist {"Process": "storagenode", "database": "info"}
2025-10-30T00:12:04Z INFO db database does not exist {"Process": "storagenode", "database": "bandwidth"}
2025-10-30T00:12:04Z INFO db database does not exist {"Process": "storagenode", "database": "orders"}
2025-10-30T00:12:04Z INFO db database does not exist {"Process": "storagenode", "database": "piece_expiration"}
2025-10-30T00:12:04Z INFO db database does not exist {"Process": "storagenode", "database": "pieceinfo"}
2025-10-30T00:12:04Z INFO db database does not exist {"Process": "storagenode", "database": "piece_spaced_used"}
2025-10-30T00:12:04Z INFO db database does not exist {"Process": "storagenode", "database": "reputation"}
2025-10-30T00:12:04Z INFO db database does not exist {"Process": "storagenode", "database": "storage_usage"}
2025-10-30T00:12:04Z INFO db database does not exist {"Process": "storagenode", "database": "used_serial"}
2025-10-30T00:12:04Z INFO db database does not exist {"Process": "storagenode", "database": "satellites"}
2025-10-30T00:12:04Z INFO db database does not exist {"Process": "storagenode", "database": "notifications"}
2025-10-30T00:12:04Z INFO db database does not exist {"Process": "storagenode", "database": "heldamount"}
2025-10-30T00:12:04Z INFO db database does not exist {"Process": "storagenode", "database": "pricing"}
2025-10-30T00:12:04Z INFO db database does not exist {"Process": "storagenode", "database": "secret"}
2025-10-30T00:12:04Z INFO db database does not exist {"Process": "storagenode", "database": "garbage_collection_filewalker_progress"}
2025-10-30T00:12:04Z INFO db database does not exist {"Process": "storagenode", "database": "used_space_per_prefix"}
2025-10-30T00:12:04Z ERROR failure during run {"Process": "storagenode", "error": "Error opening revocation database: revocation database: boltdb: no such device\n\tstorj.io/storj/private/kvstore/boltdb.New:43\n\tstorj.io/storj/private/revocation.openDBBolt:52\n\tstorj.io/storj/private/revocation.OpenDB:35\n\tstorj.io/storj/private/revocation.OpenDBFromCfg:23\n\tmain.cmdRun:76\n\tmain.newRunCmd.func1:33\n\tstorj.io/common/process.InitBeforeExecute.func1.2:389\n\tstorj.io/common/process.InitBeforeExecute.func1:407\n\tgithub.com/spf13/cobra.(*Command).execute:985\n\tgithub.com/spf13/cobra.(*Command).ExecuteC:1117\n\tgithub.com/spf13/cobra.(*Command).Execute:1041\n\tstorj.io/common/process.ExecWithCustomOptions:115\n\tmain.main:34\n\truntime.main:283", "errorVerbose": "Error opening revocation database: revocation database: boltdb: no such device\n\tstorj.io/storj/private/kvstore/boltdb.New:43\n\tstorj.io/storj/private/revocation.openDBBolt:52\n\tstorj.io/storj/private/revocation.OpenDB:35\n\tstorj.io/storj/private/revocation.OpenDBFromCfg:23\n\tmain.cmdRun:76\n\tmain.newRunCmd.func1:33\n\tstorj.io/common/process.InitBeforeExecute.func1.2:389\n\tstorj.io/common/process.InitBeforeExecute.func1:407\n\tgithub.com/spf13/cobra.(*Command).execute:985\n\tgithub.com/spf13/cobra.(*Command).ExecuteC:1117\n\tgithub.com/spf13/cobra.(*Command).Execute:1041\n\tstorj.io/common/process.ExecWithCustomOptions:115\n\tmain.main:34\n\truntime.main:283\n\tmain.cmdRun:78\n\tmain.newRunCmd.func1:33\n\tstorj.io/common/process.InitBeforeExecute.func1.2:389\n\tstorj.io/common/process.InitBeforeExecute.func1:407\n\tgithub.com/spf13/cobra.(*Command).execute:985\n\tgithub.com/spf13/cobra.(*Command).ExecuteC:1117\n\tgithub.com/spf13/cobra.(*Command).Execute:1041\n\tstorj.io/common/process.ExecWithCustomOptions:115\n\tmain.main:34\n\truntime.main:283"}
Error: Error opening revocation database: revocation database: boltdb: no such device
storj.io/storj/private/kvstore/boltdb.New:43
storj.io/storj/private/revocation.openDBBolt:52
storj.io/storj/private/revocation.OpenDB:35
storj.io/storj/private/revocation.OpenDBFromCfg:23
main.cmdRun:76
main.newRunCmd.func1:33
storj.io/common/process.InitBeforeExecute.func1.2:389
storj.io/common/process.InitBeforeExecute.func1:407
github.com/spf13/cobra.(*Command).execute:985
github.com/spf13/cobra.(*Command).ExecuteC:1117
github.com/spf13/cobra.(*Command).Execute:1041
storj.io/common/process.ExecWithCustomOptions:115
main.main:34
runtime.main:283
2025-10-30 00:12:04,562 WARN exited: storagenode (exit status 1; not expected)
2025-10-30 00:12:04,562 INFO gave up: storagenode entered FATAL state, too many start retries too quickly
2025-10-30 00:12:06,565 WARN received SIGQUIT indicating exit request
2025-10-30 00:12:06,566 INFO waiting for processes-exit-eventlistener, storagenode-updater to die
2025-10-30T00:12:06Z INFO Got a signal from the OS: "terminated" {"Process": "storagenode-updater"}
2025-10-30 00:12:06,569 INFO stopped: storagenode-updater (exit status 0)
2025-10-30 00:12:07,571 WARN stopped: processes-exit-eventlistener (terminated by SIGTERM)
ie mount the folder to a folder outside mergerfs… ie /mnt
but its late… i need some sleep
EDIT: or this one is a bit… lets say “janky”…. but share the folder in mergerfs over smb and mount it via fstab… but think that is the same as above…. (this proofs that i need sleep)