Zálohujte fotky z Pártošky na Raspberry Pi

#raspberry-pi#záloha#cli#automatizácia#fotky
P13 min. čítania
Obrázok k blogovému článku „Zálohujte fotky z Pártošky na Raspberry Pi“.

Predstavte si klub, ktorý každú sobotu organizuje zápas. Hostia pridávajú fotky do Pártošky, ale pred ďalším kolom si na ich stiahnutie nikto nespomenie. Záloha fotiek na Raspberry Pi to vyrieši bez ďalšej úlohy v kalendári. Malý počítač necháte vedľa externého SSD a každú noc stiahne nové súbory.

Pártoška ďalej zbiera fotky od hostí cez QR kód. Raspberry Pi ukladá kópiu na disk, ktorý máte doma alebo v klubovni. Akonáhle sa súbor raz stiahne, jeho neskoršie zmazanie z Pártošky miestnu kópiu neodstráni.

Začneme prázdnou microSD kartou. Nainštalujeme Raspberry Pi OS, pripravíme externý disk, pridáme nástroj p6a, dokončíme prihlásenie cez OAuth a nakoniec nastavíme každodennú úlohu v crone.

Čo budete potrebovať?

Vyberte Raspberry Pi, ktoré vie spustiť 64-bitový systém. Pi 3, Pi 4, Pi 5 alebo Zero 2 W má na túto úlohu dosť výkonu. Starší 32-bitový model súčasnú oficiálnu zostavu p6a pre ARM64 nespustí.

Pripravte si tiež:

  • microSD kartu. Pre Raspberry Pi OS Lite výrobca odporúča aspoň 16 GB, ale 32 GB nechá viac miesta na aktualizácie a logy;
  • zodpovedajúci napájací zdroj;
  • externý SSD, pevný disk alebo USB flash disk s dostatočnou kapacitou;
  • čítačku microSD kariet pre počítač, na ktorom kartu pripravíte;
  • pripojenie cez Ethernet alebo Wi-Fi.

Najmenej starostí býva s SSD. Niektoré prenosné pevné disky si z USB berú viac prúdu, než im Raspberry Pi spoľahlivo dodá. Ak sa disk pri práci odpája, použite napájaný USB rozbočovač alebo disk s vlastným zdrojom.

Zapíšte Raspberry Pi OS na microSD kartu

V starších návodoch narazíte na názov „Raspbian“. Dnešný systém sa volá Raspberry Pi OS. Kartu netreba vopred ručne formátovať; Raspberry Pi Imager vybrané úložisko vymaže, vytvorí oddiely, zapíše systém a výsledok overí.

Na počítač s čítačkou kariet nainštalujte Raspberry Pi Imager:

  • Vo Windows stiahnite inštalátor pre Windows zo stránky Raspberry Pi a spustite ho.
  • V macOS stiahnite verziu pre macOS a bežne ju nainštalujte.
  • V Linuxe použite oficiálnu zostavu pre x86_64. V Debiane alebo Ubuntu môže byť k dispozícii aj príkaz sudo apt install rpi-imager.

Ďalší postup vyzerá vo všetkých systémoch rovnako:

  1. Vyberte svoj model Raspberry Pi.
  2. Zvoľte Raspberry Pi OS Lite (64-bit). Grafické prostredie na krabičke, ktorá bude stáť vedľa disku a obsluhovať sa cez SSH, ničomu nepomôže.
  3. Ako úložisko vyberte microSD kartu.
  4. Pred zápisom otvorte nastavenia systému.

Nastavte názov zariadenia, napríklad partoska-backup, vytvorte používateľa a heslo, prípadne vyplňte Wi-Fi a zvoľte správne časové pásmo. V časti Services zapnite SSH. Ak už používate SSH kľúče, zvoľte prihlásenie verejným kľúčom. Heslo pre prvú inštaláciu v dôveryhodnej domácej sieti tiež postačí.

Skôr než stlačíte Write, ešte raz skontrolujte vybrané úložisko. Imager ho vymaže. Najjednoduchšia poistka je vopred odpojiť ostatné USB disky, ktoré počas inštalácie nepotrebujete.

Počkajte, kým Imager dokončí aj overenie zápisu. Kartu bezpečne vysuňte, vložte ju do Raspberry Pi a pripojte externý disk. Po zapnutí počkajte minútu alebo dve, kým sa Pi objaví v sieti.

Pripojte sa cez SSH a aktualizujte systém

V Termináli na macOS či Linuxe alebo v PowerShelli vo Windows použite meno účtu z Imageru:

ssh your-user@partoska-backup.local

Ak adresa s koncovkou .local nefunguje, zistite IP adresu Raspberry Pi v administrácii routera:

ssh your-user@192.168.1.50

Najprv aktualizujte systém:

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

Po reštarte sa znova pripojte a overte architektúru:

uname -m

Príkaz má vypísať aarch64. Výsledok armv7l znamená, že beží 32-bitový systém. V takom prípade zapíšte na kartu Raspberry Pi OS Lite (64-bit) a zatiaľ nepokračujte ďalej.

Pripravte externý disk

Externý disk pre Raspberry Pi musí mať stály adresár, do ktorého ho Linux po každom štarte pripojí. Najprv si vypíšte dostupné úložiská:

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

Externý oddiel spoznáte podľa kapacity, modelu a názvu. V príkladoch používame /dev/sda1, ale u vás sa môže volať /dev/sdb1. MicroSD karta zvyčajne začína /dev/mmcblk0; tú neformátujte.

Ak už na externom disku niečo máte, príkaz na formátovanie preskočte. Skôr než zmeníte súborový systém, uložte si potrebné dáta inam.

Pre disk, ktorý zostane pri Raspberry Pi, odporúčame ext4:

sudo mkfs.ext4 -L PARTOSKA /dev/sda1

Príkaz vymaže celý vybraný oddiel. Pred spustením preto znova skontrolujte výpis lsblk. Ak chcete disk pravidelne odpájať a čítať priamo vo Windows alebo macOS, použite exFAT:

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

Aj druhý príkaz oddiel vymaže.

Vytvorte adresár na pripojenie disku a zistite UUID oddielu:

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

Pred úpravou súboru fstab si urobte jeho kópiu:

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

Na koniec pridajte nasledujúci riadok. Ukážkové UUID nahraďte hodnotou, ktorú vypísal príkaz blkid:

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

Pre exFAT zmeňte typ na exfat. Čísla uid a gid zistíte príkazmi id -u a id -g; prvý používateľ máva v oboch prípadoch hodnotu 1000:

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

V editore Nano súbor uložíte pomocou Ctrl+O, názov potvrdíte klávesou Enter a editor zatvoríte cez Ctrl+X. Nano zobrazuje tieto skratky ako ^O a ^X; strieška znamená kláves Ctrl.

Načítajte údaje z fstab a overte pripojenie disku:

sudo mount -a findmnt /mnt/partoska

Správny výsledok vyzerá približne takto:

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

V stĺpci TARGET musí byť /mnt/partoska; SOURCE má zodpovedať externému oddielu, ktorý ste predtým našli. Ak findmnt nevypíše nič alebo ukáže systémový oddiel z microSD karty, nepokračujte. Opravte UUID alebo typ súborového systému.

Vytvorte priečinok pre fotky a dajte svojmu účtu právo doň zapisovať:

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

Na exFAT príkaz chown vynechajte. Vlastníka už určujú voľby uid a gid v súbore fstab.

Ďalšie príkazy fungujú s ext4 aj exFAT, pokiaľ je disk pripojený v /mnt/partoska. Ďalšie varianty pripojenia popisuje oficiálna dokumentácia externých úložísk.

Nainštalujte p6a

p6a je open-source nástroj Pártošky pre príkazový riadok. Súčasná verzia ponúka hotový súbor pre 64-bitový Linux na procesoroch ARM, takže p6a na Raspberry Pi nemusíte kompilovať. Vyberte si jeden spôsob inštalácie; všetky tri nepotrebujete.

Možnosť A: stiahnutie cez wget

Na samostatnom zálohovacom Pi ide o najkratšiu cestu. Nemusíte inštalovať Node.js ani ďalšieho správcu balíkov. Verzia v príklade bola aktuálna pri vydaní článku; novšie číslo si môžete overiť na stránke s vydaniami p6a.

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

Možnosť B: inštalácia cez npm

Raspberry Pi OS nemusí mať npm nainštalované. Najprv preto pridajte Node.js a npm, potom samotný balík p6a:

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

Možnosť C: Homebrew na Linuxe

Homebrew podporuje 64-bitový Linux na ARM a recept Pártošky vyberie správny súbor pre Raspberry Pi. Ak už Homebrew používate, stačí:

brew install partoska/tap/p6a p6a version

Príkaz p6a version má pri uvedených príkladoch vypísať p6a v1.11.5, prípadne novšie vydanie. Chyba Exec format error väčšinou ukazuje na 32-bitový systém alebo nesprávne stiahnutú verziu.

Inštalovať Homebrew iba kvôli p6a nemá zmysel. Potrebuje vývojové nástroje a vlastnú adresárovú štruktúru, zatiaľ čo priame stiahnutie urobí rovnakú prácu. Ak cez Homebrew spravujete aj ďalší softvér, pokojne ho použite.

Nakoniec si poznamenajte úplnú cestu k programu. Budete ju potrebovať v skripte pre cron:

command -v p6a

Pri priamom stiahnutí zvyčajne uvidíte /usr/local/bin/p6a. Homebrew na Linuxe zvyčajne vráti cestu pod /home/linuxbrew/.linuxbrew/bin.

Prihláste sa cez OAuth

Prihlásenie spustite pod bežným účtom, bez sudo:

p6a login

Príkaz vypíše autorizačnú adresu. Otvorte ju v prehliadači, najlepšie na počítači, z ktorého ste pripojení cez SSH, prihláste sa do Pártošky a povoľte prístup. Prehliadač potom ukáže autorizačný kód. Skopírujte ho do schránky a vložte do čakajúceho príkazu p6a. Prehliadač nemusí bežať na Raspberry Pi.

p6a uloží prihlasovacie údaje do domovského adresára vášho účtu, štandardne do ~/.p6a. Cron preto musí bežať pod rovnakým používateľom. Príkaz sudo p6a login by údaje uložil používateľovi root a bežný používateľ by ich nenašiel.

Spojenie overíte takto:

p6a list

Vo výpise sa majú objaviť akcie z Pártošky, ku ktorým máte prístup.

Prvú zálohu spustite ručne

Skôr než sa spoľahnete na automatickú zálohu fotiek, prejdite celý postup ruč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

Prvý príkaz má vypísať:

External drive mounted

Ak sa neobjaví nič, zastavte sa. Externý disk nie je pripojený v správnom adresári. Príkaz p6a sync má dobehnúť bez chyby prihlásenia, siete alebo súborového systému. Presný výpis závisí od počtu akcií a nových súborov.

Príkaz find zobrazí najviac desať stiahnutých súborov. Výsledok môže vyzerať takto:

/mnt/partoska/events/2026-07-18 Letný zápas/.event.p6a.ini /mnt/partoska/events/2026-07-18 Letný zápas/IMG_0001.jpg /mnt/partoska/events/2026-07-18 Letný zápas/IMG_0002.jpg /mnt/partoska/events/2026-07-18 Letný zápas/MOV_0001.mp4

Pre každú akciu vznikne priečinok vo formáte RRRR-MM-DD Názov akcie. Fotky dostanú názvy ako IMG_0001.jpg, videá napríklad MOV_0001.mp4. Skrytý súbor .event.p6a.ini uchováva väzbu medzi priečinkom a identifikátormi akcie a súborov v Pártoške; nemažte ho. Príkaz head ukáže len prvých desať ciest, teda nejde o počet všetkých stiahnutých súborov.

