Zum Inhalt

Datensynchronisation vom Synology NAS auf den Raspberry Pi mit NFS und rsync

Es gibt eine einfache Möglichkeit seine Musikbibliothek von einem Synology NAS auf einen USB-Stick oder eine externe Festplatte die an einem Raspberry Pi angeschlossen ist regelmäßig und automatisch zu synchronisieren.

In einem Beitrag habe ich beschrieben, wie man einen Raspberry Pi (= RadioPi) an eine Stereoanlage anschließen kann, um dort seine Musik mit mpd auf der Stereoanlage zu hören.

An meinem Raspberry Pi habe ich einen USB-Stick angeschlossen, auf dem meine gesamte Musikbibliothek abgelegt ist. Damit ist jederzeit gewährleistet, dass ich auch bei einer hohen Netzwerklast oder -ausfall Musik hören kann. Zudem dient mir das Ganze noch als eine Art Datensicherung.

Da aber ein manuelles Kopieren auf dem Pi zum Aktualisieren ein wenig aufwendig ist, habe ich einen anderen Weg gewählt. Meine gesamte Musik synchronisiere (2-Wege-Sync) ich von meinem Laptop mit der Desktop-Software Synology Drive Client auf mein Synology NAS.

Das NAS läuft zu den Zeiten, an denen ich auch mit meinen RadioPi Musik höre. Somit habe ich ein kleines Skript eingerichtet, um die Musik zu synchronisieren und damit auf dem Pi aktuell zu halten.

Datenaustausch per NFS

Der Ablauf ist

  • Synology - gemeinsamer Ordner Musik wird für NFS freigegeben und die entsprechenden Berechtigungen gesetzt
  • Raspberry Pi - mountet beim Systemstart automatisch den Synology Ordner Musik per NFS
  • Raspberry Pi - wirft den Synology NFS Ordner Musik aus
  • Raspberry Pi - ein Bash-Skript startet rsync und führt ein Update der mpd-Datenbank durch

Synology NAS Einstellungen

Ihr müsst NFS in der Systemsteuerung eures NAS aktivieren.

Synology NAS - NFS aktivieren

Damit der Raspberry Pi auch die Berechtigung erhält auf den Gemeinsamen Ordner lesend zugreifen zu können, sind die Zugriffe zu setzen. Ihr benötigt dazu lediglich die IP-Adresse eures RadioPis.

Synology NAS - Berechtigungen für Gemeinsame Ordner

Synology NAS - Berechtigungen für Gemeinsame Ordner

Raspberry Pi - RadioPi

Damit die NFS-Freigabe auch auf dem Pi gemountet werden kann, ist dort ein neuer Ordner zu erstellen:

sudo mkdir /mnt/synology

Auf den Raspberry Pi kopiert ihr das folgende Skript in ein Verzeichnis, z.B. /etc/skripte und benennt es synologynas.sh.

#!/bin/bash

# by strobelstefan.de
# Version: 1.0
# https://strobelstefan.de/2021/04/04/datensynchronisation-vom-synology-nas-auf-den-raspberry-pi-mit-nfs-und-rsync


# This script mount a Synology Shared Folder via NFS
# It runs rsync to update a local directory
# Unmounts the Synology NFS
# Updates mpd server


#Source patch
SOURCE="/mnt/synology/"

#Target path on BACKUPSTORAGE
TARGET="/mnt/usb/Musik/"

# Logfile
LOGFILE="/mnt/usb/logfile.txt"

#Exclude from RSYNC file
EXCLUDEFILE="excludefile.txt"

# Removes the old log file
echo "###############################" >> ${LOGFILE}
rm -f ${LOGFILE}
echo $(date +%Y-%m-%d_%H-%M-%S) " - Deleted Old Log File ${LOGFILE}" >> ${LOGFILE}
echo "###############################" >> ${LOGFILE}

# Mount Synology NFS
sudo mount 192.168.xxx.xxx:/volume1/music ${SOURCE}
echo "###############################" >> ${LOGFILE}
echo $(date +%Y-%m-%d_%H-%M-%S) "- Mounted Synology NFS Share" >> ${LOGFILE}
echo "###############################" >> ${LOGFILE}

