NAS Datenspeicherung

Ich möchte euch hier ein kleines Script vorstellen mir dem ihr automatisiert Daten vom RaspberryPI in ein NAS-Speicher schreibt

 

[affilinet_performance_ad size=300×50]

 

In meinem letzten Artikel Eigenbau NAS habe ich euch gezeigt wie ihr ein NAS mit einem RaspberryPI realisieren könnt. Jetzt gehen wir einen Schritt weiter und schreiben automatisiert Daten in das NAS

User Berechtigungen ändern

um einen Transfer der Daten benötigen wir zunächst ein bash-script backup.sh um die gepackten Dateien in das NAS zu transportieren.

Hierzu loggen wir uns per ssh auf unseren RaspberryPI ein. Wir benutzen putty.

Als erstes wird die Datei /etc/sudoers bearbeitet. Hierfür verwenden wir entweder den Linuxeditor vi oder den visudo. Der visudo ist von der Handhabung ähnlich wie der nano.

sudo visudo

Hier sucht man die Zeilen mit dem Inhalt:

# User privilege specification
 %sudo ALL=(ALL:ALL) ALL

und ergänzt direkt darunter den folgenden Inhalt

usr ALL=(ALL) NOPASSWD: ALL

Mit ctrl+o und Enter werden die Änderungen gespeichert und mit ctrl+x wird der Editor wieder verlassen.

Damit die Änderungen aktiv werden, sollte ein Neustart ausgeführt werden.

sudo reboot

Nun müssen noch weitere Packages nachinstalliert werden damit künftig  die Daten auf dem NAS transportiert werden können.

Backup-Script

nun wird das Backup-Script erstellt. Hierzu folgender Code:

sudo touch /home/pi/backup.sh && sudo chmod 700 /home/pi/backup.sh && sudo chown -R usr:root /home/pi/backup.sh
#!/bin/bash
 
mountIp="192.168.3.10"
mountDir="backup"
mountUser="admin"
mountPass="password"
mountSubDir="/home/pi"
localMountPoint="/Q/backup"
 
#optional
backupsMax="0"
localBackupDir="/backup"
pushoverUser=""
pushoverToken=""
###################################
 
 
if [ ! -e "$localBackupDir" ]
then
echo "$localBackupDir wird erstellt"
mkdir -p "$localBackupDir"
else
echo "$localBackupDir bereits vorhanden"
fi
 
tar --exclude=backup -cvzf "/$localBackupDir/$(date +%y%m%d_%H%M%S)_backup.tar.gz" "/home/pi" &>/dev/null
 
if ! ping -c 1 $mountIp
then
echo "$mountIp nicht erreichbar, stop"
exit
else
echo "$mountIp erreichbar"
fi
 
localIp=$(hostname -I|sed 's/\([0-9.]*\).*/\1/')
 
if [ ! -e "$localMountPoint" ]
then
echo "$localMountPoint wird erstellt"
mkdir -p "$localMountPoint"
else
echo "$localMountPoint bereits vorhanden"
fi
 
if [ "$(ls -A $localMountPoint)" ]
then
echo "$localMountPoint nicht leer, kein Mounten notwendig"
else
echo "$localMountPoint leer, Mounten starten"
vorhanden="0"
while read line
do
mountComplete="//$mountIp/$mountDir $localMountPoint cifs username=$mountUser,password=$mountPass,iocharset=utf8,sec=ntlm 0 0"
echo "mountComplete: $mountComplete"
if [ `echo "$line" | grep -c "$mountComplete"` != 0 ]
then
echo "/etc/fstab: Eintrag bereits vorhanden: $mountComplete"
vorhanden="1"
break
fi
done < "/etc/fstab"
if [ "$vorhanden" != "1" ]
then
echo "/etc/fstab: Eintrag wird ergänzt: $mountComplete"
echo "$mountComplete" >> "/etc/fstab"
fi
echo "Mounts werden aktualisiert"
mount -a
sleep 3
fi
 
if [ "$(ls -A $localMountPoint)" ]
then
if [ ! -e "$localMountPoint/$mountSubDir/$localIp" ]
then
mkdir -p "$localMountPoint/$mountSubDir/$localIp"
else
echo "$localMountPoint/$mountSubDir/$localIp existiert bereits"
fi
find "$localBackupDir" -name '*backup.tar.gz' | while read file
do
fileSize="0"
fileSizeMB=$(du -h $file)
fileSizeMB=${fileSizeMB%%M*}
filename=${file##*/}
echo "$filename ($fileSizeMB MB) wird in den Backupordner verschoben"

#mv "$file" "$localMountPoint/$mountSubDir/$localIp/$filename"
cp "$file" "$localMountPoint/$mountSubDir/$localIp/$filename"
rm "$file"
echo "Backup backup $filename"
echo " backupMB $fileSizeMB"

done
else
echo "Mounten hat anscheinend nicht geklappt, skip."
exit
fi
 
#Löschen alter Backups
if [[ "$backupsMax" != "" && "$backupsMax" != "0" ]]
then
backupsCurrent=`ls -A "$localMountPoint/$mountSubDir/$localIp" | grep -c "_backup.tar.gz"`
backupsDelete=$(($backupsCurrent-$backupsMax))
if [ "$backupsDelete" -gt "0" ]
then
echo "$backupsCurrent Backups vorhanden - nur $backupsMax aktuelle Backups werden vorgehalten - $backupsDelete Backups werden gelöscht"
ls -d "/$localMountPoint/$mountSubDir/$localIp/"* | grep "_backup.tar.gz" | head -$backupsDelete | xargs rm
else
echo "$backupsCurrent Backups vorhanden - bis $backupsMax aktuelle Backups werden vorgehalten"
fi
backupsCurrent=`ls -A "$localMountPoint/$mountSubDir/$localIp" | grep -c "_fhem_backup.tar.gz"`
 
echo "Mount wieder unmounten"
umount "$localMountPoint"

Dabei muss jeder die Werte am Anfang des Scripts:

mountIp=“192.168.3.10″
mountUser=“admin“
mountPass=“password“
mountDir=“backup“
mountSubDir=“/home/pi“

mit den Login-Daten des eigenen NAS anpassen. In diesem Beispiel wird vorausgesetzt, dass eine Freigabe namens „backup“ auf dem NAS zur Verfügung steht, welche vom Benutzer „admin“ per cifs (Windows Freigabe) zugegriffen werden kann.

Der Eintrag:

localMountPoint=“/M/R_Daten“

ist das lokale Verzeichnis auf dem Linux-System, welche auf die NAS-Freigabe verlinkt.


Pollin
NAS

 

There are no comments

Leave a Reply