Príkaz df musí pri /mnt/partoska ukázať externý oddiel. Kapacita bude pri každom disku iná:

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

Size znamená celkovú kapacitu, Used obsadené miesto a Avail voľné miesto. V prvom stĺpci má byť externý oddiel z výpisu lsblk, napríklad /dev/sda1. Ak vidíte /dev/mmcblk0p2, /dev/root alebo iný systémový oddiel z microSD karty, nepokračujte. USB disk nie je pripojený a fotky by sa zapisovali na systémovú kartu Raspberry Pi.

Po kontrole spustite synchronizáciu druhýkrát. Už uložené súbory má preskočiť a stiahnuť len nové.

Vyberte akcie na synchronizáciu

Príkaz sync prijíma dva filtre akcií:

# Všetky akcie dostupné tomuto účtu p6a sync -t /mnt/partoska/events # Iba akcie vytvorené týmto účtom p6a sync -t /mnt/partoska/events --owner-only # Iba akcie označené ako obľúbené p6a sync -t /mnt/partoska/events --favorite-only # Akcie, ktoré sú zároveň vlastné aj obľúbené p6a sync -t /mnt/partoska/events -o -f

Krátka voľba -f znamená obľúbené akcie, nie obľúbené fotky vnútri akcie. Pre Raspberry Pi v klube alebo kultúrnom dome dáva ako predvolené nastavenie zmysel --owner-only; nestiahnu sa tak akcie, ktoré účet nevytvoril a iba sa k nim pripojil ako hosť.

Pridajte poistku proti odpojenému disku

Obyčajný riadok s p6a sync v crone má jeden nepríjemný háčik. Ak externý disk chýba, adresár /mnt/partoska stále existuje na microSD karte. Linux doň môže začať sťahovať fotky a niekoľko väčších videí systémovú kartu ľahko zaplní.

Preto použijeme krátky skript, ktorý sa bez pripojeného externého disku ukončí. Vytvorte si adresár bin:

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

Vložte nasledujúci skript. Hodnotu P6A_BIN upravte podľa výsledku príkazu 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

Editor uložte a zatvorte.

Nastavte právo na spustenie a skript raz zavolajte ručne:

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

Oprávnenie 700 dovolí súbor čítať, meniť a spúšťať iba jeho vlastníkovi. Ak ho má smieť čítať a spúšťať aj dôveryhodná linuxová skupina, použite chmod 750: vlastník môže súbor čítať, meniť aj spúšťať, skupina ho môže čítať a spúšťať, ostatní nemajú žiadny prístup.

Skript, ktorý pri ručnom teste skončí chybou, do cronu zatiaľ nepridávajte.

Naplánujte dennú zálohu v crone

Pripravený skript teraz môže spúšťať zálohu cez cron na Raspberry Pi. Najprv overte, že je cron nainštalovaný a spúšťa sa spolu so systémom:

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

Otvorte svoj používateľský crontab:

crontab -e

Pridajte riadok, ktorý spustí zálohu každý deň o 3:15 podľa časového pásma nastaveného v Raspberry Pi:

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

Editor uložte a zatvorte. Potom skontrolujte, že sa riadok naozaj uložil:

crontab -l

Vo výpise má byť uložený plán:

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

Po prvom naplánovanom behu skontrolujte log a disk:

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

Keď bude Raspberry Pi o 3:15 vypnuté, cron úlohu o 3:16 neopakuje. Pri ďalšom úspešnom behu sa však stiahnu všetky súbory, ktoré na disku ešte nie sú. Po dlhšom výpadku môžete skript spustiť ručne.

Čo sa stane po zmazaní fotky z Pártošky?

p6a sync iba dopĺňa miestny archív. Stiahne chýbajúce online súbory a preskočí tie, ktoré už sú na externom disku. Fotku na disku nezmaže len preto, že daná fotka alebo celá akcia už nie je v Pártoške dostupná.

