6.5 KiB
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
archiveanddataare NFS-exported by DSM to this host. All other shares use CIFS. The oldatlantis_dockerNFS 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 viasudo 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 withsudo 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_datavia 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
_netdevandnofailoptions are set in fstab - NFS requires the network to be up;
_netdevdefers the mount until after networking
atlantis_docker was previously NFS but not mounting
- DSM's NFS export for
dockerwas not configured for this host's IP - Switched to CIFS — works without any DSM NFS permission changes