Immer wieder suchte ich eine Möglichkeit meinen USB-Stick oder meine SD-Card vom Raspberry schnell und einfach zu sichern. Meistens mußte man dazu die Karte oder den Stick auf einem anderen PC einlesen (unter Windows WinDiskImager).
Da mir das alles zu fummelig war und der Raspberry auch während dieser Zeit nicht genutzt werden kann, hier mal ein HowTo um den Raspberry im laufenden Betrieb zu sichern.
Dazu gibt es natürlich auch raspiBackup...aber dies hier war einfach umzusetzen.
Wahrscheinlich ist das auch adaptierbar auf ner Fritzbox oder Synology:
Gelöst habe ich das ganze durch Anlage eines NFS Verzeichnisses auf dem QNap.
Hierzu muß zuerst der Dienst NFS auf dem QNap gestartet werden. Systemsteuerung!
Hierzu lege ich über die Systemsteuerung des QNap zuerst ein Verzeichnis RaspberrySicherung auf dem entfernten NAS (hier Qnap an) Dazu klicken wir auf Erstellen und geben dem Orner den Namen RaspberrySicherung
danach habe ich extra einen Benutzer Raspberry in der Systemsteuerung erstellt
um ihm im nächsten Schritt explizit nur einen Zugriff auf dieses Verzeichnis zu geben - Dies gelingt nach dem Erstellen des Benutzers "Raspberry" durch einen Klick auf die Symbole rechts (Freigabeordner):
Wir geben dem User Raspberry quasi einen Zugriff Lesen/Schreiben auf den Ordner RaspberrySicherung
Jetzt sind der Orner und der User angelegt und wir können uns nun auf die Einrichtung von NFS auf dem Raspberry kümmern.
Hierzu erstellen wir im Verzeichnis /mnt die gewünschte Ordnerstruktur
Danach öffnen wir fstab mit
und fügen folgende Zeile ein am Ende ein, um das Verzeichnis für NFS später zu mounten
gefolgt von
Überprüfen können wir nun mit:
Scheint funktioniert zu haben, oder?
Qnap und Raspberry haben jetzt zumindest ein gemeinsames Verzeichnis und können aufeinander zugreifen.
Jetzt benötigen wir ein Script, welches den Backupprozess startet. Das habe ich mir im Netz geschnappt und meinen Bedingungen angepasst. Ich habe einen USB Stick und sichere den kompletten Stick während des Betriebs auf dem NAS.
Wir erstellen nun eine Datei mit dem Namen "BackupScript.sh" in /home/pi/backup
und fügen folgendes ein:
Angepasst werden mussten: SUBDIR und DIR, sowie Textausgaben und sda für den USB Stick, sowie services, welche während des Backupprozesses gestoppt und nachher wieder gestartet werden müssen - und ob das file .tar gepackt werden soll.
Wenn ihr eine SD-Karte nutzt müßt ihr sda durch den Devicenamen eurer SD-Karte ergänzen.
Dann wird Zeile 52 in
geändert.
Das Script kann nun nach
mit
direkt ausprobiert, oder aber in die crontab mit
automatisiert werden.
Hierzu ist dann folgende Zeile einzufügen:
Eine Minute nach 3 an jedem Tag im Monat, in jedem Monat am Tag 1 und 7 der Woche das Script ausführen.
/home/pi/backup/sicherung 2>&1 erstellt eine Sicherung im angegebenen Ordner.
Das Ergebnis ist eine IMG-Datei auf dem NAS - also dem gemounteten Ordner auf dem Raspi, den man mit Win32Diskimager jederzeit zurückschreiben kann.
Was mir momentan noch fehlt ist die Löschung der alten Datei - dafür brauche ich nun kurz einen Linux-Fuchs von hier ;-)
Da mir das alles zu fummelig war und der Raspberry auch während dieser Zeit nicht genutzt werden kann, hier mal ein HowTo um den Raspberry im laufenden Betrieb zu sichern.
Dazu gibt es natürlich auch raspiBackup...aber dies hier war einfach umzusetzen.
Wahrscheinlich ist das auch adaptierbar auf ner Fritzbox oder Synology:
Gelöst habe ich das ganze durch Anlage eines NFS Verzeichnisses auf dem QNap.
Hierzu muß zuerst der Dienst NFS auf dem QNap gestartet werden. Systemsteuerung!
Du musst Regestriert sein, um das angehängte Bild zusehen.
Hierzu lege ich über die Systemsteuerung des QNap zuerst ein Verzeichnis RaspberrySicherung auf dem entfernten NAS (hier Qnap an) Dazu klicken wir auf Erstellen und geben dem Orner den Namen RaspberrySicherung
Du musst Regestriert sein, um das angehängte Bild zusehen.
danach habe ich extra einen Benutzer Raspberry in der Systemsteuerung erstellt
Du musst Regestriert sein, um das angehängte Bild zusehen.
um ihm im nächsten Schritt explizit nur einen Zugriff auf dieses Verzeichnis zu geben - Dies gelingt nach dem Erstellen des Benutzers "Raspberry" durch einen Klick auf die Symbole rechts (Freigabeordner):
Du musst Regestriert sein, um das angehängte Bild zusehen.
Wir geben dem User Raspberry quasi einen Zugriff Lesen/Schreiben auf den Ordner RaspberrySicherung
Jetzt sind der Orner und der User angelegt und wir können uns nun auf die Einrichtung von NFS auf dem Raspberry kümmern.
Hierzu erstellen wir im Verzeichnis /mnt die gewünschte Ordnerstruktur
sudo mkdir -p /mnt/nas/Qnap
Danach öffnen wir fstab mit
sudo nano /etc/fstab
gefolgt von
sudo mount -a
Überprüfen können wir nun mit:
ls -la /mnt/nas/Qnap
Scheint funktioniert zu haben, oder?
Qnap und Raspberry haben jetzt zumindest ein gemeinsames Verzeichnis und können aufeinander zugreifen.
Jetzt benötigen wir ein Script, welches den Backupprozess startet. Das habe ich mir im Netz geschnappt und meinen Bedingungen angepasst. Ich habe einen USB Stick und sichere den kompletten Stick während des Betriebs auf dem NAS.
Wir erstellen nun eine Datei mit dem Namen "BackupScript.sh" in /home/pi/backup
und fügen folgendes ein:
#!/bin/bash
SUBDIR=raspberrypi_backup
DIR=/mnt/nas/Qnap/$SUBDIR
echo "Starting RaspberryPI backup process!"
# First check if pv package is installed, if not, install it first
PACKAGESTATUS=`dpkg -s pv | grep Status`;
if [[ $PACKAGESTATUS == S* ]]
then
echo "Package 'pv' is installed."
else
echo "Package 'pv' is NOT installed."
echo "Installing package 'pv'. Please wait..."
apt-get -y install pv
# Check if backup directory exists
if [ ! -d "$DIR" ];
then
echo "Backup directory $DIR doesn't exist, creating it now!"
mkdir $DIR
# Create a filename with datestamp for our current backup (without .img suffix)
OFILE="$DIR/backup_$(date +%Y%m%d_%H%M%S)"
# Create final filename, with suffix
OFILEFINAL=$OFILE.img
# First sync disks
sync; sync
# Shut down some services before starting backup process
echo "Stopping some services before backup."
service apache2 stop
service cron stop
# Begin the backup process, should take about 1 hour from 8Gb SD card to HDD
echo "Backing up USB to QNap."
echo "This will take some time depending on your USB size and read performance. Please wait..."
SDSIZE=`blockdev --getsize64 /dev/sda`;
pv -tpreb /dev/sda -s $SDSIZE | dd of=$OFILE bs=1M conv=sync,noerror iflag=fullblock
# Wait for DD to finish and catch result
RESULT=$?
# Start services again that where shutdown before backup process
echo "Start the stopped services again."
service apache2 start
service cron start
If command has completed successfully, delete previous backups and exit
if [ $RESULT = 0 ];
then
echo "Successful backup, previous backup files will be deleted."
rm -f $DIR/backup_*.tar.gz
mv $OFILE $OFILEFINAL
echo "Backup is being tarred. Please wait..."
#tar zcf $OFILEFINAL.tar.gz $OFILEFINAL
#rm -rf $OFILEFINAL
echo "RaspberryPI backup process completed! FILE: $OFILEFINAL"
exit 0
Else remove attempted backup file
else
echo "Backup failed! Previous backup files untouched."
echo "Please check there is sufficient space on the HDD."
rm -f $OFILE
echo "RaspberryPI backup process failed!"
exit 1
SUBDIR=raspberrypi_backup
DIR=/mnt/nas/Qnap/$SUBDIR
echo "Starting RaspberryPI backup process!"
# First check if pv package is installed, if not, install it first
PACKAGESTATUS=`dpkg -s pv | grep Status`;
if [[ $PACKAGESTATUS == S* ]]
then
echo "Package 'pv' is installed."
else
echo "Package 'pv' is NOT installed."
echo "Installing package 'pv'. Please wait..."
apt-get -y install pv
# Check if backup directory exists
if [ ! -d "$DIR" ];
then
echo "Backup directory $DIR doesn't exist, creating it now!"
mkdir $DIR
# Create a filename with datestamp for our current backup (without .img suffix)
OFILE="$DIR/backup_$(date +%Y%m%d_%H%M%S)"
# Create final filename, with suffix
OFILEFINAL=$OFILE.img
# First sync disks
sync; sync
# Shut down some services before starting backup process
echo "Stopping some services before backup."
service apache2 stop
service cron stop
# Begin the backup process, should take about 1 hour from 8Gb SD card to HDD
echo "Backing up USB to QNap."
echo "This will take some time depending on your USB size and read performance. Please wait..."
SDSIZE=`blockdev --getsize64 /dev/sda`;
pv -tpreb /dev/sda -s $SDSIZE | dd of=$OFILE bs=1M conv=sync,noerror iflag=fullblock
# Wait for DD to finish and catch result
RESULT=$?
# Start services again that where shutdown before backup process
echo "Start the stopped services again."
service apache2 start
service cron start
If command has completed successfully, delete previous backups and exit
if [ $RESULT = 0 ];
then
echo "Successful backup, previous backup files will be deleted."
rm -f $DIR/backup_*.tar.gz
mv $OFILE $OFILEFINAL
echo "Backup is being tarred. Please wait..."
#tar zcf $OFILEFINAL.tar.gz $OFILEFINAL
#rm -rf $OFILEFINAL
echo "RaspberryPI backup process completed! FILE: $OFILEFINAL"
exit 0
Else remove attempted backup file
else
echo "Backup failed! Previous backup files untouched."
echo "Please check there is sufficient space on the HDD."
rm -f $OFILE
echo "RaspberryPI backup process failed!"
exit 1
Angepasst werden mussten: SUBDIR und DIR, sowie Textausgaben und sda für den USB Stick, sowie services, welche während des Backupprozesses gestoppt und nachher wieder gestartet werden müssen - und ob das file .tar gepackt werden soll.
Wenn ihr eine SD-Karte nutzt müßt ihr sda durch den Devicenamen eurer SD-Karte ergänzen.
Dann wird Zeile 52 in
pv -tpreb /dev/mmcblk0 -s $SDSIZE | dd of=$OFILE bs=1M conv=sync,noerror iflag=fullblock
Das Script kann nun nach
chmod 777 /home/pi/backup/BackupScript.sh
sudo ./BackupScript
sudo crontab -e
Hierzu ist dann folgende Zeile einzufügen:
/home/pi/backup/sicherung 2>&1 erstellt eine Sicherung im angegebenen Ordner.
Das Ergebnis ist eine IMG-Datei auf dem NAS - also dem gemounteten Ordner auf dem Raspi, den man mit Win32Diskimager jederzeit zurückschreiben kann.
Was mir momentan noch fehlt ist die Löschung der alten Datei - dafür brauche ich nun kurz einen Linux-Fuchs von hier ;-)
Anhänge
Du musst angemeldet sein, um die Anhangsliste zu sehen.
Zuletzt bearbeitet: