RaspberryPI UPS en Backup

De mailbox PI8CDR draait nu ongeveer een jaar in test op een RaspberryPI B+. Op dit systeem draait ook een Linux BPQ node en een APRSC (Drenthe) voor uplink van APRS data naar de Internet Servers.

Het moment is gekomen om het systeem in produktie te nemen, dus je moet wat doen aan bescherming van je systeem, data en stroomuitval. Hieronder een foto van de PI2 webserver (links) en de PI B+ ax25 omgeving. Op de de PI B+ is ook een 1k2 TNS gemonteerd voor 1k2 APRS ontvangst.

UPS

Stroomuitval voor een Raspberry is een pijnlijke zaak. Nu komt dat in Nederland niet zoveel voor, maar mocht de stroom uitvallen dan bestaat de mogelijkheid dat de Micro SD kaart net bezig is data te schrijven. De gevolgen zijn vaak minder plezierig, je systeem is kapot, maar ook loop je de kans dat je Micro SD helemaal sneuvelt.

Ik heb daarom in de aanbieding bij Expert een 2 Denver Accupacks gekocht van 10 Ah. Dit pack kun je opladen met de originele Raspberry voeding. Het accupack op zijn beurt voedt de Raspberry. De capaciteit is dusdanig dat de Raspberry ongeveer 6 uur kan werken zonder externe voeding (10 / 1,5 = 6,6 uur). Meestal is de netspanning wel weer terug voordat er 5 uur verstreken is. Hiermee heb je de eerste hindernis genomen om je data en Micro SD kaart te beschermen.

Backup voorbereiding

Als je goed kijkt zie je in beide Raspberries een USB stick zitten. In de rechter zit een Kingston die voor problemen zorgde (meerdere Kingston sticks…dus die beter niet gebruiken).

Hoe werkt het:

Om te zorgen dat je Linux data met de juiste permissies en andere Linux attributen bewaard blijft zal je het FAT systeem moeten vervangen door een Linux filesysteem. Kies bij voorkeur voor een ext4 filesysteem, maar ext2 kan ook (ext4 lijkt wat sneller te zijn).

Bij het plaatsen van de USB stick meldt die zich bij mij als /dev/sda, met fdisk /dev/sda kun je de disk indelen. Verwijder eerst de FAT partititie en maak een nieuwe voor Linux aan. Het resultaat zie je hieronder.

Vervolgens moet je de partititie formateren met een bestandssysteem. Ik kies voor ext4:

mkfs.ext4 /dev/sda1 (let op de 1 achter sda). Na een kleine tijd is de USB stick klaar voor gebruik in de backup. De Kingston USB sticks kunnen lijkt het slecht omgaan met een andere formatering dan FAT, met het maken van de backup ging het hier fout.

Backup, het script

Voor de backup maak ik gebruik van het commando rsync, het script is dan ook opgebouwd rondom dit commando. Er zijn ook andere mogelijkheden, bijvoorbeeld tar, maar ik heb gekozen voor rsync daar dit commando een incremental backup mogelijk maakt. Dat laatste is tijdbesparend, alleen de verschillen worden naar de backup gestuurd.

In het script wordt eerst de USB stick gemount in het Linux filesysteem. Ik heb hier een map voor aangemaakt: MOUNTPOINT=/mnt/sda1 (DEVICE=/dev/sda1).

Na wat controles of het device bestaat wordt de stick gemount, mount -t ext4 -o defaults zorgt dat de sda1 partititie met het juiste bestandssysteem wordt gemount. Voor de rest nog wat checks of hij misschien al gemount was, of dat mounten mislukt is. Dat laatste is wel aardig om te controleren, ga je door met rsync als de USB stick niet gemount is loop je kans een backup op je Micro SD te maken (in /mnt/sda1) raakt hij nogal vol van…

De volgende stap is het rsync commando uitvoeren voor alle files/mappen die je in de backup wilt hebben. In ieder geval is /etc een aardige map om in de backup te zetten, hier zitten al je configuratie betanden in en terugzetten scheel heel wat tijd met configureren. Andere mappen zijn bijvoorbeeld /usr/local (hier staan vaak zelfgemaakte programma’s), /home als je nogal wat in je home directory plaatst.

Je kunt je bestanden in de hoofdmap plaatsen, in dat geval is BACKUPDIR=/ . Ik heb gekozen om BACKUPDIR=/raspberry-ax25 te maken, dan kan ik zien aan de map welke backup ik heb.

de opties bij rsync: -a is voor archief. Je neemt dan de Linux attributen mee, houdt symlinks intact enz. -z is voor gecomprimeerd sturen en -v is voor verbose, zorgen dat je de resultaten in het LOG krijgt (LOG=/var/log/backup/backup.log), dat dan weer naar je mailbox wordt gestuurd, altijd handig om te weten of je backup is gelukt.

Aan het eind van het script met meerdere rsync regels wacht ik 2 minuten alsvorens de schijf wordt losgekoppeld van het bestandssysteem, dit om eventuele lopende schrijfacties niet te hinderen en om te voorkomen dat deze schrijfacties het unmounten voorkomen.

sleep 2m

umount /dev/sda1

Loskoppelen van het bestandssysteem

Ik ontkoppel de de USB stick met umount om te zorgen dat bij een stroomuitval en accu uitval niet stiekum ook de USB schijf wordt aangetast, anders ben ik alsnog de backup kwijt. Ook kun je dan de USB stick gewoon uit de Raspberry verwijderen.

Extra veilig

Je plaatst het backup script in de map /etc/cron.daily waardoor het script iedere nacht zo rond 05:30 uur wordt uitgevoerd. Iedere dag wordt je backup dus bijgewerkt. Wat te doen als iemand stiekum nu je html (php!) betanden heeft aangepast. Deze veranderingen worden dan braaf naar de USB stick geschreven en je hebt niets aan je backup.

Doordat de USB stick met umount is lostgekoppeld kun je natuurlijk iedere dag een andere USB stick plaatsen. Na het lezen van de mail dat de backup gelukt is kun je de stick verwijderen en een andere plaatsen (denk aan het voorbereiden van de stick!). Je kunt dan bijvoorbeeld iedere dag een nieuwe backup maken, zodat je 7 dagen terug kunt in de tijd. Maand, Jaar?

Als download mijn script voor de ax25 Raspberry (let bijvoorbeeld bij de aprsc backup op dat je niet het halve bestandssyteem meerdere keren meeneemt (nadeel van chroot jail voor een applicatie).

02_backup