Haz copias de seguridad de eventos de Partoska en una Raspberry Pi

#raspberry-pi#copia-seguridad#cli#automatización#fotos
P17 min de lectura
Imagen de portada del artículo "Haz copias de seguridad de eventos de Partoska en una Raspberry Pi".

Imagina que tu club organiza un evento cada sábado. Los invitados añaden fotos a Partoska, pero nadie recuerda exportarlas antes de que el siguiente evento acapare toda la atención. Una copia de seguridad de fotos con Raspberry Pi puede resolverlo en silencio: deja la Pi junto a un SSD externo, ejecuta un comando cada noche y deja que recopile las fotos nuevas mientras duermes.

La configuración final presenta una división sencilla del trabajo. Partoska recopila las fotos de los invitados mediante un código QR. La Raspberry Pi guarda una copia local en un almacenamiento que controlas. Cuando un archivo llega a la unidad externa, eliminarlo más tarde de Partoska no borra esa copia local.

Esta guía comienza con una tarjeta microSD vacía. Explica cómo instalar Raspberry Pi OS desde Windows, macOS y Linux, preparar una unidad externa, instalar p6a, completar el inicio de sesión mediante OAuth y crear una tarea cron diaria.

¿Qué necesitas?

Utiliza una Raspberry Pi compatible con un sistema operativo de 64 bits. Una Pi 3, Pi 4, Pi 5 o Zero 2 W tiene potencia suficiente; un modelo antiguo de 32 bits no puede ejecutar la compilación oficial ARM64 actual de p6a.

También necesitarás:

  • Una tarjeta microSD. Raspberry Pi recomienda al menos 16 GB para Raspberry Pi OS Lite, aunque una tarjeta de 32 GB deja más espacio para registros y actualizaciones del sistema.
  • Una fuente de alimentación adecuada para la Pi.
  • Un SSD, disco duro o unidad flash USB externa con capacidad suficiente para el archivo.
  • Un lector de tarjetas microSD para el ordenador que preparará la tarjeta.
  • Acceso mediante Ethernet o Wi-Fi.

Un SSD es la unidad externa menos problemática. Algunos discos duros portátiles consumen más energía de la que un puerto USB de Raspberry Pi puede proporcionar de forma fiable; si un disco se desconecta bajo carga, utiliza un concentrador USB con alimentación o una unidad con su propia fuente.

Escribe Raspberry Pi OS en la tarjeta microSD

El antiguo nombre «Raspbian» todavía aparece en algunos tutoriales, pero el sistema operativo actual se llama Raspberry Pi OS. Utiliza Raspberry Pi Imager en vez de formatear la tarjeta manualmente. Imager borra el dispositivo seleccionado, escribe las particiones y verifica el resultado dentro del mismo proceso.

Instala Raspberry Pi Imager en el ordenador que tenga el lector de tarjetas:

  • En Windows, descarga el instalador correspondiente desde la página de software de Raspberry Pi y ejecútalo.
  • En macOS, descarga su instalador y ábrelo de la forma habitual.
  • En Linux, descarga la compilación oficial x86_64. Quienes utilicen Debian o Ubuntu también pueden instalarla con sudo apt install rpi-imager cuando la distribución ofrezca el paquete.

Las pantallas de Imager son iguales en los tres sistemas:

  1. Selecciona tu modelo de Raspberry Pi.
  2. Elige Raspberry Pi OS Lite (64-bit). Un entorno de escritorio no aporta nada a un equipo que vivirá junto a un disco y se gestionará mediante SSH.
  3. Selecciona la tarjeta microSD como dispositivo de almacenamiento.
  4. Abre la personalización del sistema operativo antes de escribir la imagen.

Establece un nombre de host como partoska-backup, crea un nombre de usuario y una contraseña, configura la Wi-Fi si no utilizas Ethernet y elige la zona horaria correcta. En Servicios, activa SSH. Es preferible la autenticación con clave pública si ya usas claves SSH; la autenticación con contraseña sirve para la primera configuración en una red doméstica de confianza.

Comprueba de nuevo la unidad seleccionada antes de pulsar Write. Imager la borrará. Desconectar primero otros discos USB es una forma sencilla de evitar elegir el equivocado.

Deja que Imager complete la verificación, expulsa la tarjeta, insértala en la Raspberry Pi y conecta la unidad externa. Enciende la Pi y espera uno o dos minutos a que se una a la red.

Conéctate mediante SSH y actualiza la Pi

Desde Terminal en macOS o Linux, o PowerShell en Windows, conéctate con el usuario que creaste en Imager:

ssh your-user@partoska-backup.local

Si la dirección .local no se resuelve, busca la dirección IP de la Pi en el router y utilízala:

ssh your-user@192.168.1.50

