Back-up van Partoska-evenementen op een Raspberry Pi

#Raspberry#Pi#back-up#CLI#automatisering#foto's
P16 min lezen
Omslagafbeelding van het blogbericht "Back-up van Partoska-evenementen op een Raspberry Pi".

Stel dat je club iedere zaterdag een evenement organiseert. Gasten voegen foto's toe aan Partoska, maar niemand denkt eraan ze te exporteren voordat het volgende evenement alle aandacht opeist. Een fotoback-up op een Raspberry Pi lost dit geruisloos op: zet de Pi naast een externe SSD, voer iedere nacht één opdracht uit en laat hem nieuwe foto's verzamelen terwijl jij slaapt.

De uiteindelijke opstelling heeft een eenvoudige taakverdeling. Partoska verzamelt foto's van gasten via een QR-code. De Raspberry Pi bewaart een lokale kopie op opslag die jij beheert. Zodra een bestand op de externe schijf staat, wordt die lokale kopie niet verwijderd als het bestand later uit Partoska verdwijnt.

Deze handleiding begint met een lege microSD-kaart. Je installeert Raspberry Pi OS via Windows, macOS of Linux, bereidt een externe schijf voor, installeert p6a, meldt je aan via OAuth en maakt een dagelijkse crontaak aan.

Wat heb je nodig?

Gebruik een Raspberry Pi die een 64-bits besturingssysteem ondersteunt. Een Pi 3, Pi 4, Pi 5 of Zero 2 W heeft genoeg rekenkracht voor deze taak. Een ouder 32-bits model kan de huidige officiële ARM64-versie van p6a niet uitvoeren.

Je hebt ook nodig:

  • Een microSD-kaart. Raspberry Pi raadt minimaal 16 GB aan voor Raspberry Pi OS Lite, hoewel een 32 GB-kaart meer ruimte biedt voor logs en systeemupdates.
  • Een geschikte voeding voor de Pi.
  • Een externe SSD, harde schijf of USB-stick met voldoende ruimte voor het archief.
  • Een microSD-kaartlezer voor de computer die de kaart zal voorbereiden.
  • Toegang via ethernet of wifi.

Een SSD is de probleemloosste externe schijf. Sommige draagbare harde schijven vragen meer stroom dan de USB-poort van een Raspberry Pi betrouwbaar kan leveren. Valt een schijf onder belasting weg, gebruik dan een USB-hub met eigen voeding of een schijf met een eigen voedingsbron.

Schrijf Raspberry Pi OS naar de microSD-kaart

De oude naam "Raspbian" komt nog steeds in handleidingen voor, maar het huidige besturingssysteem heet Raspberry Pi OS. Gebruik Raspberry Pi Imager in plaats van de kaart handmatig te formatteren. Imager wist het geselecteerde apparaat, schrijft de partities en controleert het resultaat binnen dezelfde werkwijze.

Installeer Raspberry Pi Imager op de computer met je kaartlezer:

  • Op Windows download je het Windows-installatieprogramma van de Raspberry Pi-softwarepagina en voer je het uit.
  • Op macOS download je het macOS-installatieprogramma en open je het op de gebruikelijke manier.
  • Op Linux download je de officiële x86_64-versie. Gebruikers van Debian en Ubuntu kunnen Imager ook installeren met sudo apt install rpi-imager als hun distributie het pakket aanbiedt.

De schermen van de Imager zijn op alle drie systemen hetzelfde:

  1. Selecteer je Raspberry Pi-model.
  2. Kies Raspberry Pi OS Lite (64-bit). Een desktopomgeving voegt niets toe aan een apparaat dat naast een schijf staat en via SSH wordt beheerd.
  3. Selecteer de microSD-kaart als opslagapparaat.
  4. Open de OS-aanpassingen voordat je de schijfkopie schrijft.

Stel een hostnaam in, zoals partoska-backup, maak een gebruikersnaam en wachtwoord aan, configureer wifi als je geen ethernet gebruikt en kies de juiste tijdzone. Schakel SSH in onder Services. Authenticatie met een openbare sleutel verdient de voorkeur als je al SSH-sleutels gebruikt. Voor de eerste installatie op een vertrouwd thuisnetwerk is wachtwoordauthenticatie ook geschikt.

