This guide is a work in progress and generated by ai, dont have time for guides. so this works Rsync Setup Guide Status: Work in Progress For the unRAID Rsync Ecosystem — common.sh · Master.conf · rsync.sh · daily_sync.sh Overview This guide walks through setting up the rsync ecosystem on both your primary and secondary unRAID 7.x servers. By the end you will have: SSH keys configured for server-to-server communication Tailscale running on both servers for secure networking Scripts scheduled and running via the User Scripts plugin Automated daily sync of media shares and appdata profiles Prerequisites Both servers need the following before starting: unRAID 7.x User Scripts plugin installed via Community Applications Tailscale plugin installed via Community Applications Terminal access to both servers (via unRAID UI → Tools → Terminal, or SSH) Step 1 — Tailscale Setup Tailscale provides the secure network tunnel between your two servers. The scripts resolve the remote server's IP via Tailscale at runtime. On Both Servers Open Apps in the unRAID UI Search for Tailscale and install the plugin Once installed, go to Settings → Tailscale Click Connect and authenticate with your Tailscale account Verify both servers appear in your Tailscale admin console Verify Connectivity Run this on the primary to confirm it can see the secondary: tailscale ip -4 unRAID-Jayred365 You should get back a 100.x.x.x IP. If not, check both servers in the Tailscale admin console. Note: The hostnames used in Master.conf (HOST1 and HOST2) must match the Tailscale machine names exactly — these are case sensitive. Step 2 — Generate SSH Keys (Server-to-Server) The scripts use SSH keys for server-to-server rsync. On Primary (unRAID-Gmer4Lfe): ssh-keygen -t ed25519 -f /root/.ssh/Gmer4Lfe-rsync-key -C "gmer4lfe-rsync" -N "" On Secondary (unRAID-Jayred365): ssh-keygen -t ed25519 -f /root/.ssh/Jayred365-rsync-key -C "jayred365-rsync" -N "" Copy Public Keys to Each Server Primary → Secondary # On primary cat /root/.ssh/Gmer4Lfe-rsync-key.pub Copy the output. Then on secondary: mkdir -p /root/.ssh echo "PASTE_PUBLIC_KEY_HERE" >> /root/.ssh/authorized_keys chmod 600 /root/.ssh/authorized_keys Secondary → Primary # On secondary cat /root/.ssh/Jayred365-rsync-key.pub Copy the output. Then on primary: mkdir -p /root/.ssh echo "PASTE_PUBLIC_KEY_HERE" >> /root/.ssh/authorized_keys chmod 600 /root/.ssh/authorized_keys Test the Connection From the primary, test SSH access to the secondary: ssh -i /root/.ssh/Gmer4Lfe-rsync-key root@$(tailscale ip -4 unRAID-Jayred365) "echo connected" You should see connected. If prompted for a password, recheck the key authorization. Step 3 — Enable SSH on unRAID unRAID 7.x has SSH disabled by default. Enable it on both servers so the scripts can connect: Go to Settings → Management Access Under Secure Shell, set SSH to Enabled Set SSH port to 22 (default) Click Apply Security note: SSH is only exposed on your local network and Tailscale interface. The rsync scripts connect via Tailscale IP, so traffic is encrypted end-to-end. Step 4 — Configure Master.conf All user configuration lives in Master.conf. Open it and adjust the following to match your setup: nano /mnt/user/appdata/unraid_scripts/Master.conf Required Changes: Variable Description Example HOST1 Hostname of your primary server unRAID-Gmer4Lfe HOST2 Hostname of your secondary server unRAID-Jayred365 HOST1_SSH_KEY Path to primary's rsync private key /root/.ssh/Gmer4Lfe-rsync-key HOST2_SSH_KEY Path to secondary's rsync private key /root/.ssh/Jayred365-rsync-key BW_LIMIT Global bandwidth limit in KB/s 12500 ROOTFS_WARN Remote rootfs % threshold before aborting 75 Daily Sync Shares Add the full paths of all media shares you want synced nightly: DAILY_SYNC_SHARES=( /mnt/user/Movies /mnt/user/Tv_Shows /mnt/user/Music # add more here ) Profiles Profiles control per-share rsync behaviour for your frequently synced appdata shares. declare -A PROFILE_CRITICAL_CONTAINER_NAMES=( [arrs_stack]="Sonarr Radarr Lidarr Prowlarr" [important-data]="Postgres-NextCloud NextCloud" ) Any share with no matching profile falls through to the global DEFAULT_RSYNC_OPTS. Step 5 — Set Up User Scripts The User Scripts plugin schedules and runs the scripts. Each sync job is its own script entry. Frequent Sync Jobs Create one script entry per appdata profile (Plugins → User Scripts → Add New Script) Example for ARR stack: #!/bin/bash bash /mnt/user/appdata/unraid_scripts/Rsync/rsync.sh /mnt/user/appdata-Failover/Arrs_Stack Daily Sync Orchestrator #!/bin/bash bash /mnt/user/appdata/unraid_scripts/Orchestrators/daily_sync.sh Schedule daily at 01:00 Set scripts to run as Background Tasks Step 6 — Verify the Setup Manually test from the primary: bash /mnt/user/appdata/unraid_scripts/Rsync/rsync.sh /mnt/user/appdata-Failover/Arrs_Stack --log You should see a healthy run with: ━━━ ⚙️ Setup ━━━ ℹ️ [INFO] 🖥️ Host: unRAID-Gmer4Lfe → unRAID-Jayred365 ℹ️ [INFO] 🌐 Remote IP: 100.x.x.x ... ✅ [OK] All disks backing share are online Step 7 — Secondary Server Initial Setup If setting up secondary from scratch: Complete Steps 1–5 on the secondary Start the array and create your shares in the unRAID UI Run the share recreation tool: bash /mnt/user/appdata/unraid_scripts/Tools/recreate_shares.sh Temporarily remove --delete from DEFAULT_RSYNC_OPTS for initial push Restore --delete after the first run; next nightly run will clean .recovery files automatically Troubleshooting SSH connection refused Verify SSH is enabled on target server (Step 3) Check correct key referenced in Master.conf Confirm Tailscale IP resolves Pre-flight aborts Rootfs above ROOTFS_WARN Share exists but empty Disk offline Script not found Verify scripts exist in /mnt/user/appdata/unraid_scripts/ Make scripts executable: chmod +x /mnt/user/appdata/unraid_scripts/Rsync/rsync.sh chmod +x /mnt/user/appdata/unraid_scripts/Orchestrators/daily_sync.sh chmod +x /mnt/user/appdata/unraid_scripts/Tools/recreate_shares.sh Available Flags Flag Description --dry-run or -n Run without making changes --log Enable verbose logging --no-log Disable logging --status Print resolved configuration and exit Examples # Preview what would be synced without transferring bash rsync.sh /mnt/user/Movies --dry-run --log # Check profile and settings resolved for a share bash rsync.sh /mnt/user/appdata-Failover/Arrs_Stack --status Repository Structure Unraid_Scripts/ ├── Master.conf # All user configuration — edit this file only ├── common.sh # Shared library — functions used by all scripts ├── Rsync/ │ └── rsync.sh # Core rsync script — called per share ├── Orchestrators/ │ └── daily_sync.sh # Daily media sync orchestrator └── Tools/ └── recreate_shares.sh # Share directory recreation from cfg fil