Sauvegardez vos événements Partoska sur un Raspberry Pi

#raspberry-pi#sauvegarde#cli#automatisation#photos
P17 min de lecture
Image de couverture de l’article « Sauvegardez vos événements Partoska sur un Raspberry Pi »

Imaginez que votre club organise un événement chaque samedi. Les invités ajoutent leurs photos à Partoska, mais personne ne pense à les exporter avant que l'événement suivant accapare toute l'attention. Une sauvegarde de photos avec un Raspberry Pi peut régler le problème discrètement : laissez le Pi à côté d'un SSD externe, exécutez une commande chaque nuit et laissez-le récupérer les nouvelles photos pendant votre sommeil.

La configuration finale repose sur une répartition simple. Partoska collecte les photos des invités au moyen d'un code QR. Le Raspberry Pi en conserve une copie locale sur un espace de stockage que vous contrôlez. Une fois qu'un fichier est arrivé sur le disque externe, sa suppression ultérieure de Partoska n'efface pas cette copie locale.

Ce guide part d'une carte microSD vierge. Il explique comment installer Raspberry Pi OS depuis Windows, macOS ou Linux, préparer un disque externe, installer p6a, se connecter avec OAuth et créer une tâche cron quotidienne.

Matériel nécessaire

Utilisez un Raspberry Pi compatible avec un système d'exploitation 64 bits. Un Pi 3, Pi 4, Pi 5 ou Zero 2 W est assez puissant ; un ancien modèle 32 bits ne peut pas exécuter la version ARM64 officielle actuelle de p6a.

Vous aurez également besoin des éléments suivants :

  • Une carte microSD. Raspberry Pi recommande au moins 16 Go pour Raspberry Pi OS Lite, mais une carte de 32 Go laisse davantage de place aux journaux et aux mises à jour du système.
  • Une alimentation adaptée au Pi.
  • Un SSD, un disque dur ou une clé USB externe offrant assez d'espace pour vos archives.
  • Un lecteur de cartes microSD pour l'ordinateur qui préparera la carte.
  • Un accès Ethernet ou Wi-Fi.

Un SSD est le type de disque externe qui pose le moins de problèmes. Certains disques durs portables consomment plus d'énergie qu'un port USB de Raspberry Pi ne peut en fournir de manière fiable. Si un disque se déconnecte lorsqu'il est sollicité, utilisez un concentrateur USB alimenté ou un disque doté de sa propre alimentation.

Écrivez Raspberry Pi OS sur la carte microSD

L'ancien nom « Raspbian » apparaît encore dans certains tutoriels, mais le système actuel s'appelle Raspberry Pi OS. Utilisez Raspberry Pi Imager plutôt que de formater manuellement la carte. Imager efface le périphérique sélectionné, écrit les partitions et vérifie le résultat dans le même processus.

Installez Raspberry Pi Imager sur l'ordinateur équipé du lecteur de cartes :

  • Sous Windows, téléchargez le programme d'installation correspondant depuis la page des logiciels Raspberry Pi, puis exécutez-le.
  • Sous macOS, téléchargez le programme d'installation et ouvrez-le comme d'habitude.
  • Sous Linux, téléchargez la version x86_64 officielle. Les utilisateurs de Debian ou d'Ubuntu peuvent également exécuter sudo apt install rpi-imager si leur distribution propose le paquet.

Les écrans d'Imager sont identiques sur les trois systèmes :

  1. Sélectionnez votre modèle de Raspberry Pi.
  2. Choisissez Raspberry Pi OS Lite (64-bit). Un environnement de bureau n'apporte rien à une machine qui restera à côté d'un disque et sera administrée par SSH.
  3. Sélectionnez la carte microSD comme périphérique de stockage.
  4. Ouvrez les réglages de personnalisation du système avant d'écrire l'image.

Définissez un nom d'hôte tel que partoska-backup, créez un nom d'utilisateur et un mot de passe, configurez le Wi-Fi si vous n'utilisez pas Ethernet, puis sélectionnez le bon fuseau horaire. Dans Services, activez SSH. L'authentification par clé publique est préférable si vous utilisez déjà des clés SSH ; l'authentification par mot de passe convient à la première configuration sur un réseau domestique de confiance.