Controleer nogmaals de opslagkeuze voordat je op Schrijven drukt. Imager zal het wissen. Door eerst ongerelateerde USB-schijven los te koppelen, voorkom je dat je per ongeluk de verkeerde kiest.

Laat Imager de controle voltooien, werp de kaart veilig uit, plaats hem in de Raspberry Pi en sluit de externe schijf aan. Zet de Pi aan en geef hem een of twee minuten om verbinding met het netwerk te maken.

Maak via SSH verbinding en update de Pi

Vanuit Terminal op macOS of Linux, of vanuit PowerShell op Windows, maak je verbinding met de gebruikersnaam die je in Imager hebt aangemaakt:

ssh your-user@partoska-backup.local

Als het .local-adres niet oplost, vind dan het IP-adres van de Pi in je router en gebruik dat in plaats daarvan:

ssh your-user@192.168.1.50

Update Raspberry Pi OS voordat je iets anders installeert:

sudo apt update sudo apt full-upgrade -y sudo reboot

Maak na de herstart opnieuw verbinding en controleer vervolgens of het besturingssysteem 64-bits is:

uname -m

Het verwachte resultaat is aarch64. Staat er armv7l, dan gebruikt de Pi een 32-bits schijfkopie. Schrijf de kaart opnieuw met Raspberry Pi OS Lite (64-bit) voordat je verdergaat.

Bereid de externe schijf voor

Een betrouwbare back-up op een externe Raspberry Pi-schijf begint met een vast aankoppelpunt. Sluit de schijf aan en geef de beschikbare opslagapparaten weer:

lsblk -o NAME,SIZE,FSTYPE,LABEL,UUID,MOUNTPOINTS,MODEL

Gebruik de grootte, het model en het label om de externe partitie te identificeren. De voorbeelden hieronder gebruiken /dev/sda1, maar jouw Pi kan het ook /dev/sdb1 of iets anders noemen. De microSD verschijnt meestal als /dev/mmcblk0; formatteer die niet.

Bevat de externe schijf al bestanden die je wilt bewaren, sla de formatteeropdracht dan over. Kopieer de bestanden naar een veilige plek voordat je het bestandssysteem wijzigt.

Voor een schijf die op de Pi aangesloten blijft, is ext4 de verstandigste keuze:

sudo mkfs.ext4 -L PARTOSKA /dev/sda1

Die opdracht wist de geselecteerde partitie. Controleer lsblk nogmaals voordat je hem uitvoert. Als je van plan bent de schijf los te koppelen en rechtstreeks op Windows of macOS te lezen, formatteer hem dan als exFAT in plaats daarvan:

sudo apt install -y exfatprogs sudo mkfs.exfat -n PARTOSKA /dev/sda1

Het exFAT-formatteercommando wist ook de partitie.

Maak een vast aankoppelpunt aan en zoek de UUID van de partitie op:

sudo mkdir -p /mnt/partoska sudo blkid /dev/sda1

Maak een back-up van de bestandssysteemtabel voordat je die bewerkt:

sudo cp /etc/fstab /etc/fstab.before-partoska sudo nano /etc/fstab

Voeg aan het einde één regel toe en vervang de voorbeeld-UUID door de waarde die blkid toont:

UUID=12345678-1234-1234-1234-123456789abc /mnt/partoska ext4 defaults,nofail,x-systemd.device-timeout=10 0 2

Voor exFAT wijzig je het bestandstype naar exfat en stel je uid en gid in op de nummers die id -u en id -g tonen (meestal 1000 voor de eerste gebruiker):

UUID=1234-ABCD /mnt/partoska exfat defaults,nofail,x-systemd.device-timeout=10,uid=1000,gid=1000,umask=0022 0 0

Druk in Nano op Ctrl+O om op te slaan en daarna op Enter om de bestandsnaam te bevestigen. Sluit de editor met Ctrl+X. Nano toont deze sneltoetsen als ^O en ^X; het dakje staat voor de Ctrl-toets.

