Files
homelab-optimized/docs/guides/STORAGE_MOUNTS.md
Gitea Mirror Bot 316a8d8777
Some checks failed
Documentation / Deploy to GitHub Pages (push) Has been cancelled
Documentation / Build Docusaurus (push) Has started running
Sanitized mirror from private repository - 2026-04-05 12:15:35 UTC
2026-04-05 12:15:35 +00:00

6.5 KiB
Raw Blame History

Storage Mounts — Homelab

Centralised reference for all remote shares mounted across the homelab. Every host with shares exports them via SMB (CIFS), except where NFS is noted.


Architecture Overview

                        homelab-vm (192.168.0.210)
                       /mnt/...
                      /
    Atlantis ─── LAN ─── 8× CIFS + 1× NFS
    pi-5     ─── LAN ─── 1× CIFS
    Calypso  ─ Tailscale ─ 6× CIFS
    Setillo  ─ Tailscale ─ 4× CIFS
    Guava    ─ Tailscale ─ 7× CIFS

Share Inventory

Atlantis (192.168.0.200) — Synology 1823xs+

Share Mount point Protocol Notes
archive /mnt/repo_atlantis NFS v3 Git/archive storage
data /mnt/atlantis_data CIFS Primary data (media/torrents/usenet subdirs)
docker /mnt/atlantis_docker CIFS Docker volumes/configs
downloads /mnt/atlantis_downloads CIFS Download staging
games /mnt/atlantis_games CIFS Game files
torrents /mnt/atlantis_torrents CIFS Torrent data (885G, separate volume)
usenet /mnt/atlantis_usenet CIFS Usenet downloads (348G, separate volume)
website /mnt/atlantis_website CIFS Web content
documents /mnt/atlantis_documents CIFS Documents

Note: Only archive and data are NFS-exported by DSM to this host. All other shares use CIFS. The old atlantis_docker NFS entry in fstab was replaced with CIFS as the NFS export was not configured in DSM.

Calypso (100.103.48.78) — Synology DS723+, via Tailscale

Share Mount point Protocol
data /mnt/calypso_data CIFS
docker /mnt/calypso_docker CIFS
docker2 /mnt/calypso_docker2 CIFS
dropboxsync /mnt/calypso_dropboxsync CIFS
Files /mnt/calypso_files CIFS
netshare /mnt/calypso_netshare CIFS

Setillo (100.125.0.20) — Synology DS223j, via Tailscale

Share Mount point Protocol
backups /mnt/setillo_backups CIFS
docker /mnt/setillo_docker CIFS
PlexMediaServer /mnt/setillo_plex CIFS
syncthing /mnt/setillo_syncthing CIFS

Guava (100.75.252.64) — TrueNAS SCALE, via Tailscale

Share Mount point Notes
photos /mnt/guava_photos 1.6T
data /mnt/guava_data passionfruit user home data
guava_turquoise /mnt/guava_turquoise 4.5T, 68% used — large archive
website /mnt/guava_website
jellyfin /mnt/guava_jellyfin Jellyfin media
truenas-exporters /mnt/guava_exporters Prometheus exporters config
iso /mnt/guava_iso ISO images

TrueNAS password quirk: TrueNAS SCALE escapes ! as \! when storing SMB passwords internally. If your password ends in !, the credentials file must append a backslash: password="REDACTED_PASSWORD"\!. Setting the password is done via sudo python3 -c "import subprocess,json; subprocess.run(['midclt','call','user.update','USER_ID',json.dumps({'password':'PASS'})], capture_output=True, text=True)" — then restart SMB with sudo midclt call service.restart cifs.

pi-5 / rpi5-vish (192.168.0.66) — Raspberry Pi 5

Share Mount point Protocol Notes
storagepool /mnt/pi5_storagepool CIFS 457G NVMe btrfs

pi-5 also mounts atlantis:/volume1/data/mnt/atlantis_data via NFS.


Setup from Scratch

1. Install dependencies

sudo apt-get install -y cifs-utils nfs-common

2. Create credentials files

All files go in /etc/samba/, owned root, mode 0600.

# Atlantis & Setillo share the same credentials
sudo bash -c 'cat > /etc/samba/.atlantis_credentials << EOF
username=vish
password=REDACTED_PASSWORD
EOF
chmod 600 /etc/samba/.atlantis_credentials'

sudo bash -c 'cat > /etc/samba/.calypso_credentials << EOF
username=Vish
password=REDACTED_PASSWORD
EOF
chmod 600 /etc/samba/.calypso_credentials'

sudo bash -c 'cat > /etc/samba/.setillo_credentials << EOF
username=vish
password=REDACTED_PASSWORD
EOF
chmod 600 /etc/samba/.setillo_credentials'

sudo bash -c 'cat > /etc/samba/.pi5_credentials << EOF
username=vish
password=REDACTED_PASSWORD
EOF
chmod 600 /etc/samba/.pi5_credentials'

3. Create mount points

sudo mkdir -p \
  /mnt/repo_atlantis \
  /mnt/atlantis_{data,docker,downloads,games,torrents,usenet,website,documents} \
  /mnt/calypso_{data,docker,docker2,dropboxsync,files,netshare} \
  /mnt/setillo_{backups,docker,plex,syncthing} \
  /mnt/pi5_storagepool

4. Apply fstab

Copy the entries from hosts/vms/homelab-vm/fstab.mounts into /etc/fstab, then:

sudo mount -a

5. Verify

df -h | grep -E 'atlantis|calypso|setillo|pi5'

Troubleshooting

Mount fails with "Permission denied" (CIFS)

  • Credentials file has wrong username or password
  • On Synology, the SMB user password is the DSM account password — separate from SSH key auth
  • Test a single mount manually: sudo mount -t cifs //HOST/SHARE /tmp/test -o credentials=/etc/samba/.CREDS,vers=3.0

Mount fails with "No route to host" (Calypso/Setillo)

  • These are Tailscale-only — ensure Tailscale is up: tailscale status
  • Calypso and Setillo are not reachable over the LAN directly

Guava LAN shares unreachable despite SMB running

Calypso advertises 192.168.0.0/24 as a Tailscale subnet route. Any node with accept_routes: true will install that route in Tailscale's policy routing table (table 52), causing replies to LAN clients to be sent back via the Tailscale tunnel instead of the LAN — the connection silently times out.

Check for rogue routes:

ssh guava "ip route show table 52 | grep 192.168"

Fix — remove stale routes immediately:

ssh guava "sudo ip route del 192.168.0.0/24 dev tailscale0 table 52"

Fix — permanent (survives reboot): Set accept_routes: false in the TrueNAS Tailscale app config via midclt call app.update or the web UI. See docs/troubleshooting/guava-smb-incident-2026-03-14.md for full details.

NFS mount hangs at boot

  • Ensure _netdev and nofail options are set in fstab
  • NFS requires the network to be up; _netdev defers the mount until after networking

atlantis_docker was previously NFS but not mounting

  • DSM's NFS export for docker was not configured for this host's IP
  • Switched to CIFS — works without any DSM NFS permission changes