Automatische Raspberry Pi backup – complete image

Vroeg of laat geven de SD-kaarten van de Raspberry Pi’s problemen, bijvoorbeeld door stroomuitval en door verkeerde instellingen. Zodra je je Raspberry Pi hebt voorzien van Raspbian en eventueel Domoticz wil je natuurlijk een Raspberry Pi backup hebben voor het geval er iets fout gaat en je Raspberry niet meer boot.

In dit artikel leggen we uit hoe je een automatische Raspberry Pi backup kunt instellen. Het doel is om de backup iedere nacht om 03.00 uur te laten uitvoeren en de Raspberry Pi Backup weg te schrijven naar een folder op je NAS door middel van een NFS share (uiteraard kun je ook een USB-stick of externe harddisk gebruiken). Daarnaast willen we dat de Raspberry Pi gewoon blijft draaien tijdens de backup en dat je de Raspberry Pi backup direct op een nieuwe SD-kaart kunt restoren. We gaan beginnen!

Benodigdheden

Maak een de folder aan op je Raspberry Pi. Ik heb gekozen voor /mnt/backup, maar het mag een willekeurig folder zijn:

Mounten na reboot

Uiteraard willen we dat de mount naar je NAS na een reboot van de Raspberry Pi ook aanwezig is. Hiervoor dienen we een wijziging aan te brengen ins fstab:


Voeg onderstaande regel toe:

  • 192.16.8.2.157 -> IP-adres van je NAS
  • Backups/Backup_Raspberry_Pi -> de folder op je NAS die je wilt mounten
  • /mnt/backup -> de folder op je Raspberry Pi
  • comment=systemd.automount -> hiermee geven we aan dat de mount alleen plaatsvindt als er om gevraagd wordt. Aangezien ik alleen de WLAN-interface op de Raspberry gebruikt moest ik deze voorwaarde toevoegen, aangezien de Raspberry Pi na een reboot wilde mounten, terwijl de Wi-Fi-verbindig nog niet opgestart was.
  • username=pietje -> gebruikersnaam van je NAS
  • password=puk -> wachtwoord van je NAS

Test de mount met commando:


Als er een fout in fstab zit krijg je dit te zien. Eventueel kun je onderstaand commando gebruiken om bijvoorbeeld te controleren dat je gebruikersnaam en wachtwoord correct zijn:


Corrigeer eventuele fouten en download vervolgens hier het script. Pak het script uit met een extracter (bv. WinRar) en plaats het .sh-bestand in een folder naar keuze. Ik heb het script op mijn NAS geplaatst, zodat ik het ook kan gebruiken voor mijn andere Raspberry Pi’s.

Maak het script uitvoerbaar:

Crontab

De laatste stap is om het script toe te voegen aan crontab. Aangezien het script uitgevoerd moet worden als root moeten we de root crontab wijzigen:


Voeg onderstaande regel toe (let op dat je de locatie wijzigt naar de folder waar je het script hebt opgeslagen):


Er wordt nu iedere nacht om 3 uur een backup van de SD-kaart van je Raspberry Pi gemaakt.

 

Variabelen in het script

Het gebruikte script heeft twee variabelen, namelijk backup_path en retention_days. De eerste is de locatie waar de backup wordt opgeslagen, de tweede is het aantal dagen dat een backup wordt bewaard. Deze twee waarden kun je zelf aanpassen.