Koppel alles aan wat in het bestand staat en controleer of het verwachte apparaat aanwezig is:

sudo mount -a findmnt /mnt/partoska

Het resultaat van een geslaagde controle met findmnt ziet er ongeveer zo uit:

TARGET SOURCE FSTYPE OPTIONS /mnt/partoska /dev/sda1 ext4 rw,relatime

TARGET moet /mnt/partoska zijn en SOURCE moet de eerder gevonden externe partitie zijn. Ga niet verder als findmnt niets afdrukt of de systeempartitie op de microSD-kaart noemt. Los eerst het probleem met de UUID of het bestandssysteemtype op.

Maak de fotomap aan en geef je gewone gebruikersaccount toestemming om deze te gebruiken:

sudo mkdir -p /mnt/partoska/events sudo chown "$USER":"$USER" /mnt/partoska/events touch /mnt/partoska/events/.write-test unlink /mnt/partoska/events/.write-test

Sla de opdracht chown over bij exFAT. De aankoppelopties uid en gid regelen het eigendom al.

De overige installatie- en cronvoorbeelden werken met beide bestandssystemen zodra de schijf aan /mnt/partoska is gekoppeld. De Raspberry Pi-documentatie over externe opslag beschrijft meer mogelijkheden voor exFAT- en NTFS-schijven.

Installeer p6a

p6a is de opensource-opdrachtregeltool van Partoska. De huidige versie bevat een binair bestand voor ARM64 Linux. p6a op een Raspberry Pi werkt dus zonder dat je het zelf hoeft te compileren. Kies één installatiemethode; je hebt ze niet alle drie nodig.

Optie A: download het binaire ARM64-bestand met wget

Dit is de eenvoudigste aanpak voor een Raspberry Pi die alleen als back-upserver dient, omdat je geen Node.js of een andere pakketbeheerder installeert. De onderstaande versie was actueel bij publicatie van dit artikel. Kijk op de pagina met p6a-versies of er een nieuwere versie is.

sudo apt install -y wget ca-certificates P6A_VERSION="1.11.5" wget "https://github.com/partoska/p6a-cmd/releases/download/v${P6A_VERSION}/p6a_${P6A_VERSION}_linux_arm64" -O p6a sudo install -m 0755 p6a /usr/local/bin/p6a p6a version

Optie B: installeer via npm

Raspberry Pi OS bevat niet standaard npm. Installeer eerst Node.js en npm en vervolgens het platformspecifieke p6a-pakket:

sudo apt update sudo apt install -y nodejs npm sudo npm install -g @partoska/p6a p6a version

Optie C: gebruik Homebrew op Linux

Homebrew ondersteunt ARM64 Linux en de Partoska-formule kiest automatisch het juiste binaire bestand voor de Raspberry Pi. Staat Homebrew al op de Pi, dan volstaat één opdracht:

brew install partoska/tap/p6a p6a version

Bij de bovenstaande opdrachten hoort p6a version de uitvoer p6a v1.11.5 te tonen, of een nieuwere versie als die inmiddels is uitgebracht. De fout Exec format error betekent meestal dat de Pi een 32-bits besturingssysteem gebruikt of dat je per ongeluk het verkeerde binaire bestand hebt gedownload.

Homebrew alleen voor p6a installeren is overbodig. Het vereist bouwgereedschap en een eigen mappenstructuur, terwijl het rechtstreeks gedownloade binaire bestand hetzelfde doet. Homebrew blijft een goede keuze als je er al andere software op de Pi mee beheert.

Welke aanpak je ook kiest, noteer het exacte pad naar het binaire bestand. Het cronscript heeft dit later nodig:

command -v p6a

Bij de rechtstreekse installatie verschijnt normaal gesproken /usr/local/bin/p6a. Homebrew op Linux geeft meestal een pad onder /home/linuxbrew/.linuxbrew/bin.

Meld je aan via OAuth

Meld je aan met je gewone gebruikersaccount, zonder sudo:

p6a login

De opdracht toont een autorisatie-URL. Open die in een browser, meestal op de computer waarmee je via SSH verbinding hebt gemaakt. Meld je aan bij Partoska en keur de toegang goed. Aan het einde van de OAuth2-autorisatiecodestroom toont de browser een code. Kopieer die naar het klembord en plak hem in de wachtende p6a-prompt. De browser hoeft niet op de Raspberry Pi te draaien.

p6a bewaart de aanmeldgegevens standaard voor je gebruikersaccount in ~/.p6a. De crontaak moet als dezelfde gebruiker worden uitgevoerd. Als je je aanmeldt met sudo p6a login, worden de gegevens voor root opgeslagen en kan de taak van de gewone gebruiker zich niet aanmelden.

Controleer de verbinding:

p6a list

Je zou de Partoska-evenementen moeten zien die beschikbaar zijn voor je account.

Voer de eerste back-up handmatig uit

Controleer het volledige traject voordat je op een automatische fotoback-up op een Raspberry Pi vertrouwt:

mountpoint -q /mnt/partoska && echo "External drive mounted" p6a sync -t /mnt/partoska/events --owner-only find /mnt/partoska/events -maxdepth 2 -type f | head df -h /mnt/partoska

De eerste opdracht moet afdrukken:

External drive mounted

Stop als er niets wordt afgedrukt. De externe schijf is dan niet aan het verwachte pad gekoppeld. De synchronisatieopdracht moet zonder authenticatie-, netwerk- of bestandssysteemfout eindigen. De precieze uitvoer hangt af van het aantal gevonden evenementen en nieuwe bestanden.

De opdracht find drukt vervolgens maximaal tien gedownloade bestandspaden af. Een realistisch resultaat ziet er ongeveer zo uit:

/mnt/partoska/events/2026-07-18 Summer Match/.event.p6a.ini /mnt/partoska/events/2026-07-18 Summer Match/IMG_0001.jpg /mnt/partoska/events/2026-07-18 Summer Match/IMG_0002.jpg /mnt/partoska/events/2026-07-18 Summer Match/MOV_0001.mp4

p6a maakt voor ieder evenement één map aan met de indeling YYYY-MM-DD Event Name. Afbeeldingen krijgen namen als IMG_0001.jpg en video's namen als MOV_0001.mp4. Het verborgen bestand .event.p6a.ini legt vast welk Partoska-evenement en welke media-ID's bij de map horen; laat het staan. head beperkt de uitvoer tot tien paden. Deze opdracht is dus een snelle controle en geen telling van alle bestanden.

Ten slotte moet df melden dat de externe partitie aan /mnt/partoska is gekoppeld. De capaciteiten zullen verschillen; let vooral op de eerste en laatste kolom:

Filesystem Size Used Avail Use% Mounted on /dev/sda1 916G 18G 852G 3% /mnt/partoska

Size, Used en Avail tonen achtereenvolgens de totale, gebruikte en beschikbare ruimte van de schijf. Het apparaat in de eerste kolom moet de externe partitie zijn die je met lsblk hebt gevonden, bijvoorbeeld /dev/sda1. Stop als de opdracht /dev/mmcblk0p2, /dev/root of een andere systeempartitie op de microSD-kaart toont. De USB-schijf is dan niet aangekoppeld en de foto's zouden op de systeemkaart van de Raspberry Pi terechtkomen.

Voer de synchronisatieopdracht na deze controles nogmaals uit. De opdracht hoort reeds lokaal opgeslagen bestanden over te slaan en alleen nieuwe bestanden op te halen.

Kies welke evenementen je wilt synchroniseren

De hoofdopdracht accepteert twee evenementfilters:

# Elk evenement dat het account kan benaderen p6a sync -t /mnt/partoska/events # Alleen evenementen die door jouw account zijn aangemaakt p6a sync -t /mnt/partoska/events --owner-only # Alleen evenementen die als favoriet zijn gemarkeerd p6a sync -t /mnt/partoska/events --favorite-only # Evenementen die zowel eigendom zijn van jou als favoriet gemarkeerd p6a sync -t /mnt/partoska/events -o -f

De korte optie -f staat voor favoriete evenementen. Ze heeft niets te maken met foto's die binnen een evenement als favoriet zijn gemarkeerd. Voor een Raspberry Pi van een club of evenementenlocatie is --owner-only een verstandige standaard. Zo archiveer je geen ongerelateerde evenementen waaraan iemand alleen als gast heeft deelgenomen.