Akonáhle nočná úloha fotku stiahne, neskoršie zmazanie v Pártoške necháva kópiu na Raspberry Pi bez zmeny. Fotku zmazanú ešte pred prvým úspešným stiahnutím však p6a získať nemôže, takže nechajte Pi bežať počas doby, kedy Pártoška súbory uchováva.

Premenovanie akcie funguje inak než zmazanie. Keď zmeníte názov online, p6a môže premenovať miestny priečinok a stiahnuté médiá v ňom ponechá.

Externý disk vedľa Raspberry Pi je stále len jeden disk a môže zlyhať. Nenahraditeľné fotky kopírujte ešte na druhý disk alebo na úložisko mimo domova či klubovne.

Hostia naďalej používajú Pártošku rovnako

Pre hostí sa nič nemení. Naskenujú QR kód akcie a nahrajú fotky v prehliadači. Raspberry Pi, p6a ani cron vôbec neuvidia; Pi sa stará iba o archív organizátora po tom, čo sa súbory dostanú do Pártošky.

Webová aplikácia zostáva k dispozícii na zakladanie akcií, moderovanie aj prehliadanie. Záloha fotiek z Pártošky na Raspberry Pi sa hodí tam, kde sa má sťahovanie opakovať bez ďalšej pripomienky. Ak chcete z terminálu aj vytvárať akcie, generovať QR kódy alebo zapojiť AI asistenta, prečítajte si súvisiaci návod k Pártoške v príkazovom riadku.

Celý postup si môžete pri malej akcii vyskúšať v bezplatnom pláne; limity úložiska a doby uchovania sa líšia podľa plánu.

Vytvorte akciu

Potom overte ručnú synchronizáciu a nechajte Raspberry Pi prevziať nočnú zmenu.

Časté otázky

Ktoré Raspberry Pi použiť na zálohu fotiek z Pártošky?

Použite model, ktorý vie spustiť 64-bitový Raspberry Pi OS, napríklad Pi 3, Pi 4, Pi 5 alebo Zero 2 W. Súčasné vydanie p6a pre Raspberry Pi je určené pre ARM64. Najmenej starostí ponúka Pi 4 alebo Pi 5 s externým SSD, samotná synchronizácia fotiek však veľký výkon nepotrebuje.

Musí byť Raspberry Pi zapnuté celý deň?

Nie. V čase naplánovanej zálohy potrebuje napájanie, sieť a pripojený externý disk. Nechať ho bežať trvalo je jednoduchšie a spotreba je nízka. Ak jeden beh vynechá, ďalšia synchronizácia stiahne súbory, ktoré ešte nemáte uložené.

Čo stiahne príkaz p6a sync -f?

Stiahne akcie, ktoré ste označili ako obľúbené. Neobmedzí sťahovanie na obľúbené fotky vnútri týchto akcií. Skombinujte -f s -o, ak chcete akcie, ktoré sú zároveň vaše aj obľúbené.

Zaplní cron microSD kartu, ak sa USB disk odpojí?

Skript z tohto návodu pred spustením kontroluje mountpoint. Ak externý disk chýba, skončí s chybou a nič nezapíše. Túto kontrolu neodstraňujte.

Zostávajú zmazané fotky z Pártošky na Raspberry Pi?

Áno, pokiaľ ich p6a stiahlo pred zmazaním online. Synchronizácia kvôli vzdialeným zmazaniam miestne súbory neodstraňuje. Ak fotka zmizla skôr, než ju Pi stihlo stiahnuť, do miestneho archívu sa nedostala.

Môžem archívny disk pripojiť priamo k Windows alebo macOS?

Použite exFAT, ak vám záleží na pravidelnom priamom prístupe zo všetkých troch systémov. Použite ext4, ak disk zostane pri Raspberry Pi; k súborom pristupujte cez SSH, SFTP alebo sieťové zdieľanie.

Môžem naďalej používať webovú aplikáciu Pártoška?

Áno. Akcie zakladajte a moderujte vo webovej aplikácii, kedykoľvek je to pohodlnejšie. p6a používa rovnaký účet a rovnaké akcie, len k tomu pridáva prístup z terminálu a naplánované miestne sťahovanie.