Vérifiez une dernière fois le disque sélectionné avant de cliquer sur Write. Imager l'effacera. Débrancher au préalable les autres disques USB est un moyen simple d'éviter de choisir le mauvais.

Laissez Imager terminer la vérification, éjectez la carte, insérez-la dans le Raspberry Pi et branchez le disque externe. Allumez le Pi et attendez une ou deux minutes qu'il rejoigne le réseau.

Connectez-vous par SSH et mettez le Pi à jour

Depuis Terminal sous macOS ou Linux, ou PowerShell sous Windows, connectez-vous avec l'utilisateur créé dans Imager :

ssh your-user@partoska-backup.local

Si l'adresse .local n'est pas résolue, cherchez l'adresse IP du Pi dans votre routeur et utilisez-la :

ssh your-user@192.168.1.50

Mettez Raspberry Pi OS à jour avant toute autre installation :

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

Reconnectez-vous après le redémarrage et vérifiez que le système d'exploitation est bien en 64 bits :

uname -m

Le résultat attendu est aarch64. Si la commande affiche armv7l, le Pi exécute une image 32 bits. Réécrivez la carte avec Raspberry Pi OS Lite (64-bit) avant de poursuivre.

Préparez le disque externe

Une sauvegarde fiable sur un disque externe avec Raspberry Pi commence par un point de montage fixe. Branchez le disque et affichez la liste des périphériques de stockage disponibles :

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

Utilisez la capacité, le modèle et l'étiquette pour identifier la partition externe. Les exemples suivants emploient /dev/sda1, mais votre Pi peut l'appeler /dev/sdb1 ou autrement. La carte microSD apparaît généralement sous /dev/mmcblk0 ; ne la formatez pas.

Si le disque externe contient déjà des fichiers à conserver, n'exécutez pas la commande de formatage. Copiez-les dans un endroit sûr avant de modifier le système de fichiers.

Pour un disque destiné à rester branché au Pi, ext4 est le choix le plus raisonnable :

sudo mkfs.ext4 -L PARTOSKA /dev/sda1

Cette commande efface la partition sélectionnée. Vérifiez à nouveau lsblk avant de l'exécuter. Si vous comptez débrancher le disque pour le lire directement sous Windows ou macOS, formatez-le en exFAT :

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

La commande de formatage exFAT efface elle aussi la partition.

Créez un point de montage fixe et cherchez l'UUID de la partition :

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

Sauvegardez la table des systèmes de fichiers avant de la modifier :

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

Ajoutez une ligne à la fin et remplacez l'UUID d'exemple par la valeur affichée par blkid :

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

Pour exFAT, remplacez le type du système de fichiers par exfat et attribuez à uid et gid les nombres affichés par id -u et id -g — généralement 1000 pour le premier utilisateur :

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

Dans Nano, appuyez sur Ctrl+O pour enregistrer, puis sur Enter pour confirmer le nom du fichier. Appuyez sur Ctrl+X pour fermer l'éditeur. Nano affiche ces raccourcis sous la forme ^O et ^X ; l'accent circonflexe représente la touche Ctrl.

Montez tout ce qui est déclaré dans le fichier et vérifiez que le périphérique attendu est présent :

sudo mount -a findmnt /mnt/partoska

Une vérification réussie avec findmnt ressemble à ceci :

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

TARGET doit être /mnt/partoska, tandis que SOURCE doit indiquer la partition externe identifiée précédemment. Ne continuez pas si findmnt n'affiche rien ou désigne la partition système de la carte microSD. Corrigez d'abord l'UUID ou le type de système de fichiers.

Créez le répertoire destiné aux photos et autorisez votre compte utilisateur normal à l'utiliser :

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

N'exécutez pas chown avec exFAT ; les options de montage uid et gid définissent déjà le propriétaire.

Les exemples d'installation et de tâche cron qui suivent fonctionnent avec les deux systèmes de fichiers dès lors qu'ils sont montés sur /mnt/partoska. La documentation Raspberry Pi sur le stockage externe explique d'autres possibilités pour les disques exFAT et NTFS.

Installez p6a

p6a est l'outil en ligne de commande open source de Partoska. La version actuelle fournit un exécutable Linux ARM64. p6a sur Raspberry Pi fonctionne donc sans compilation. Choisissez une seule méthode d'installation ; vous n'avez pas besoin des trois.

Option A : téléchargez l'exécutable ARM64 avec wget

C'est la méthode la plus légère pour un Pi consacré aux sauvegardes, car elle n'installe ni Node.js ni autre gestionnaire de paquets. La version ci-dessous était la plus récente lors de la publication de cet article. Consultez la page des versions de p6a pour vérifier s'il en existe une nouvelle.

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

Option B : installez p6a avec npm

Raspberry Pi OS n'inclut pas forcément npm. Installez d'abord Node.js et npm, puis le paquet p6a propre à la plateforme :

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

Option C : utilisez Homebrew sous Linux

Homebrew prend en charge Linux ARM64, et la formule Partoska sélectionne le bon exécutable pour Raspberry Pi. Si Homebrew est déjà installé sur le Pi, une seule commande suffit :

brew install partoska/tap/p6a p6a version

Avec les commandes précédentes, p6a version devrait afficher p6a v1.11.5, ou une version ultérieure si elle a été publiée. Une erreur Exec format error signifie généralement que le Pi exécute un système 32 bits ou que le mauvais exécutable a été téléchargé.

Installer Homebrew uniquement pour p6a représente un travail inutile. Il exige des outils de compilation et sa propre arborescence de répertoires, alors que l'exécutable direct accomplit la même tâche. Homebrew reste un bon choix si vous l'utilisez déjà pour gérer d'autres logiciels sur le Pi.

Quelle que soit la méthode retenue, notez le chemin exact de l'exécutable. Le script cron en aura besoin plus tard :

command -v p6a

Le téléchargement direct affiche généralement /usr/local/bin/p6a. Sous Linux, Homebrew renvoie le plus souvent un chemin situé sous /home/linuxbrew/.linuxbrew/bin.

Connectez-vous avec OAuth

Lancez la connexion depuis votre compte utilisateur normal, sans sudo :

p6a login

La commande affiche une URL d'autorisation. Ouvrez-la dans un navigateur, généralement sur l'ordinateur depuis lequel vous êtes connecté par SSH, connectez-vous à Partoska et autorisez l'accès. À la fin du flux OAuth2 avec code d'autorisation, le navigateur affiche un code. Copiez-le, puis collez-le dans l'invite de p6a en attente. Le navigateur n'a pas besoin de s'exécuter sur le Raspberry Pi.

Par défaut, p6a enregistre les identifiants sous votre compte utilisateur, dans ~/.p6a. La tâche cron doit s'exécuter avec ce même utilisateur. Une connexion effectuée avec sudo p6a login enregistrerait les identifiants de root et empêcherait la tâche de l'utilisateur normal de s'authentifier.

Vérifiez la connexion :

p6a list

Vous devriez voir les événements Partoska accessibles à votre compte.

Lancez manuellement la première sauvegarde

Avant de faire confiance à une sauvegarde automatique de photos avec Raspberry Pi, vérifiez le fonctionnement de toute la chaîne :

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

La première commande devrait afficher :

External drive mounted

Si elle n'affiche rien, arrêtez-vous. Le disque externe n'est pas monté au chemin attendu. La commande de synchronisation doit se terminer sans erreur d'authentification, de réseau ou de système de fichiers ; sa sortie exacte dépend du nombre d'événements et de nouveaux fichiers trouvés.

La commande find affiche ensuite jusqu'à dix chemins de fichiers téléchargés. Un résultat réel ressemblera à ceci :

/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 crée un dossier par événement selon le format YYYY-MM-DD Event Name. Les images portent des noms comme IMG_0001.jpg et les vidéos comme MOV_0001.mp4. Le fichier masqué .event.p6a.ini consigne l'événement Partoska et les identifiants de médias associés au dossier ; laissez-le à sa place. head limite la sortie à dix chemins : cette commande sert donc de vérification rapide, pas de décompte des fichiers.