Beveilig de back-up met een controle

Een gewone cronregel die p6a sync aanroept, kan op een vervelende manier misgaan. Als de externe schijf ontbreekt maar /mnt/partoska nog als gewone map bestaat, kan Linux de downloads op de microSD-kaart opslaan. Met voldoende videobestanden raakt die kaart vol.

Gebruik een klein script dat alleen wordt uitgevoerd als de externe schijf is aangekoppeld. Maak een persoonlijke map bin aan:

mkdir -p "$HOME/bin" nano "$HOME/bin/partoska-backup.sh"

Plak dit script en pas P6A_BIN aan naar het pad dat teruggegeven wordt door command -v p6a:

#!/usr/bin/env bash set -euo pipefail P6A_BIN="/usr/local/bin/p6a" MOUNT_POINT="/mnt/partoska" TARGET="${MOUNT_POINT}/events" if ! /usr/bin/mountpoint -q "$MOUNT_POINT"; then echo "External drive is not mounted at $MOUNT_POINT" >&2 exit 1 fi if [[ ! -x "$P6A_BIN" ]]; then echo "p6a is not executable at $P6A_BIN" >&2 exit 1 fi mkdir -p "$TARGET" "$P6A_BIN" sync -t "$TARGET" --owner-only

Sla op en sluit de editor.

Maak het uitvoerbaar en voer het zelf één keer uit:

chmod 700 "$HOME/bin/partoska-backup.sh" "$HOME/bin/partoska-backup.sh"

De machtiging 700 betekent dat alleen de bestandseigenaar het script kan lezen, wijzigen of uitvoeren. Mag een vertrouwde Linux-groep het ook lezen en uitvoeren, gebruik dan chmod 750. De eigenaar krijgt lees-, schrijf- en uitvoerrechten, de groep lees- en uitvoerrechten en alle anderen krijgen geen toegang.

Neem het script pas in de planning op als deze handmatige test slaagt.

Plan de dagelijkse crontaak

De cronback-up op de Raspberry Pi kan nu het beveiligde script aanroepen. Zorg dat de cronservice is geïnstalleerd en bij het opstarten wordt geactiveerd:

sudo apt install -y cron sudo systemctl enable --now cron

Open je crontab:

crontab -e

Voeg deze regel toe om de back-up iedere dag om 03.15 uur uit te voeren volgens de ingestelde tijdzone van de Pi:

15 3 * * * "$HOME/bin/partoska-backup.sh" >> "$HOME/partoska-backup.log" 2>&1

Sla het bestand op en sluit de editor, bevestig dan dat cron de invoer heeft geaccepteerd:

crontab -l

De opdracht hoort het opgeslagen schema te tonen:

15 3 * * * "$HOME/bin/partoska-backup.sh" >> "$HOME/partoska-backup.log" 2>&1

Controleer na de eerste geplande uitvoering het logbestand en de schijf:

tail -n 50 "$HOME/partoska-backup.log" findmnt /mnt/partoska df -h /mnt/partoska

Cron probeert het niet om 03.16 uur opnieuw als de Pi om 03.15 uur uitstond. Dat kan hier geen kwaad: bij de volgende geslaagde synchronisatie worden alle nog ontbrekende bestanden opgehaald. Voer het script na een lange onderbreking handmatig uit als je niet tot de volgende nacht wilt wachten.

Wat gebeurt er als een foto uit Partoska wordt verwijderd?

p6a sync is een eenrichtingsdownload die alleen bestanden toevoegt, geen exacte spiegel. De opdracht downloadt ontbrekende onlinebestanden en slaat bestanden over die al op de externe schijf staan. Een lokale foto wordt niet verwijderd alleen omdat die foto of het hele evenement niet meer online staat.

Dat onderscheid is belangrijk. Zodra de nachtelijke taak een foto heeft gedownload, blijft de kopie op de Raspberry Pi staan als je het origineel uit Partoska verwijdert. Een foto die vóór de eerste geslaagde synchronisatie wordt verwijderd, kan niet door p6a worden hersteld. Laat de Pi daarom gedurende de bewaartermijn van het evenement draaien.