Actualiza Raspberry Pi OS antes de instalar nada más:

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

Vuelve a conectarte después del reinicio y confirma que el sistema operativo es de 64 bits:

uname -m

El resultado esperado es aarch64. Si muestra armv7l, la Pi ejecuta una imagen de 32 bits; vuelve a escribir la tarjeta con Raspberry Pi OS Lite (64-bit) antes de continuar.

Prepara la unidad externa

Una copia de seguridad en una unidad externa con Raspberry Pi fiable empieza con un punto de montaje fijo. Conecta la unidad y enumera los dispositivos de almacenamiento disponibles:

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

Utiliza el tamaño, el modelo y la etiqueta para identificar la partición externa. Los ejemplos siguientes emplean /dev/sda1, pero tu Pi puede llamarla /dev/sdb1 o de otro modo. La microSD suele aparecer como /dev/mmcblk0; no la formatees.

Si la unidad externa ya contiene archivos que quieres conservar, omite el comando de formateo. Copia esos archivos a un lugar seguro antes de cambiar el sistema de archivos.

Para un disco que permanecerá conectado a la Pi, ext4 es la opción sensata:

sudo mkfs.ext4 -L PARTOSKA /dev/sda1

Ese comando borra la partición seleccionada. Vuelve a comprobar lsblk antes de ejecutarlo. Si pretendes desconectar la unidad y leerla directamente en Windows o macOS, formatéala como exFAT:

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

El comando de formateo exFAT también borra la partición.

Crea un punto de montaje fijo y busca el UUID de la partición:

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

Haz una copia de seguridad de la tabla de sistemas de archivos antes de editarla:

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

Añade una línea al final y sustituye el UUID de ejemplo por el valor que imprimió blkid:

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

Para exFAT, cambia el tipo de sistema de archivos a exfat y asigna a uid y gid los números que imprimen id -u e id -g (normalmente 1000 para el primer usuario):

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

En Nano, pulsa Ctrl+O para guardar y después Enter para confirmar el nombre del archivo. Pulsa Ctrl+X para cerrar el editor. Nano muestra estos atajos como ^O y ^X; el acento circunflejo representa la tecla Ctrl.

Monta todo lo declarado en el archivo y confirma que está presente el dispositivo esperado:

sudo mount -a findmnt /mnt/partoska

Una comprobación correcta con findmnt se parece a esta:

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

TARGET debe ser /mnt/partoska, mientras que SOURCE debe mostrar la partición externa identificada antes. No continúes si findmnt no imprime nada o nombra la partición del sistema de la microSD. Corrige primero el UUID o el tipo de sistema de archivos.

Crea el directorio para las fotos y concede permiso a tu cuenta normal para utilizarlo:

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

Omite el comando chown en exFAT; las opciones de montaje uid y gid proporcionan la propiedad.

Los ejemplos restantes de instalación y cron funcionan con cualquiera de los dos sistemas de archivos una vez montado en /mnt/partoska. La documentación de Raspberry Pi sobre almacenamiento externo explica otras opciones para unidades exFAT y NTFS.

Instala p6a

p6a es la herramienta de línea de comandos de código abierto de Partoska. La versión actual ofrece un binario ARM64 para Linux, de modo que p6a en Raspberry Pi funciona sin que tengas que compilarlo. Elige un método de instalación; no necesitas los tres.

Opción A: descarga el binario ARM64 con wget

Esta es la ruta más ligera para una Pi dedicada a las copias de seguridad, porque no instala Node.js ni otro gestor de paquetes. La versión siguiente era la actual cuando se publicó este artículo; consulta la página de versiones de p6a para ver si hay un número más reciente.

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

Opción B: instala mediante npm

Raspberry Pi OS no incluye necesariamente npm. Instala primero Node.js y npm, y después el paquete de p6a específico para la plataforma:

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

Opción C: utiliza Homebrew en Linux

Homebrew admite Linux ARM64, y la fórmula de Partoska selecciona el binario correcto para Raspberry Pi. Si Homebrew ya está instalado en la Pi, solo necesitas un comando:

brew install partoska/tap/p6a p6a version

Con los comandos anteriores, p6a version debería imprimir p6a v1.11.5, o una versión más reciente si ya se ha publicado. Un error Exec format error suele significar que la Pi ejecuta un sistema operativo de 32 bits o que se descargó el binario equivocado.

Instalar Homebrew solo para p6a supone trabajo innecesario. Necesita herramientas de compilación y su propio árbol de directorios, mientras que el binario directo hace el mismo trabajo. Homebrew sigue siendo una buena elección si ya lo utilizas para gestionar otro software en la Pi.

Sea cual sea la ruta elegida, anota la ruta exacta del binario. El script de cron la necesitará más adelante:

command -v p6a