Enfin, df doit afficher la partition externe montée sur /mnt/partoska. Les capacités différeront, mais les éléments importants sont la dernière colonne et le système de fichiers :

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

Size, Used et Avail indiquent respectivement l'espace total, utilisé et disponible sur le disque. Le système de fichiers doit correspondre à la partition externe identifiée avec lsblk, par exemple /dev/sda1. Si cette commande affiche /dev/mmcblk0p2, /dev/root ou une autre partition système de la carte microSD, arrêtez-vous : le disque USB n'est pas monté et les photos finiraient sur la carte système du Raspberry Pi.

Après ces vérifications, exécutez une deuxième fois la commande de synchronisation. Elle doit ignorer les fichiers déjà enregistrés localement et ne récupérer que les nouveaux.

Choisissez les événements à synchroniser

La commande principale accepte deux filtres d'événements :

# Tous les événements accessibles au compte p6a sync -t /mnt/partoska/events # Uniquement les événements créés par ce compte p6a sync -t /mnt/partoska/events --owner-only # Uniquement les événements marqués comme favoris p6a sync -t /mnt/partoska/events --favorite-only # Les événements qui vous appartiennent et sont marqués comme favoris p6a sync -t /mnt/partoska/events -o -f

L'option courte -f désigne les événements favoris. Elle ne concerne pas les photos favorites à l'intérieur d'un événement. Pour le Raspberry Pi d'un club ou d'un lieu de réception, --owner-only est un bon réglage par défaut, car il évite d'archiver les événements de tiers auxquels quelqu'un aurait participé en tant qu'invité.

Protégez la sauvegarde avec une vérification

Une ligne cron qui exécute simplement p6a sync présente un mode de panne désagréable. Si le disque externe est absent mais que /mnt/partoska existe toujours comme répertoire ordinaire, Linux peut écrire les fichiers téléchargés sur la carte microSD. Un nombre suffisant de vidéos finira par la remplir.

Utilisez un petit script qui refuse de continuer si le disque externe n'est pas monté. Créez un répertoire bin personnel :

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

Collez le script suivant et adaptez P6A_BIN au chemin renvoyé par 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

Enregistrez le fichier et fermez l'éditeur.

Rendez-le exécutable et testez-le une fois :

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

Le mode 700 signifie que seul le propriétaire peut lire, modifier ou exécuter le script. Si un groupe Linux de confiance doit également pouvoir le lire et l'exécuter, utilisez chmod 750 : le propriétaire obtient les droits de lecture, d'écriture et d'exécution ; le groupe, ceux de lecture et d'exécution ; personne d'autre n'obtient d'accès.

Ne planifiez jamais un script qui ne réussit pas ce test manuel.

Planifiez la tâche cron quotidienne

La sauvegarde avec cron sur Raspberry Pi peut désormais appeler le script protégé. Vérifiez que le service cron est installé et démarre avec le système :

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

Ouvrez la crontab de votre utilisateur :

crontab -e

Ajoutez cette ligne pour exécuter la sauvegarde tous les jours à 3 h 15, selon le fuseau horaire configuré sur le Pi :

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

Enregistrez et fermez l'éditeur, puis vérifiez que cron a accepté l'entrée :

crontab -l

La commande doit afficher la planification enregistrée :

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

Après la première exécution planifiée, examinez le journal et le disque :

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

Cron ne réessaiera pas à 3 h 16 si le Pi était éteint à 3 h 15. Ce n'est pas un problème ici : la prochaine synchronisation réussie récupérera les fichiers qui n'ont pas encore été téléchargés. Après une longue interruption, lancez le script manuellement si vous ne voulez pas attendre la nuit suivante.

Que se passe-t-il lorsqu'une photo est supprimée de Partoska ?

p6a sync effectue un téléchargement unidirectionnel et cumulatif, pas un miroir exact. Il télécharge les fichiers en ligne absents du disque et ignore ceux qui sont déjà présents sur le disque externe. Il ne supprime pas une photo locale simplement parce que cette photo, ou son événement entier, n'est plus disponible en ligne.