Het hernoemen van een evenement werkt anders dan verwijderen. Krijgt een online-evenement een nieuwe naam, dan kan p6a de lokale map hernoemen terwijl de gedownloade mediabestanden erin blijven staan.

Een externe schijf naast een Raspberry Pi blijft één enkele schijf en schijven kunnen defect raken. Kopieer onvervangbare foto's daarom ook naar een andere schijf of een opslaglocatie op een ander fysiek adres.

Partoska blijft het gastgerichte werk doen

Niets in deze opstelling verandert de manier waarop mensen foto's bijdragen. Gasten scannen de QR-code van het evenement en uploaden via hun browser. Ze krijgen de Raspberry Pi, p6a en cron niet te zien. De Pi verwerkt alleen het archief van de organisator nadat de bestanden bij Partoska zijn aangekomen.

De webapp blijft beschikbaar om evenementen aan te maken, uploads te modereren en foto's te bekijken. Deze werkwijze voor een Partoska-back-up is handig als je regelmatig en zonder extra herinnering lokale kopieën wilt maken. Wil je daarnaast vanuit de terminal evenementen aanmaken, QR-codes genereren of met een AI-assistent werken, lees dan de bijbehorende handleiding voor de Partoska-CLI en AI.

Bij kleine evenementen kun je de hele opstelling testen met het gratis abonnement. De opslaglimieten en bewaartermijnen verschillen per abonnement.

Maak een Partoska-evenement aan

Controleer de handmatige synchronisatie en laat de Pi daarna de nachtdienst overnemen.

FAQ

Welke Raspberry Pi moet ik gebruiken voor een back-up van Partoska-foto's?

Gebruik een model waarop 64-bits Raspberry Pi OS kan draaien, zoals een Pi 3, Pi 4, Pi 5 of Zero 2 W. De huidige Raspberry Pi-versie van p6a is gemaakt voor ARM64. Een Pi 4 of Pi 5 met een externe SSD biedt de eenvoudigste installatie, maar voor fotosynchronisatie is weinig processorkracht nodig.

Moet de Raspberry Pi de hele dag aan blijven?

Nee. Op het geplande back-uptijdstip heeft de Pi alleen stroom, netwerktoegang en de externe schijf nodig. Hem aan laten staan is eenvoudiger en kost weinig elektriciteit. Als een uitvoering wordt overgeslagen, downloadt de volgende synchronisatie de bestanden die nog niet lokaal staan.

Wat downloadt p6a sync -f?

De optie downloadt evenementen die je als favoriet hebt gemarkeerd. Ze beperkt de download niet tot favoriete foto's binnen die evenementen. Combineer -f met -o voor evenementen die zowel van jou als favoriet zijn.

Vult cron de microSD-kaart als de USB-schijf wordt losgekoppeld?

Het script in deze handleiding controleert mountpoint voordat het begint. Ontbreekt de externe schijf, dan stopt het met een foutmelding zonder iets weg te schrijven. Verwijder die controle niet.

Blijven verwijderde Partoska-foto's op de Raspberry Pi staan?

Ja, mits p6a ze heeft gedownload voordat ze online werden verwijderd. Bij de synchronisatie worden lokale bestanden niet verwijderd om ze met verwijderingen online gelijk te trekken. Als een foto verdween voordat de Pi hem kopieerde, is die nooit in het lokale archief terechtgekomen.

Kan ik de archiefschijf rechtstreeks verbinden met Windows of macOS?

Gebruik exFAT als je de schijf regelmatig rechtstreeks vanuit alle drie de besturingssystemen wilt benaderen. Kies ext4 als de schijf op de Pi aangesloten blijft en open de bestanden dan via SSH, SFTP of een netwerkshare.

Kan ik nog steeds de Partoska-webapp gebruiken?

Ja. Maak en beheer evenementen in de webapp wanneer dat handiger is. p6a gebruikt hetzelfde account en dezelfde evenementen en voegt terminaltoegang en geplande lokale downloads toe.