La descarga directa suele imprimir /usr/local/bin/p6a. Homebrew en Linux suele mostrar una ruta bajo /home/linuxbrew/.linuxbrew/bin.

Inicia sesión mediante OAuth

Ejecuta el inicio de sesión con tu cuenta normal, sin sudo:

p6a login

El comando imprime una URL de autorización. Ábrela en un navegador, normalmente en el ordenador desde el que te conectaste por SSH, inicia sesión en Partoska y aprueba el acceso. Al terminar el flujo de código de autorización OAuth2, el navegador muestra un código; cópialo al portapapeles y pégalo en la solicitud de p6a que está esperando. El navegador no tiene que ejecutarse en la Raspberry Pi.

p6a guarda las credenciales bajo tu cuenta de usuario, en ~/.p6a de forma predeterminada. La tarea cron debe ejecutarse como ese mismo usuario. Iniciar sesión con sudo p6a login guardaría las credenciales de root e impediría que la tarea del usuario normal se autenticara.

Comprueba la conexión:

p6a list

Deberías ver los eventos de Partoska disponibles para tu cuenta.

Ejecuta a mano la primera copia de seguridad

Antes de confiar en una copia automática de fotos con Raspberry Pi, demuestra que funciona toda la ruta:

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

El primer comando debería imprimir:

External drive mounted

Si no imprime nada, detente. La unidad externa no está montada en la ruta esperada. El comando de sincronización debería terminar sin errores de autenticación, red o sistema de archivos; su salida exacta depende del número de eventos y archivos nuevos que encuentre.

Después, el comando find imprime hasta diez rutas de archivos descargados. Un resultado real será similar a este:

/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 crea una carpeta por evento con el formato YYYY-MM-DD Event Name. Las imágenes reciben nombres como IMG_0001.jpg y los vídeos utilizan MOV_0001.mp4. El archivo oculto .event.p6a.ini registra qué evento de Partoska y qué identificadores de medios pertenecen a la carpeta; déjalo donde está. head limita la salida a diez rutas, por lo que este comando sirve como inspección rápida, no como recuento de archivos.

Por último, df debería mostrar la partición externa montada en /mnt/partoska. Las capacidades serán diferentes, pero lo importante es la última columna y el sistema de archivos:

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

Size, Used y Avail muestran el espacio total, ocupado y disponible de la unidad. El sistema de archivos debe coincidir con la partición externa que identificaste mediante lsblk, como /dev/sda1. Si este comando muestra /dev/mmcblk0p2, /dev/root u otra partición del sistema de la microSD, detente: la unidad USB no está montada y las fotos acabarían en la tarjeta del sistema de la Raspberry Pi.

Después de estas comprobaciones, ejecuta por segunda vez el comando de sincronización. Debería omitir los archivos ya registrados localmente y obtener solo los nuevos.

Elige qué eventos quieres sincronizar

El comando principal acepta dos filtros de eventos:

# Todos los eventos a los que puede acceder la cuenta p6a sync -t /mnt/partoska/events # Solo los eventos creados por esta cuenta p6a sync -t /mnt/partoska/events --owner-only # Solo los eventos marcados como favoritos p6a sync -t /mnt/partoska/events --favorite-only # Eventos que son propios y están marcados como favoritos p6a sync -t /mnt/partoska/events -o -f

La opción corta -f significa eventos favoritos. No se refiere a las fotos favoritas dentro de un evento. Para una Raspberry Pi de un club o recinto, --owner-only es un buen valor predeterminado porque evita archivar eventos ajenos a los que alguien se haya unido como invitado.

Protege la copia con una comprobación

Una línea cron que simplemente ejecute p6a sync tiene un modo de fallo desagradable. Si la unidad externa está ausente, pero /mnt/partoska sigue existiendo como directorio normal, Linux puede escribir las descargas en la tarjeta microSD. Una cantidad suficiente de vídeos acabará llenándola.

Utiliza un pequeño script que se niegue a continuar si el disco externo no está montado. Crea un directorio bin personal:

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

Pega este script y adapta P6A_BIN a la ruta que devolvió 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

Guarda y cierra el editor.

Hazlo ejecutable y pruébalo una vez:

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

El permiso 700 significa que solo el propietario puede leer, modificar o ejecutar el script. Si un grupo de Linux de confianza también debe poder leerlo y ejecutarlo, utiliza chmod 750: el propietario obtiene permisos de lectura, escritura y ejecución; el grupo, lectura y ejecución; y nadie más recibe acceso.

No programes un script que no supere esta prueba manual.

Programa la tarea cron diaria

La copia de seguridad con cron en Raspberry Pi ya puede llamar al script protegido. Asegúrate de que el servicio cron exista y arranque durante el inicio:

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

Abre el crontab de tu usuario:

crontab -e