# rsync mit  Log Files
echo "###############################" >> ${LOGFILE}
echo $(date +%Y-%m-%d_%H-%M-%S) " - rsync started" >> ${LOGFILE}
sudo rsync -av --stats --exclude-from=${EXCLUDEFILE} --delete --log-file=${LOGFILE} ${SOURCE} ${TARGET}
echo $(date +%Y-%m-%d_%H-%M-%S) " - rsync finished" >> ${LOGFILE}
echo "###############################" >> ${LOGFILE}

# Unmout Synology NFS
echo "###############################" >> ${LOGFILE}
sudo umount ${SOURCE}
echo $(date +%Y-%m-%d_%H-%M-%S) " - Unmounted Synology NFS share" >> ${LOGFILE}
echo "###############################" >> ${LOGFILE}

# mpd Rescan
echo "###############################" >> ${LOGFILE}
sudo mpc update
echo $(date +%Y-%m-%d_%H-%M-%S) " - mpd update finished" >> ${LOGFILE}
echo "###############################" >> ${LOGFILE}

Macht das Skript noch ausführbar:

sudo chmod +x /etc/skripte/synologynas.sh

Den Pfad zum Ordner auf dem Synology NAS lässt sich wie folgt herausfinden:

  1. "Control Panel --> Shared Folders" aufrufen. Dort sieht man, dass der Ordner auf dem "Volume1" abgespeichert ist.

Synology NFS Share

  1. SSH-Login auf dem NAS
ssh benutzer@ip-adresse-des-nas

cd /volume1

# Ordner anzeigen

ls -lah

cd /volume1/music

# Pfad anzeigen
pwd

Den angezeigten Pfad kopieren und in das Skript einfügen, damit der Ordner auch korrekt auf dem Raspberry Pi eingebunden wird.

Das Skript könnt ihr nun schon ausführen und testen. Ruft es dazu mit dem Befehl auf:

sudo ./etc/skripte/synologynas.sh

Ist euer Skript erfolgreich durchgelaufen, dann ist zum Schluss noch ein Cron Job anzulegen.

Cron Job

Der Cron Job führt das Skript bei jedem Neustart aus, wartet aber noch 600 Sekunden. Das kann u.U. sinnvoll sein, wenn der Pi noch andere Programm startet oder andere Skripte beim Systemstart ausführt.

@reboot sleep 300 && /etc/skripte/synologynas.sh

Das wars!

Nun wird jede Änderung an eurer Musiksammlung, die ihr entweder an eurem Windows-Client oder auf dem Synology NAS durchführt automatisch auf den RadioPi übertragen.

Probleme mit nfs

Beim Versuch den freigegebenen Ordner auf dem Raspberry Pi einzubinden habe ich einen Fehler erhalten:

mount.nfs: rpc.statd is not running but is required for remote locking. mount.nfs: Either use '-o nolock' to keep locks local, or start statd.

sudo mount 192.168.xxx.xxx:/volume1/music /mnt/usb/Musik/

Die benötigten Pakete auf dem Pi waren alle vorhanden:

sudo apt install nfs-common 

Das Starten der Services hat zu weiteren Fehlermeldungen u.a. mit dem Portmapper und rpcbind geführt.

Die Lösung ware dann doch ganz einfach. Auf der Synology war die NFS-Freigabe komplett zu deaktivieren, abzuspeichern und dann zum Schluss wieder zu aktivieren. Das Mounten der NFS-Freigabe hat dann sofort funktioniert auf dem Pi.

Synology NFS-Server deaktivieren / aktivieren

Gib mir gerne einen Kaffee ☕ aus ❗️

Wenn dir meine Beiträge gefallen und geholfen haben, dann kannst du mir gerne einen Kaffee ☕️ ausgeben.

Donation via PayPalDonation via LiberaPay

Donation via Bitcoin
Bitcoin Address: bc1qfuz93hw2fhdvfuxf6mlxlk8zdadvnktppkzqzj

Source

Photo by Alex Cheung on Unsplash