Heb je veel tijd gestoken in het aanpassen van jouw Pi, dan wil je die wijzigingen natuurlijk niet verliezen. Daarom is het belangrijk om geregeld back-ups te nemen van de boot disk van je Pi. In deze workshop leggen we je haarfijn uit hoe je dat doet met behulp van raspiBackup in Raspbian.
Auteur: Filip Vervloesem
In principe is het niet moeilijk om een volledige systeemback-up van je Pi te maken. Je zet de Pi uit, koppelt de SD-kaart via een kaartlezer aan een andere Linux PC, maakt een image van die kaart met behulp van ‘dd’, steekt de kaart terug in de Pi en zet ‘m weer aan. Die aanpak heeft echter heel wat nadelen:
Kortom: zo’n back-up maak je misschien één of twee keer, maar achteraf geef je het wellicht op. We zochten dus een methode om de back-ups van onze Pi volledig te automatiseren. Daarvoor gaan we aan de slag met raspiBackup.
RaspiBackup is een shell script dat met behulp van allerlei standaard Linux tools systeemback-ups maakt. Laat je niet afschrikken door het gebrek aan een grafische interface. RaspiBackup bevat immers een tekstgebaseerde configuratiewizard, vergelijkbaar met raspi-config. Je hebt dus nauwelijks kennis van de commandline nodig om raspiBackup te configureren. Alle informatie over raspiBackup vind je op https://github.com/framps/raspiBackup. De installer download je via https://bit.ly/2OcystJ. Open vervolgens een terminal en voer volgende commando’s uit om de configuratiewizard te starten:
cd Downloads chmod +x raspiBackupInstallUI.sh sudo ./raspiBackupInstallUI.sh
Gebruik de pijltjestoetsen naar boven/beneden om tussen de verschillende opties te navigeren, de spatiebalk om items te selecteren/deselecteren, ‘Tab’ (of de pijltjestoetsen naar links/rechts) om naar de knoppen onderaan het scherm te gaan en ‘Enter’ om een keuze te bevestigen. Om te starten, kies je in het hoofdmenu de optie ‘M2’ (Install components) en vervolgens ‘I1’ (Install raspiBackup using a default configuration).
Keer daarna terug naar het hoofdmenu en kies nu de optie ‘M3’ (Configure major options). De volgende opties zijn het absolute minimum om een eerste back-up te maken:
Staat er iets anders dan ext3 of ext4 in de kolom FSTYPE bij jouw externe schijf? Dan moet je een andere schijf gebruiken of de schijf herformatteren als ext4, bijvoorbeeld in Linux Mints schijfhulpprogramma.
Sluit de wizard af en bevestig dat je de gewijzigde configuratie wilt bewaren. Negeer de waarschuwing dat er geen services gestopt worden vóór de back-up. Wil je de wizard nadien weer openen, dan kan dat via:
sudo raspiBackupInstallUI.sh
Dat commando start een kopie van de wizard uit de map /usr/local/sbin. De oorspronkelijke download in ~/Downloads wordt verwijderd nadat je de wizard de eerste keer afsluit.
We willen natuurlijk testen of de back-up werkt voordat we die automatiseren. Start dus manueel een eerste back-up met volgende commando:
sudo raspiBackup.sh
Hoe lang de back-up duurt, hangt af van de hoeveelheid geïnstalleerde software en de snelheid van jouw SD-kaart en externe harde schijf. Voor een relatief kale Raspbian desktop duurde het bij ons 12 minuten, waarbij 3GB aan data weggeschreven werd. De eerste back-up duurt altijd het langst, omdat dan alle bestanden gekopieerd worden. Voor de volgende back-ups hoeft raspiBackup enkel de gewijzigde bestanden te kopiëren. Controleer ook goed de output van raspiBackup. Mocht onverwachts iets mislopen, dan moet je dat uiteraard oplossen voordat je de back-ups automatiseert. Het meest voor de hand liggende probleem is dat er onvoldoende schijfruimte is in het back-up path. Gebruik dus een voldoende grote schijf of bewaar de back-ups rechtstreeks naar je nas (daarop komen we later terug).
Is de back-up vlot verlopen? Dan is het een goed moment om de restore procedure eens te testen. Zo weet je alvast hoe dat in zijn werk gaat op het moment dat je het écht nodig hebt. In principe kan je de restore uitvoeren vanaf een Raspberry Pi. De procedure daarvoor is als volgt:
Vaak is het gemakkelijker om de restore vanaf een andere Linux machine te starten, zoals je desktop of laptop. Dan heb je geen extra SD-kaart nodig.
Om een restore uit te voeren, hoef je niet de installatiewizard te starten. Het volstaat om het script raspiBackup.sh te downloaden vanaf https://bit.ly/2OguQXA. Vervolgens maak je dit executable:
cd Downloads chmod +x raspiBackup.sh
en koppel je achtereenvolgens de kaartlezer met de SD-kaart én de externe schijf met de back-ups aan. Bekijk de output van:
lsblk -o +FSTYPE
om te achterhalen wat de device name is van de SD-kaart (vooral de SIZE, MOUNTPOINT en FSTYPE kolommen helpen je op weg). Heeft je systeem slechts één interne schijf, dan is het eerste externe opslagmedium (de SD-kaart) /dev/sdb en het tweede (de externe schijf) /dev/sdc. Wil je absoluut zeker zijn dat je het juiste apparaat kiest? Koppel de apparaten dan één voor één aan en voer steeds ‘lsblk’ uit vóór en na het aankoppelen. Vergelijk dan de output van ‘lsblk’ en je ziet duidelijk welke naam bij elk apparaat hoort. Open nu de schijf met de back-ups in de bestandsbeheerder en zoek de naam van de back-up die je wilt herstellen. De naam van elke back-upmap bevat namelijk de datum en tijd waarop de back-up gestart was.
Heb je alle benodigde informatie? Dan start je de restore als volgt:
sudo raspiBackup.sh -d <apparaatnaam sd-kaart> <backup map>
Bijvoorbeeld:
sudo ./raspiBackup.sh -d /dev/sdb /media/filip/backup/raspiBackup/raspberrypi/raspberrypi-rsync-backup-20190723-160522
Bevestig tenslotte dat je de SD-kaart wilt overschrijven om de restore te starten. De SD-kaart mag overigens kleiner (of groter) zijn dan die waarvan je een back-up genomen hebt, zo lang ze maar groot genoeg is om de back-up te herstellen. Het volledige herstelproces duurde in onze test ongeveer 40 minuten. We konden nadien probleemloos booten vanaf de herstelde SD-kaart. Onze eerste back-up is dus geslaagd!
We hebben een aantal instellingen overgeslagen tijdens de configuratie van onze eerste back-up. In de meeste gevallen heb je die niet nodig, maar we willen toch even uitleggen wanneer je die wél moet aanpassen. Open dus opnieuw het M3-menu in het script raspiBackupInstallUI.sh. Via de optie ‘C4’ (backup type) kies je uit drie verschillende backends: rsync, tar of dd. Tot nu toe hebben we rsync gebruikt. Dat is de snelste en meest efficiënte methode. Rsync kopieert immers vanaf de tweede back-up enkel de gewijzigde bestanden. Rsync vereist een extern opslagmedium met een ext3- of ext4-bestandssysteem óf een map die gedeeld wordt via het nfs-protocol. Wil je back-ups bewaren op een gedeelde map van een Windows-computer, op je nas via het smb-protocol of op een externe schijf met een Windows-bestandssysteem (FAT32, exFAT of NTFS)? Dan moet je tar kiezen in plaats van rsync. Het nadeel is wel dat elke back-up een volledig nieuwe back-up is. Back-ups duren dus langer en nemen meer plaats in.
Op externe schijven of usb-sticks vind je vaak het FAT32-bestandssysteem terug. Dat heeft als bijkomend nadeel een maximale bestandsgrootte van 4GB. Het tar-backend bewaart de volledige back-up in één bestand. In dat geval is het dus onmogelijk om back-ups groter dan 4GB te bewaren. Gebruik je de externe schijf of usb-stick uitsluitend om je Pi te back-uppen? Dan raden we je aan om ze te herformatteren met het ext4-bestandssysteem en rsync als backend te gebruiken. De derde optie, dd als backend, is enkel nuttig als je de back-up wilt restoren vanaf Windows. Bovendien is het niet mogelijk om zo’n back-up te herstellen naar een kleinere SD-kaart.
Via de optie ‘C5’ (backup mode) stel je in of jouw Pi twee of meer partities bevat om te back-uppen. Standaardinstallaties van raspbian hebben slechts twee partities. Voor SD-kaarten met méér dan twee partities moet je de tweede modus kiezen. Controleer dus even hoeveel partities jouw installatie bevat. Dat doe je bijvoorbeeld met volgend commando in een terminal:
lsblk | grep part
Krijg je alleen ‘mmcblk0p1’ een ‘mmcblk0p2’ te zien, dan hoef je niets te wijzigen. Tot slot kan je ook nog instellen welke services van jouw Pi raspbiBackup moet stoppen vóór de back-up start (optie ‘C6’). Denk bijvoorbeeld aan CUPS, MiniDLNA, Nextcloud of Samba. Tijdens de back-up zijn die dan uiteraard niet beschikbaar, maar dat verkleint wel de kans op een inconsistente back-up. Maak je een back-up terwijl bepaalde services draaien, dan is er een kleine mogelijkheid dat ze na het herstellen van de back-up niet correct meer starten. Persoonlijk zouden we ons daar niet te veel zorgen over maken. Maar als je de back-up start op een tijdsstip dat niemand de Pi gebruikt, kan je die services voor alle zekerheid net zo goed stoppen.
Heb je een nas of een Linux homeserver, dan is het handiger om daar de back-ups op te bewaren. We tonen je kort hoe je dat doet. Om te beginnen moet je een bepaalde map delen via nfs op je nas of homeserver. De precieze procedure hangt af van de gebruikte nas of Linux-distributie.
Wij kozen een FreeNAS-server in onze test. Ga naar Sharing > Unix (NFS) Shares en klik op ‘Add’. Klik op het map-icoontje naast Path om de gewenste map te kiezen (indien nodig, maak je die eerst nog aan). Onder ‘Authorized Hosts and IP addresses’ vul je het IP-adres van je Pi in. Als Maproot User kies je de gebruiker root en als Maproot Group de groep wheel. Klik tot slot op ‘Save’ om de export aan te maken. Download nu het script raspiBackupNfsWrapper.sh van https://bit.ly/2GnZubd op je Pi en pas het aan voor jouw configuratie. Bij NFSSERVER vul je het IP-adres van je nas of server in en bij NFSDIRECTORY de map die je net gedeeld hebt. Bijvoorbeeld:
NFSSERVER="192.168.1.14" NFSDIRECTORY="/mnt/data/filip/raspiBackup"
Daarna maak je de map aan waarop de gedeelde map gemount wordt, maak je het script uitvoerbaar en verplaats je het naar /usr/local/bin:
sudo mkdir /backup chmod +x raspiBackupNfsWrapper.sh sudo mv raspiBackupNfsWrapper.sh /usr/local/bin
Pas vervolgens /usr/local/etc/raspiBackup.conf aan zodat raspiBackup /backup als backup path gebruikt (open het bestand via sudo):
DEFAULT_BACKUPPATH="/backup"
(In dit geval kan je de wizard niet gebruiken om de configuratie aan te passen.) Maak dan een symlink naar dat bestand, zodat het wrapper script de juiste configuratie gebruikt:
cd /usr/local/etc sudo ln -s raspiBackup.conf raspiBackupNfsWrapper.conf
Tot slot start je het script als volgt:
sudo raspiBackupNfsWrapper.sh
Krijg je volgende foutmelding te zien tijdens de back-up over NFS:
rsync: set_acl: sys_acl_set_file(...): Operation not supported (95)
Open dan /usr/local/bin/raspiBackup.sh via sudo en vervang volgende regel:
DEFAULT_RSYNC_BACKUP_OPTIONS="-aHAx"
door:
DEFAULT_RSYNC_BACKUP_OPTIONS="-aHXx"
Nu rest ons nog één stap: automatisch de back-ups starten. Waarschijnlijk zijn zowel je Pi als je nas of homeserver 24/7 ingeschakeld. Plan je de back-ups ergens ‘s nachts in, dan merkt niemand er iets van. Bedenk eerst even hoe vaak je een back-up wilt maken. Waarschijnlijk is éénmaal per week wel genoeg. RaspiBackup is immers een tool voor systeemback-ups, dus alleen voor het besturingssysteem en configuratiebestanden. Voor gebruikersdata -indien aanwezig op je Pi- gebruik je beter een ander back-upprogramma.
Open opnieuw het configuratiemenu en kies de optie ‘C7’ (regular backup). Kies ‘R1’ (Enable weekly backup) om een back-up in te plannen elke zondagochtend om 05:00 uur. Met de opties ‘R2’ en ‘R3’ pas je eventueel de weekdag en het uur voor de back-up aan. Maar let op! Gebruik je het nfs wrapper script, dan moet je het commando voor de back-up nog aanpassen. Open het bestand /etc/cron.d/raspiBackup via sudo en vervang /usr/local/bin/raspiBackup.sh door /usr/local/bin/raspiBackupNfsWrapper.sh.
Tot slot raden we aan om via optie ‘C8’ in het configuratiemenu e-mail notificaties in te stellen. Je ontvangt een statusbericht na elke back-up: zo zie je meteen of je back-ups nog netjes werken. Installeer een tool, zoals Nullmailer, op je Pi om de e-mails effectief te versturen (zie de rubriek Expert tips in Linux Magazine #02 van dit jaar).
Met raspiBackup is het erg eenvoudig om manueel een volledige systeemback-up te maken van je Pi naar een externe schijf of usb-stick. Wil je de back-ups automatiseren of op een nas of homeserver bewaren? Ook dat is mogelijk, maar het vereist wel iets meer configuratiewerk. Toch kan je met een minimale kennis van de commandline prima aan de slag met raspiBackup. Experimenteer je graag met je Raspberry Pi, dan heb je nu geen excuus meer om géén back-ups te maken!