Añade esta línea para ejecutar la copia todos los días a las 03:15 según la zona horaria configurada en la Pi:

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

Guarda y cierra el editor, y confirma después que cron ha aceptado la entrada:

crontab -l

El comando debería imprimir el horario guardado:

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

Después de la primera ejecución programada, inspecciona el registro y la unidad:

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

Cron no vuelve a intentarlo a las 03:16 si la Pi estaba apagada a las 03:15. Aquí no supone un problema; la siguiente sincronización correcta obtiene los archivos que todavía no se hayan descargado. Ejecuta el script manualmente después de una interrupción larga si no quieres esperar hasta la noche siguiente.

¿Qué ocurre cuando se elimina una foto de Partoska?

p6a sync realiza una descarga unidireccional y aditiva, no un espejo exacto. Descarga los archivos en línea que falten y omite los que ya están en la unidad externa. No elimina una foto local simplemente porque esa foto, o todo su evento, ya no aparezca en línea.

Esta distinción importa. Cuando la tarea nocturna ha descargado una foto, eliminarla de Partoska no afecta a la copia de la Raspberry Pi. p6a no puede recuperar una foto eliminada antes de la primera sincronización correcta, así que mantén la Pi en funcionamiento durante el periodo de conservación del evento.

Los cambios de nombre de eventos son distintos de las eliminaciones. Si un evento en línea recibe un nombre nuevo, p6a puede cambiar el nombre de su carpeta local y mantener dentro los archivos descargados.

Un disco externo junto a una Raspberry Pi sigue siendo un solo disco, y los discos fallan. Para fotos que no puedan reemplazarse, copia el archivo también en otra unidad o un destino externo.

Partoska sigue ocupándose de la experiencia de los invitados

Nada de esta configuración cambia la forma en la que participa la gente. Los invitados escanean el código QR del evento y suben desde su navegador; no ven la Raspberry Pi, p6a ni cron. La Pi solo gestiona el archivo del organizador después de que los archivos lleguen a Partoska.

La aplicación web también sigue disponible para crear eventos, moderar y explorar. Este proceso de copia de seguridad de Partoska resulta útil cuando las copias locales deben realizarse repetidamente sin otro recordatorio. Si también quieres crear eventos, generar códigos QR o trabajar con un asistente de IA desde el terminal, lee la guía sobre la CLI y la IA de Partoska.

Los eventos pequeños pueden probar todo el sistema con el plan gratuito; los límites de almacenamiento y conservación varían según el plan.

Crea un evento de Partoska

Después, confirma la sincronización manual y deja que la Pi se encargue del turno de noche.

Preguntas frecuentes

¿Qué Raspberry Pi debo utilizar para una copia de seguridad de fotos de Partoska?

Utiliza un modelo capaz de ejecutar Raspberry Pi OS de 64 bits, como una Pi 3, Pi 4, Pi 5 o Zero 2 W. La versión actual de p6a para Raspberry Pi está dirigida a ARM64. Una Pi 4 o Pi 5 con un SSD externo ofrece la configuración menos problemática, pero sincronizar fotos no requiere mucha potencia de CPU.

¿La Raspberry Pi tiene que permanecer encendida todo el día?

No. Necesita alimentación, acceso a la red y la unidad externa en el momento programado para la copia. Dejarla encendida es más sencillo y consume poca electricidad. Si se pierde una ejecución, la siguiente sincronización descarga los archivos que aún no estén en local.

¿Qué descarga p6a sync -f?

Descarga los eventos que hayas marcado como favoritos. No restringe la descarga a las fotos favoritas dentro de esos eventos. Combina -f con -o si quieres eventos que sean tuyos y también estén marcados como favoritos.

¿Cron llenará la tarjeta microSD si se desconecta la unidad USB?

El script de esta guía comprueba mountpoint antes de empezar. Si falta el disco externo, termina con un error y no escribe nada. No elimines esa comprobación.

¿Las fotos eliminadas de Partoska permanecen en la Raspberry Pi?

Sí, siempre que p6a las haya descargado antes de eliminarlas en línea. La sincronización no concilia las eliminaciones remotas borrando archivos locales. Si una foto desapareció antes de que la Pi la copiara, nunca llegó al archivo local.

¿Puedo conectar directamente la unidad de archivo a Windows o macOS?

Utiliza exFAT si importa el acceso directo habitual desde los tres sistemas operativos. Emplea ext4 cuando el disco vaya a permanecer conectado a la Pi; accede a los archivos mediante SSH, SFTP o un recurso compartido en red.

¿Puedo seguir utilizando la aplicación web de Partoska?

Sí. Crea y modera eventos en la aplicación web cuando resulte más cómodo. p6a utiliza la misma cuenta y los mismos eventos, y añade acceso desde el terminal y descargas locales programadas.