23 gedachten over “Automatische Raspberry Pi backup – complete image

  • 23 december 2018 om 16:45
    Permalink

    Top tip!
    Er moe(s)t alleen geen spatie tussen “uid=1000, gid=46″…
    En vraag me ook af een ddump van een pi wel een consistente backup oplevert als je er bijvoorbeeld Domoticz op draait dat constant aan het loggen is…

    Beantwoorden
    • 30 december 2018 om 09:17
      Permalink

      Je zou de services van Domoticz eerst kunnen stoppen, de backup draaien en vervolgens de services van Domoticz weer starten.

      Trouwens, ook niet onbelangrijk: Welke syntax kan het beste worden gebruikt om een eventuele restore uit te voeren?

      Beantwoorden
  • 30 december 2018 om 14:12
    Permalink

    Kreeg een melding: Mount error (112): Host is down. Regel aangepast naar;
    //192.168.2.157/Backups/Backup_Raspberry_Pi /mnt/backup cifs comment=systemd.automount,defaults,rw,username=pietje,password=puk,vers=1.0,uid=1000,gid=46 0 0

    Let op: Vers=1.0 en geen spatie achter,

    Beantwoorden
  • 25 februari 2019 om 21:43
    Permalink

    Hi Joost,

    Het is mij uiteindelijk gelukt. Mijn images op de NAS zijn nu alles tussen de 1 MB en 28,65 MB. Een fractie van de werkelijkheid dus. Overigens heeft mijn 64 GB USB stick waar mijn RB Pi 3B+ op draait nog slechts enkel 18 GB over…

    Wat heb. ik fout gedaan? Zou dit graag werkend hebben…

    Dank & groet van een fan,
    Michel

    Beantwoorden
  • 6 maart 2019 om 14:15
    Permalink

    Ik krijg steeds deze foutmelding :
    -bash: //192.168.178.2/Public/domoticzbackup: No such file or directory

    terwijl map toch echt bestaat. Wie weet een oplossing ?

    Beantwoorden
  • 20 april 2019 om 15:18
    Permalink

    Dank voor dit scripts (en de andere op deze site)! Het werkt vlekkeloos!

    Echter 1 vraag: retention_days staat bij mij op 3 dagen. Het is vandaag 20-4 en vannacht heeft het script de backup van 15-4 weg gehaald. Op dit moment staan er dus 5 backups op mijn nas (16-4 t/m 20-4). Terwijl dat er volgens mij dan 4 moeten zijn (de oudste backup zou dus max 3 dagen oud moeten zijn).

    Kan iemand toelichten hoe dit zit? Want zo goed snap ik Linux commands nog niet.

    Dank alvast!

    Beantwoorden
  • 19 juli 2019 om 00:41
    Permalink

    Het mounten was even lastig.
    Daarna een backup maken ging prima, tot een kleine 32 gb.
    Hiervoor heb ik het script een beetje aangepast:
    dd if=/dev/mmcblk0 bs=4M | gzip -c > $backup_path/$HOSTNAME.$(date +%Y%m%d).img.gz
    Het resultaat is een backup die 10% is van sd-kaart!

    Beantwoorden
  • 22 juli 2019 om 14:37
    Permalink

    Waar is de Windows machine?
    Vooropgesteld ik ben nog een Linux analfabeet maar waarom mounten als CFIS en niet als NFS?

    //192.168.2.157/Backups/Backup_Raspberry_Pi /mnt/backup nfs nolock,noatime 0 0

    Vergeet niet elke Raspberry IP-adres aan te melden als NFS op je NAS.

    Beantwoorden
    • 22 juli 2019 om 22:22
      Permalink

      Mounten als NFS kan ook prima. Ik gebruik nu: 192.168.2.72:/nfs/Backups/Backup_Raspberry_Pi /mnt/backup nfs comment=systemd.automount

      Beantwoorden
  • 5 november 2019 om 22:58
    Permalink

    Ik heb je artikel hier ook eens geprobeerd.
    Helaas komt er niets op mijn nas te staan.

    is er ergens een logfile waar ik kan zien wat er mis gaat?

    Beantwoorden
    • 7 november 2019 om 17:12
      Permalink

      Bas, uit ervaring weet ik inmiddels dat het op legio manieren fout kan gaan met als sprekend voorbeeld dat de NAS mount na een reboot uitbleef terwijl een manuele mount (sudo mount -a) perfect (alsnog) werkte. Dit valt niet direct op. Bovendien staan hierboven twee methodes beschreven voor het mounten van je NAS die zeer verschillend zijn.

      Optie 2: Kijk je als ADMIN op je NAS of met een userid zonder adminrechten? Wie weet zie je niet de userid waarmee je raspberry de NAS benadert en gaat alles toch goed. Zelf heb ik een script op de NAS gezet, deze getest voordat ik deze toevoegde in cron en toch….

      Ik maak overigens geen volledige back-up, beetje onzinnig dit dagelijks te doen maar zeker verstandig van tijd tot tijd een volledig kopie te maken van je SD-kaart; hiervoor gebruik ik overigens rpi-clone (met een kaartlezer direct aan de RPi).

      Bij het uittesten kan je beter iets ‘snellers’ uitproberen, zelf gebruik ik voor INFLUX bijgaand script die binnen een minuut klaar is:

      #!/bin/bash
      # Automate INFLUX Backups
      # =======================
      # add to /etc/fstab as one (=1) line
      # 192.168.0.200://backup/rpi/openhab /mnt/nas nfs4 rw,nolock,noauto,x-systemd.automount,x-systemd.device-timeout=5,retry=0,_netdev 0 0
      # Set Permission on your NAS: Add the RPI IP address to the NFS Host Access under Shared Folder Permissions.
      #
      # copy/create file /mnt/nas/influx_backup.sh
      # make executable sudo chmod +x /mnt/nas/influx_backup.sh
      # run manual sudo bash /mnt/nas/influx_backup.sh 10
      # schedule with sudo crontab -e with 0 3 * * * /mnt/nas/influx_backup.sh
      # create full clone to SD-card
      # rpi-clone sda -u
      # create influx copy since… (update date when on full clone)
      influxd backup -portable -since 2019-08-30T00:00:00Z /mnt/nas/influx/
      # delete all files older than retention days
      # Check to see if we got command line args
      if [ ! -z $1 ]; then
      retention_days=$1
      else
      retention_days=7
      fi
      find /mnt/nas/influx/ -mtime +$1 -exec rm {} \;
      #set time in OpenHab(ian)
      curl -X PUT –header “Content-Type: text/plain” –header “Accept: application/json” -d $(date +%Y/%m/%d-T%H:%M:%S) “http://127.0.0.1:8080/rest/items/Influx_Data/state”

      En ik moet eerlijk bekennen ik heb dit script vandaag verder geperfectioneerd toen ik erachter kwam dat het reduceren van het aantal keer dat ik mijn NAS mounte toch consequenties had. 🙂

      Beantwoorden
  • 16 november 2019 om 19:02
    Permalink

    Ik ben blij met deze oplossing maar ik krijg het niet goed aan het werk.
    Ik krijg het volgende als ik het script met de hand uitvoer:

    pi@RaspDomo:/mnt/backup $ sudo ./system_backup.sh
    dd: failed to open ‘/dev/mmcblk0’: No such file or directory
    find: ‘/mnt/backup/RaspDomo.*.img’: No such file or directory
    pi@RaspDomo:/mnt/backup $

    Als ik in /dev kijk is er ook geen mmcblk0.

    Weet iemand wat ik fout doe?
    Een reactie wordt op prijs gesteld.

    Beantwoorden
  • 30 december 2019 om 11:04
    Permalink

    @Bert,

    Gebruik lsblk -p om te achterhalen welk apparaat je wilt backuppen.
    Ik gebruik zelf een SSD en mijn device is sda.
    In mijn geval is de regel met dd :
    dd if=/dev/sda bs=4M | gzip -c > $backup_path/$HOSTNAME.$(date +%Y%m%d).img.gz

    Beantwoorden
  • 10 januari 2020 om 13:38
    Permalink

    Simpel en doeltreffend; daar hou ik wel van! 🙂 De how-to is super helder en het geheel is eenvoudig op de RPi te installeren. Tx!

    Voor de liefhebbers: op een RPi 3+ B met een 32GB Samsung Evo duurt de operatie 1 uur en 10 minuten naar een Synology DS215+ over een Gigabit netwerk.

    Beantwoorden
  • 14 januari 2020 om 21:24
    Permalink

    Is het ook mogelijk om de backup automatisch naar Google – OneDrive te laten gaan?

    Want dit zie ik wel heel graag gebeuren.

    Beantwoorden
    • 30 maart 2020 om 02:55
      Permalink

      Heb zelf zojuist liggen zoeken naar een backup oplossing voor 2 pi’s maar rclone is je antwoord. rclone kan bestanden naar clouddiensten backuppen.

      Nadeel is wel voor zover ik nu zie dat je de backup eerst elder moet opslaan op een externe usb stick/hdd of op de sd zelf.

      Beantwoorden
  • 9 maart 2020 om 19:37
    Permalink

    sudo mount.cifs //192.168.1.199/Backup/Backup_Raspberry_Pi /mnt/backup -o user=naam,pass=wachtwoord,sec=ntlmssp,uid=1000,gid=46
    Op naam en wachtwoord staan de werkelijke inlognaam en wachtwoord
    Dan krijg ik:
    mount error(16): Device or resource busy
    Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
    sudo mount-a
    mount: /etc/fstab: parse error at line 6 — ignored

    Beantwoorden

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *