Bitcoin node v1.0.0 breaks symlink to external drive

Hey everyone, if you are like me and you upgraded your storage with an external harddrive with the intention of storing bitcoin data on that drive, you might have initially done this via a symlink.

The new (and much improved) v1.0.0 of bitcoin node app does break this because the entire app was re-architectured. You might see the following troubleshooting log

bitcoin_app_1          | [Error: ENOENT: no such file or directory, mkdir '/data/bitcoin'] {
bitcoin_app_1          |   errno: -2,
bitcoin_app_1          |   code: 'ENOENT',
bitcoin_app_1          |   syscall: 'mkdir',
bitcoin_app_1          |   path: '/data/bitcoin'
bitcoin_app_1          | }

I unfortunately cannot guarantee this persists between updates, you may need to repeat these steps every update

To fix this I…

  1. SSH into your umbrel - see other guides on how to do this
  2. Checked if my symlink was still there. If you had setup correctly previously, to check it your command should be ls -la ~/umbrel/app-data/bitcoin/data/
    My response was
ls -la ~/umbrel/app-data/bitcoin/data/
total 4
drwxr-xr-x 4 umbrel umbrel 1024 Dec  9  2024 .
drwxr-xr-x 5 umbrel umbrel 1024 Jun 25 16:24 ..
drwxr-xr-x 2 umbrel umbrel 1024 Dec  9  2024 app
lrwxrwxrwx 1 umbrel umbrel   19 Dec  9  2024 bitcoin -> /mnt/extssd/bitcoin
drwxr-xr-x 7 umbrel umbrel 1024 Jan  2  2024 i2pd
  1. Now check to see if the symlink target is still accessible and has the right permissions
ls -la /mnt/extssd/bitcoin

My response was

total 32744
drwxr-xr-x 9 umbrel umbrel     4096 Jun 25 16:14 .
drwxr-xr-x 4 root   root       4096 Dec  9  2024 ..
-rw------- 1 umbrel umbrel        0 Dec  9  2024 .lock
-rw------- 1 umbrel umbrel       75 Jun 25 16:14 anchors.dat
-rw------- 1 umbrel umbrel       31 Jan  2  2024 banlist.json
-rw-r--r-- 1 umbrel umbrel      101 Jan  5  2024 bitcoin-orig.conf
-rw-r--r-- 1 umbrel umbrel      211 Jan  6  2024 bitcoin.conf
drwx------ 3 umbrel umbrel   266240 Jun 25 10:15 blocks
drwx------ 2 umbrel umbrel   262144 Jun 25 16:14 chainstate
drwx------ 2 umbrel umbrel     4096 Jun 25 16:14 cormorant
-rw------- 1 umbrel umbrel 11733562 Jun 25 16:14 debug.log
drwx------ 2 umbrel umbrel     4096 Dec 16  2024 descriptor_wallet
-rw------- 1 umbrel umbrel   247985 Jun 25 16:14 fee_estimates.dat
drwx------ 4 umbrel umbrel     4096 Jan  2  2024 indexes
-rw------- 1 umbrel umbrel 16059698 Jun 25 16:14 mempool.dat
-rw------- 1 umbrel umbrel  4888682 Jun 25 16:14 peers.dat
-rw------- 1 umbrel umbrel      254 Jun 11 16:19 settings.json
-rw-r--r-- 1 umbrel umbrel     1996 Jan  5  2024 umbrel-bitcoin-orig.conf
-rw-r--r-- 1 umbrel umbrel     2089 Dec  9  2024 umbrel-bitcoin.conf
drwx------ 2 umbrel umbrel     4096 Dec 16  2024 watchonly_wallet

NOTE: Yours may look a little different. But if you get a response you should be good.

  1. Solution: Use Direct Volume Mount Instead of Symlink
    I unfortunately cannot guarantee this persists between updates but I had to swap out the volumes in the docker-compose.yml of the bitcoin app found in ~/umbrel/app-data/bitcoin/
    I ran vim ~/umbrel/app-data/bitcoin/docker-compose.yml
    I removed
    - ${APP_DATA_DIR}/data:/data # data/app and data/bitcoin
    And added in
      - ${APP_DATA_DIR}/data/app:/data/app # app configuration data
      - /mnt/extssd/bitcoin:/data/bitcoin # bitcoin blockchain data on external drive

NOTE what you put in here depends on the outputs above. For me, my drive is /mnt/extssd but yours would be found from previous commands showing the symlink target.

I saved using :wq and then restarted my bitcoin app from the umbrel UI.
This got it working again.

Hope this helps.

3 Likes

Thanks for posting, this has worked for me :folded_hands:

1 Like