Thought I’d share this guide for anybody running Umbrel OS on a Synology NAS and wanting to store the data component of their Bitcoin node on an SSD.
So basically, the Bitcoin node program runs off your main spinning hard drive volume, but then the components that need rapid and constant access, along with the chain data, are stored on an SSD volume.
My installation:
- I installed Portainer using the Marius hosting guide: Synology: 30 Second Portainer Install Using Task Scheduler & Docker – Marius Hosting
- I installed Umbrel OS using the Marius hosting guide: How to Install Umbrel OS on Your Synology NAS – Marius Hosting
- I run a Synology DS723+, 32GB RAM, 2TB NVM M.2 expansion (volume2), 12TB storage (volume1)
Guide:
- Install Bitcoin node via Umbrel OS
- Allow Bitcoin node to create folders and come online (maybe wait about 5 minutes)
- Bring Bitcoin node offline (stop service via Umbrel OS)
- Create a new Shared Folder (using Control Panel on DSM) on your SSD volume
- Create the SSD’s targets and permissions (I created a Shared Folder called SSD and then manually created the folder docker and umbrel-bitcoin-data - replace these with your folder names if required).
sudo mkdir -p /volume2/SSD/docker/umbrel-bitcoin-data
sudo chown -R 1000:1000 /volume2/SSD/docker/umbrel-bitcoin-data
sudo chmod -R 775 /volume2/SSD/docker/umbrel-bitcoin-data
- Edit the Bitcoin app compose file (docker-compose.yml in your /app-data/bitcoin folder) and add the new volume location - again change this if you’re not using the same structure as I am.
services:
app:
# … existing keys (image, user, ports, env, etc.) …
volumes:
- ${APP_DATA_DIR}/data:/data
- /volume2/SSD/docker/umbrel-bitcoin-data:/data/bitcoin # <-- add this SSD line
- Restart Bitcoin using Umbrel OS (just right click on the app in the GUI and hit start)
- You can now either check the folders on your SSD to see that they are populating and increasing in size, or you can do the following:
sudo docker inspect bitcoin_app_1 --format '{{range .Mounts}}{{println .Source "->" .Destination}}{{end}}' | grep /data/bitcoin
# expect: /volume2/SSD/docker/umbrel-bitcoin-data -> /data/bitcoin
ls -lah /volume2/SSD/docker/umbrel-bitcoin-data
# while syncing, you should see blocks/, chainstate/, indexes/ appear here
- If Bitcoin node doesn’t start or you see any errors, it’s usually a permissions thing and you can follow this sequence after stopping Bitcoin node once more via Umbrel GUI.
# HDD path (Umbrel-managed app data)
sudo chown -R 1000:1000 /volume1/docker/umbrel/app-data/bitcoin
sudo chmod -R 775 /volume1/docker/umbrel/app-data/bitcoin
# SSD path (blockchain payload)
sudo chown -R 1000:1000 /volume2/SSD/docker/umbrel-bitcoin-data
sudo chmod -R 775 /volume2/SSD/docker/umbrel-bitcoin-data
sudo synoacltool -del /volume1/docker/umbrel/app-data/bitcoin 2>/dev/null || true
sudo synoacltool -del /volume1/docker/umbrel/app-data/bitcoin/data 2>/dev/null || true
sudo synoacltool -del /volume2/SSD/docker/umbrel-bitcoin-data 2>/dev/null || true
sudo mkdir -p /volume1/docker/umbrel/app-data/bitcoin/data/app
sudo chown -R 1000:1000 /volume1/docker/umbrel/app-data/bitcoin/data/app
sudo chmod -R 775 /volume1/docker/umbrel/app-data/bitcoin/data/app
I did a lot of backwards and forwards with this and the method above was the most consistent way I managed to get this to work. Best of luck!