Cette distinction est importante. Une fois que la tâche nocturne a téléchargé une photo, sa suppression de Partoska n'affecte pas la copie présente sur le Raspberry Pi. p6a ne peut cependant pas récupérer une photo supprimée avant la première synchronisation réussie. Laissez donc le Pi en fonctionnement pendant toute la période de conservation de l'événement.

Le changement de nom d'un événement se comporte différemment d'une suppression. Si un événement en ligne est renommé, p6a peut renommer son dossier local tout en conservant les fichiers téléchargés à l'intérieur.

Un disque externe placé à côté d'un Raspberry Pi reste un disque unique, et les disques tombent en panne. Pour les photos irremplaçables, conservez une autre copie sur un second disque ou dans un emplacement distant.

Partoska continue de gérer l'expérience des invités

Cette configuration ne change rien à la participation des invités. Ils scannent le code QR de l'événement et importent leurs photos depuis leur navigateur. Ils ne voient ni le Raspberry Pi, ni p6a, ni cron. Le Pi gère uniquement les archives de l'organisateur après l'arrivée des fichiers dans Partoska.

L'application web reste également disponible pour créer des événements, les modérer et parcourir les photos. Cette méthode de sauvegarde de Partoska est utile lorsque les copies locales doivent être effectuées régulièrement sans nouveau rappel. Si vous voulez aussi créer des événements, générer des codes QR ou travailler avec un assistant IA depuis le terminal, lisez le guide de la CLI et de l'IA de Partoska.

Les petits événements peuvent tester tout le système avec l'offre gratuite ; les limites de stockage et de conservation dépendent de l'offre choisie.

Créez un événement Partoska

Vérifiez ensuite la synchronisation manuelle et laissez le Pi assurer le service de nuit.

Questions fréquentes

Quel Raspberry Pi utiliser pour sauvegarder les photos de Partoska ?

Choisissez un modèle capable d'exécuter Raspberry Pi OS en 64 bits, comme un Pi 3, Pi 4, Pi 5 ou Zero 2 W. La version actuelle de p6a pour Raspberry Pi cible ARM64. Un Pi 4 ou Pi 5 avec un SSD externe offre la configuration la moins problématique, mais la synchronisation de photos exige peu de puissance processeur.

Le Raspberry Pi doit-il rester allumé toute la journée ?

Non. Il doit simplement disposer d'une alimentation, d'un accès au réseau et du disque externe à l'heure prévue pour la sauvegarde. Le laisser allumé est plus simple et consomme peu d'électricité. Si une exécution est manquée, la synchronisation suivante télécharge les fichiers qui ne sont pas encore présents localement.

Que télécharge p6a sync -f ?

Cette commande télécharge les événements que vous avez marqués comme favoris. Elle ne limite pas le téléchargement aux photos favorites contenues dans ces événements. Associez -f à -o si vous voulez uniquement les événements qui vous appartiennent et sont aussi marqués comme favoris.

Cron remplira-t-il la carte microSD si le disque USB est débranché ?

Le script de ce guide vérifie mountpoint avant de commencer. Si le disque externe est absent, il s'arrête avec une erreur et n'écrit aucun fichier. Ne supprimez pas cette vérification.

Les photos supprimées de Partoska restent-elles sur le Raspberry Pi ?

Oui, à condition que p6a les ait téléchargées avant leur suppression en ligne. La synchronisation ne répercute pas les suppressions distantes sur les fichiers locaux. Si une photo a disparu avant que le Pi puisse la copier, elle n'a jamais atteint les archives locales.

Puis-je brancher directement le disque d'archives sur Windows ou macOS ?

Utilisez exFAT si vous avez besoin de lire régulièrement le disque directement depuis les trois systèmes d'exploitation. Préférez ext4 lorsque le disque reste branché au Pi ; accédez alors aux fichiers par SSH, SFTP ou un partage réseau.

Puis-je continuer à utiliser l'application web Partoska ?

Oui. Créez et modérez les événements dans l'application web lorsque cela vous convient mieux. p6a utilise le même compte et les mêmes événements, tout en ajoutant un accès par le terminal et des téléchargements locaux planifiés.