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

#raspberry-pi#záloha#cli#automatizace#fotky
P13 min. čtení
Obrázek k blogovému příspěvku "Zálohujte fotky z Pártošky na Raspberry Pi".

Představte si klub, který každou sobotu pořádá zápas. Hosté přidávají fotky do Pártošky, ale před dalším kolem si na jejich stažení nikdo nevzpomene. Záloha fotek na Raspberry Pi to vyřeší bez dalšího úkolu v kalendáři. Malý počítač necháte vedle externího SSD a každou noc stáhne nové soubory.

Pártoška dál sbírá fotky od hostů přes QR kód. Raspberry Pi ukládá kopii na disk, který máte doma nebo v klubovně. Jakmile se soubor jednou stáhne, jeho pozdější smazání z Pártošky místní kopii neodstraní.

Začneme prázdnou microSD kartou. Nainstalujeme Raspberry Pi OS, připravíme externí disk, přidáme nástroj p6a, dokončíme přihlášení přes OAuth a nakonec nastavíme každodenní úlohu v cronu.

Co budete potřebovat?

Vyberte Raspberry Pi, které umí spustit 64bitový systém. Pi 3, Pi 4, Pi 5 nebo Zero 2 W má pro tento úkol výkonu dost. Starší 32bitový model současnou oficiální sestavu p6a pro ARM64 nespustí.

Připravte si také:

  • microSD kartu. Pro Raspberry Pi OS Lite doporučuje výrobce alespoň 16 GB, ale 32 GB nechá víc místa na aktualizace a logy;
  • odpovídající napájecí zdroj;
  • externí SSD, pevný disk nebo USB flash disk s dostatečnou kapacitou;
  • čtečku microSD karet pro počítač, na kterém kartu připravíte;
  • připojení přes Ethernet nebo Wi-Fi.

Nejméně starostí bývá s SSD. Některé přenosné plotnové disky si z USB berou víc proudu, než jim Raspberry Pi spolehlivě dodá. Pokud se disk při práci odpojuje, použijte napájený USB rozbočovač nebo disk s vlastním zdrojem.

Zapište Raspberry Pi OS na microSD kartu

Ve starších návodech narazíte na název "Raspbian". Dnešní systém se jmenuje Raspberry Pi OS. Kartu nemusíte předem ručně formátovat; Raspberry Pi Imager vybrané úložiště smaže, vytvoří oddíly, zapíše systém a výsledek ověří.

Na počítač se čtečkou karet nainstalujte Raspberry Pi Imager:

  • Ve Windows stáhněte instalátor pro Windows ze stránky Raspberry Pi a spusťte jej.
  • V macOS stáhněte verzi pro macOS a běžně ji nainstalujte.
  • V Linuxu použijte oficiální sestavu pro x86_64. V Debianu nebo Ubuntu může být k dispozici také příkaz sudo apt install rpi-imager.

Další postup vypadá ve všech systémech stejně:

  1. Vyberte svůj model Raspberry Pi.
  2. Zvolte Raspberry Pi OS Lite (64-bit). Grafické prostředí na krabičce, která bude stát vedle disku a obsluhovat se přes SSH, ničemu nepomůže.
  3. Jako úložiště vyberte microSD kartu.
  4. Před zápisem otevřete nastavení systému.

Nastavte název zařízení, třeba partoska-backup, vytvořte uživatele a heslo, případně vyplňte Wi-Fi a zvolte správné časové pásmo. V části Services zapněte SSH. Pokud už používáte SSH klíče, zvolte přihlášení veřejným klíčem. Heslo pro první instalaci v důvěryhodné domácí síti také poslouží.

Než stisknete Write, ještě jednou zkontrolujte vybrané úložiště. Imager ho smaže. Nejjednodušší pojistka je předem odpojit ostatní USB disky, které při instalaci nepotřebujete.

Počkejte, až Imager dokončí i ověření zápisu. Kartu bezpečně vysuňte, vložte ji do Raspberry Pi a připojte externí disk. Po zapnutí počkejte minutu nebo dvě, než se Pi objeví v síti.

Připojte se přes SSH a aktualizujte systém

V Terminálu na macOS či Linuxu nebo v PowerShellu ve Windows použijte jméno účtu z Imageru:

ssh your-user@partoska-backup.local

Pokud adresa s koncovkou .local nefunguje, zjistěte IP adresu Raspberry Pi v administraci routeru:

ssh your-user@192.168.1.50

Nejdřív aktualizujte systém:

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

Po restartu se znovu připojte a ověřte architekturu:

uname -m

Příkaz má vypsat aarch64. Výsledek armv7l znamená, že běží 32bitový systém. V takovém případě zapište na kartu Raspberry Pi OS Lite (64-bit) a dál zatím nepokračujte.

Připravte externí disk

Externí disk pro Raspberry Pi musí mít stálý adresář, do kterého ho Linux po každém startu připojí. Nejprve si vypište dostupná úložiště:

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

Externí oddíl poznáte podle kapacity, modelu a názvu. V příkladech používáme /dev/sda1, ale u vás se může jmenovat /dev/sdb1. MicroSD karta obvykle začíná /dev/mmcblk0; tu neformátujte.

Pokud už na externím disku něco máte, příkaz k formátování přeskočte. Než změníte souborový systém, uložte si potřebná data jinam.

Pro disk, který zůstane u Raspberry Pi, doporučujeme ext4:

sudo mkfs.ext4 -L PARTOSKA /dev/sda1

Příkaz smaže celý vybraný oddíl. Před spuštěním proto znovu zkontrolujte výpis lsblk. Jestli chcete disk pravidelně odpojovat a číst přímo ve Windows nebo macOS, použijte exFAT:

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

Také druhý příkaz oddíl smaže.

Vytvořte adresář pro připojení disku a zjistěte UUID oddílu:

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

Před úpravou souboru fstab si udělejte jeho kopii:

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

Na konec přidejte následující řádek. Ukázkové UUID nahraďte hodnotou, kterou vypsal příkaz blkid:

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

Pro exFAT změňte typ na exfat. Čísla uid a gid zjistíte příkazy id -u a id -g; první uživatel mívá v obou případech hodnotu 1000.

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

V editoru Nano uložíte soubor pomocí Ctrl+O, název potvrdíte klávesou Enter a editor zavřete přes Ctrl+X. Nano zobrazuje tyto zkratky jako ^O a ^X; stříška znamená klávesu Ctrl.

Načtěte údaje z fstab a ověřte připojení disku:

sudo mount -a findmnt /mnt/partoska

Správný výsledek vypadá přibližně takto:

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

Ve sloupci TARGET musí být /mnt/partoska; SOURCE má odpovídat externímu oddílu, který jste předtím našli. Pokud findmnt nevypíše nic nebo ukáže systémový oddíl z microSD karty, nepokračujte. Opravte UUID nebo typ souborového systému.

Vytvořte složku pro fotky a dejte svému účtu právo do ní zapisovat:

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 příkaz chown vynechte. Vlastníka už určují volby uid a gid v souboru fstab.

Další příkazy fungují s ext4 i exFAT, pokud je disk připojený v /mnt/partoska. Další varianty připojení popisuje oficiální dokumentace externích úložišť.

Nainstalujte p6a

p6a je open-source nástroj Pártošky pro příkazovou řádku. Současná verze nabízí hotový soubor pro 64bitový Linux na procesorech ARM, takže p6a na Raspberry Pi nemusíte kompilovat. Vyberte si jeden způsob instalace.

Varianta A: stažení přes wget

Na samostatném zálohovacím Pi jde o nejkratší cestu. Nemusíte instalovat Node.js ani dalšího správce balíčků. Verze v příkladu byla aktuální při vydání článku; novější číslo si můžete ověřit na stránce s vydáními 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

Varianta B: instalace přes npm

Raspberry Pi OS nemusí mít npm nainstalované. Nejprve proto přidejte Node.js a npm, potom samotný balíček p6a:

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

Varianta C: Homebrew na Linuxu

Homebrew podporuje 64bitový Linux na ARM a recept Pártošky vybere správný soubor pro Raspberry Pi. Pokud už Homebrew používáte, stačí:

brew install partoska/tap/p6a p6a version

Příkaz p6a version má u uvedených příkladů vypsat p6a v1.11.5, případně novější vydání. Chyba Exec format error obvykle ukazuje na 32bitový systém nebo nesprávně staženou verzi.

Instalovat Homebrew pouze kvůli p6a nemá smysl. Potřebuje vývojové nástroje a vlastní adresářovou strukturu, zatímco přímé stažení udělá stejnou práci. Pokud přes Homebrew spravujete i další software, klidně ho použijte.

Nakonec si poznamenejte úplnou cestu k programu. Budeme ji potřebovat ve skriptu pro cron:

command -v p6a

Při přímém stažení obvykle uvidíte /usr/local/bin/p6a. Homebrew na Linuxu zpravidla vrátí cestu pod /home/linuxbrew/.linuxbrew/bin.

Přihlaste se přes OAuth

Přihlášení spusťte pod běžným účtem, bez sudo:

p6a login

Příkaz vypíše autorizační adresu. Otevřete ji v prohlížeči, nejlépe na počítači, ze kterého jste připojení přes SSH, přihlaste se do Pártošky a povolte přístup. Prohlížeč poté ukáže autorizační kód. Zkopírujte ho do schránky a vložte do čekajícího příkazu p6a. Prohlížeč nemusí běžet na Raspberry Pi.

p6a uloží přihlašovací údaje do domovského adresáře vašeho účtu, standardně do ~/.p6a. Cron proto musí běžet pod stejným uživatelem. Příkaz sudo p6a login by údaje uložil uživateli root a běžný uživatel by je nenašel.

Spojení ověříte takto:

p6a list

Ve výpisu se mají objevit akce z Pártošky, ke kterým máte přístup.

První zálohu spusťte ručně

Než se spolehnete na automatickou zálohu fotek, projděte celý postup ručně:

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

První příkaz má vypsat:

External drive mounted

Pokud se neobjeví nic, zastavte se. Externí disk není připojený ve správném adresáři. Příkaz p6a sync má doběhnout bez chyby přihlášení, sítě nebo souborového systému. Přesný výpis záleží na počtu akcí a nových souborů.

Příkaz find zobrazí nejvýše deset stažených souborů. Výsledek může vypadat 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

Pro každou akci vznikne složka ve formátu RRRR-MM-DD Název akce. Fotky dostanou názvy jako IMG_0001.jpg, videa třeba MOV_0001.mp4. Skrytý soubor .event.p6a.ini uchovává vazbu mezi složkou a identifikátory akce a souborů v Pártošce; nemažte ho. Příkaz head ukáže jen prvních deset cest, nejde tedy o počet všech stažených souborů.

Příkaz df musí u /mnt/partoska ukázat externí oddíl. Kapacita bude u každého disku jiná:

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

Size znamená celkovou kapacitu, Used obsazené místo a Avail volné místo. V prvním sloupci má být externí oddíl z výpisu lsblk, třeba /dev/sda1. Pokud vidíte /dev/mmcblk0p2, /dev/root nebo jiný systémový oddíl z microSD karty, nepokračujte. USB disk není připojený a fotky by se zapisovaly na systémovou kartu Raspberry Pi.

Po kontrole spusťte synchronizaci podruhé. Již uložené soubory má přeskočit a stáhnout jen nové.

Vyberte akce k synchronizaci

Příkaz sync přijímá dva filtry akcí:

# Všechny akce dostupné tomuto účtu p6a sync -t /mnt/partoska/events # Pouze akce vytvořené tímto účtem p6a sync -t /mnt/partoska/events --owner-only # Pouze akce označené jako oblíbené p6a sync -t /mnt/partoska/events --favorite-only # Akce, které jsou zároveň vlastní a oblíbené p6a sync -t /mnt/partoska/events -o -f

Krátká volba -f znamená oblíbené akce, nikoli oblíbené fotky uvnitř akce. Pro Raspberry Pi v klubu nebo kulturním domě dává jako výchozí nastavení smysl --owner-only; nestáhnou se tak akce, které účet nevytvořil a pouze se k nim přidal jako host.

Přidejte pojistku proti odpojenému disku

Samotný řádek s p6a sync v cronu má jeden nepříjemný háček. Pokud externí disk chybí, adresář /mnt/partoska pořád existuje na microSD kartě. Linux do něj může začít stahovat fotky a několik větších videí systémovou kartu snadno zaplní.

Proto použijeme krátký skript, který se bez připojeného externího disku ukončí. Vytvořte si adresář bin:

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

Vložte následující skript. Hodnotu P6A_BIN upravte podle výsledku pří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 zavřete.

Nastavte právo ke spuštění a skript jednou zavolejte ručně:

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

Oprávnění 700 dovolí soubor číst, měnit a spouštět pouze jeho vlastníkovi. Pokud ho má smět číst a spouštět také důvěryhodná linuxová skupina, použijte chmod 750: vlastník může soubor číst, měnit i spouštět, skupina ho může číst a spouštět, ostatní nemají žádný přístup.

Skript, který při ručním testu skončí chybou, do cronu zatím nepřidávejte.

Naplánujte každodenní zálohu v cronu

Připravený skript teď může spouštět zálohu přes cron na Raspberry Pi. Nejdřív ověřte, že je cron nainstalovaný a spouští se spolu se systémem:

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

Otevřete svůj uživatelský crontab:

crontab -e

Přidejte řádek, který spustí zálohu každý den ve 3:15 podle č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 zavřete. Potom zkontrolujte, že se řádek opravdu uložil:

crontab -l

Ve výpisu má být uložený plán:

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

Po prvním naplánovaném běhu zkontrolujte log a disk:

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

Když bude Raspberry Pi ve 3:15 vypnuté, cron úlohu ve 3:16 neopakuje. Při dalším úspěšném spuštění se ale stáhnou všechny soubory, které na disku ještě nejsou. Po delším výpadku můžete skript spustit ručně.

Co se stane po smazání fotky z Pártošky?

p6a sync pouze doplňuje místní archiv. Stáhne chybějící online soubory a přeskočí ty, které už jsou na externím disku. Fotku na disku nesmaže jen proto, že už daná fotka nebo celá akce není v Pártošce dostupná.

Jakmile noční úloha fotku stáhne, pozdější smazání v Pártošce nechá kopii na Raspberry Pi beze změny. Fotku smazanou ještě před prvním úspěšným stažením ovšem p6a získat nemůže. Nechte proto Pi běžet během doby, kdy Pártoška soubory uchovává.

Přejmenování akce funguje jinak než smazání. Když změníte název online, p6a může přejmenovat místní složku a stažená média v ní ponechá.

Externí disk vedle Raspberry Pi je pořád jen jeden disk a může selhat. Nenahraditelné fotky kopírujte ještě na druhý disk nebo na úložiště mimo domov či klubovnu.

Hosté dál používají Pártošku stejně

Pro hosty se nic nemění. Naskenují QR kód akce a nahrají fotky v prohlížeči. Raspberry Pi, p6a ani cron vůbec neuvidí; Pi se stará pouze o archiv pořadatele poté, co se soubory dostanou do Pártošky.

Webová aplikace zůstává k dispozici pro zakládání akcí, moderování i prohlížení. Záloha fotek z Pártošky na Raspberry Pi se hodí tam, kde se má stahování opakovat bez další připomínky. Pokud chcete z terminálu také vytvářet akce, generovat QR kódy nebo zapojit AI asistenta, přečtěte si související návod k Pártošce v příkazové řádce.

Celý postup můžete u malé akce vyzkoušet v bezplatném tarifu. Limity úložiště a doby uchování se liší podle tarifu.

Vytvořte akci

Poté ověřte ruční synchronizaci a noční směnu nechte na Raspberry Pi.

FAQ

Které Raspberry Pi se hodí pro zálohování fotek z Pártošky?

Použijte model, na kterém běží 64bitový Raspberry Pi OS, například Pi 3, Pi 4, Pi 5 nebo Zero 2 W. Současné vydání p6a pro Raspberry Pi používá ARM64. Nejsnazší instalaci nabízí Pi 4 nebo Pi 5 s externím SSD, samotná synchronizace však velký výkon nepotřebuje.

Musí Raspberry Pi běžet celý den?

Ne. Ve chvíli naplánované zálohy potřebuje napájení, síť a připojený externí disk. Trvalý provoz je jednodušší a Raspberry Pi má malou spotřebu. Pokud jeden běh vynechá, příští synchronizace doplní soubory, které ještě nejsou uložené.

Co stáhne příkaz p6a sync -f?

Stáhne akce, které jste označili jako oblíbené. Neomezí obsah na oblíbené fotky uvnitř těchto akcí. Kombinace -f a -o vybere oblíbené akce, které jste sami vytvořili.

Zaplní cron microSD kartu, když se USB disk odpojí?

Skript z tohoto návodu před spuštěním kontroluje mountpoint. Pokud externí disk chybí, skončí s chybou a nic nezapíše. Tuto kontrolu neodstraňujte.

Zůstanou smazané fotky na Raspberry Pi?

Ano, pokud je p6a stihlo stáhnout před smazáním z Pártošky. Synchronizace kvůli změnám na serveru místní soubory neodstraňuje. Fotka smazaná dřív, než ji Pi poprvé stáhlo, se do archivu nedostane.

Mohu archivní disk připojit přímo k Windows nebo macOS?

Pokud ho chcete pravidelně přenášet mezi všemi třemi systémy, zvolte exFAT. Pro disk, který zůstane u Raspberry Pi, je lepší ext4; k souborům se pak dostanete přes SSH, SFTP nebo síťové sdílení.

Mohu dál používat webovou aplikaci Pártošky?

Ano. Akce můžete zakládat a moderovat ve webové aplikaci, kdykoli je to pohodlnější. p6a se připojí ke stejnému účtu a stejné akce pak můžete spravovat nebo stahovat z terminálu.