adblog

Vlastní zálohování SD karet

Jednoduchý způsob, jakým vyřešit zálohy fotografií na dovolené nebo během cestování, nabízí kombinace shell skriptů Little Backup Box na Raspberry Pi, přičemž je na nás, zda zvolíme RPi Zero, RPi 3B+ nebo RPi 4B. Podívejme se na variantu s RPi 4B.

Očekávaný výsledek

Je jím nakonfigurovaná sestava, která funguje jako zálohovací zařízení a zdroj a cíl zálohování. Na obrázku je vidět vše pohromadě:

Sestava RPi a dalších zařízení pro zálohování SD karty

Sestava RPi a dalších zařízení pro zálohování SD karty

Použitý Hardware

  • Raspberry Pi 4B se 4GB RAM (orig. adaptér, pouzdro Cooler Master Pi Case 40, 32GB SanDisk Extreme microSDHC UHS-I U3 V30 + SD adaptér)
  • Čtečka karet Gembird USB 3.0 (UHB-CR3-01), dvakrát
  • Externí disk SanDisk Extreme Portable SSD 500GB
  • Datový kabel AlzaPower FlexCore USB-C to USB-C 3.2 Gen 2, 5A, 100W
  • Powerbanka AlzaPower Carbon 20000mAh Fast Charge + PD3.0
  • paměťová karta Sandisk Extreme PRO 64 nebo 128 GB 95MB/s a vyšší

Postup

0. Windows a Linux/macOS

Linux a macOS ukládá soubory v UTF-8 kódování, kdežto Windows v kódování Windows-1250. Proto při ukládání souborů je třeba nastavit cílové kódování na UTF-8, což je jedna z voleb v parametru Kódování, pokud ukládáme soubor např. v Notepadu.

Návod je popisován na macOS 11 Big Sur, ale adekvátně funguje na kterémkoliv linuxu a Windows při pamatování na adekvátní kódování souborů z Windows.

1. Stažení a instalace RaspberryPi OS Lite

Nejprve je třeba si stáhnout Raspberry Pi Imager, nainstalovat, spustit, zvolit OS (Raspberry Pi OS Lite), zvolit disk (microSD kartu) a potvrdit tlačítkem Write.

RaspberryPi Imager

Výchozí RaspberryPi Imager po zápisu OS na kartu při ověřování úspěšnosti akce

2. Konfigurace ssh

Pro připojení k RPi bez připojení monitoru je nutné povolit ssh, což se vytvoří souborem se stejným názvem do rootu boot části karty

$ touch /Volumes/boot/ssh

3. Konfigurace Wifi

Abychom se k RPi mohli připojit bez kabelu, potřebujeme nastavit wifi. Nejprve si vytvoříme na lokále konfigurační soubor:

$ touch wpa_supplicant.conf

Vyplníme obsah souboru podle názvu naší wifi sítě a hesla k němu. Parametr scan_ssid=1 se uvede v případě, kdy nechcete, aby RPi zjišťovalo všechny sítě, ale připojilo se přímým vyhledáním jen uvedené sítě. Více o nastaveních lze nalézt např. na manuálové stránky Debianu a manuálové stránkce freebsd. Do položky country uvedeme dvouznakový kód země, kde s RPi pracujeme, neboť toto nastavení ovlivňuje dostupné kanály v rámci wifi, které se v jednotlivých státech liší. Seznam zkratek pro jednotlivé státy je uveden na Wikipedii jako ISO 3166-1. Pro případ, že byste heslo chtěli mít v zašifrovanější podobě, je k dispozici wpa_passphrase příkaz v dokumentaci RPi.

1
2
3
4
5
6
7
8
9
  country=CZ
  ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
  update_config=1

  network={
      scan_ssid=1
      ssid="MojeWifiSit"
      psk="HesloKMojeWifiSit"
  }

Soubor nahrajeme na kartu.

$ cp wpa_supplicant.conf /Volumes/boot/

4. Nastavení zabezpečení

Máme-li vše z předchozího, nemusíme napojovat RPi ani k monitoru, stačí jej připojit k adaptéru či jinému zdroji napájení. Do minuty bude RPi připravené s námi komunikovat. Pro připojení musíme zjistit jeho adresu. To lze provést příkazem:

$ ping raspberrypi.local -c 4
PING raspberrypi.local (172.16.1.53): 56 data bytes
64 bytes from 172.16.1.53: icmp_seq=0 ttl=64 time=312.979 ms
64 bytes from 172.16.1.53: icmp_seq=1 ttl=64 time=5.261 ms
64 bytes from 172.16.1.53: icmp_seq=2 ttl=64 time=9.558 ms
64 bytes from 172.16.1.53: icmp_seq=3 ttl=64 time=10.757 ms

--- raspberrypi.local ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 5.261/84.639/312.979/131.848 ms

nebo pokud se podíváme do správy svého routeru, přes který jsme připojeni a zobrazíme si přehled připojených zařízení. Výsledkem je IP adresa, kterou použijeme dále.

V dalším kroku se připojíme k našemu RPi (pro IP adresu 172.16.1.53):

$ ssh 172.16.1.53 -l pi
pi@172.16.1.53's password:
Linux raspberrypi 5.10.17-v7l+ #1403 SMP Mon Feb 22 11:33:35 GMT 2021 armv7l

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Tue Apr 27 13:11:50 2021 from 172.16.1.105

a zadáme výchozí heslo raspberry. Alternativně se lze připojit přímo bez znalosti IP adresy přes ssh raspberrypi.local -l pi.

Pro lepší zabezpečení bychom měli změnit výchozí heslo. To provedeme příkazem, který spouštíme na našem RPi přes ssh:

$ passwd

a zadáme naše nové heslo.

Také můžeme lépe zabezpečit naši konfiguraci wifi připojení a to tak, že skryjeme alespoň částečně heslo k naší síti. Není to nezbytné, ale pokud chcete toto nastavit, pokračujte dle návodu nastavení RPi přes terminál s částí wpa_passphrase.

5. Podpora exFAT a další konfigurace

Pracujeme-li s úložištěm větším než 32 GB, pak máme dvě možnosti pro výběr formátu pro datovou partition. První je NTFS, která má ale nativní podporu jen ve Windows nebo exFAT, což umožňuje zápis na kterémkoliv systému (Windows, Linux, macOS). Pro exFAT postupujeme tak, že si aktualizujeme balíčky OS a následně nainstalujeme podporu pro exFAT dle návodu:

$ sudo apt update
$ sudo apt install exfat-fuse

Nyní můžeme číst exFAT partition a máme de facto téměř hotovo.

Pro další konfiguraci jako změnu klávesnice z výchozí britské, musíme na RPi spustit sudo raspi-config a z menu si vybrat možnosti, co chceme nastavit. Možnosti jsou od povolení či zákazu jednotlivých rozhraní po klávesnici a další drobnosti.

6. Instalace a konfigurace Little Backup Box

Z RPi terminálu nainstalujeme LBB:

$ curl -sSL https://raw.githubusercontent.com/dmpop/little-backup-box/main/install-little-backup-box.sh | bash

Po dokončení instalace je dobré nastavit některé další parametry LBB, což provedeme zadáním IP adresy s portem 8000 do prohlížeče na počítači mimo RPi, např. http://172.16.1.53:8000. Následně přejdeme do části Settings a zde upravíme nastavení, která chceme změnit. Můžeme např. zapnout logování, definovat údaje pro odeslání emailu, jakmile skončí zálohování, ovlivnit vypnutí po ukončení zálohování a další.

Little Backup Box

Hlavní stránka Little Backup Box po spuštění RPi

7. Zálohování

Nejprve do USB RPi vložíme zařízení, na které chceme zálohovat, tedy SSD disk. Jako druhý vložíme čtečku s kartou, kterou chceme zálohovat. LBB automaticky připojí zařízení a začne ihned zálohovat. Proces zálohování lze sledovat na stránce System Info.

Po dokončení zálohování vypadá System Info např. takto:

Little Backup Box System Info

Začátek stránky Status Info po dokončení zálohování přes LBB

Lze si všimnout, že zařízení /sda/sda1 s mountingpoint /media/storage je náš 500 GB disk jako cíl zálohování. Zařízení /sdb/sdb1 s mountingpoint /media/source je naše SD karta, kterou jsme zálohovali. Divná velikost karty vychází z toho, že se jedná o 32 mil. bytů, což pokud dělíme 1024 na vyšší řády, dostaneme 32000000000/1024/1024/1024 = 29,80 GB. 32 GB dat je totiž 32*1024*1024*1024 = 34 359 738 368 bytů, nicméně výrobce pracuje s 32 miliony bytů. Pod Disk space vidíme obsazené a volné místo na připojených zařízeních.

Výsledný test

Pro výsledné testování byly kromě HW uvedených výše použity tyto SD karty:

  • SanDisk Extreme PRO 95MB/s 32GB SDHC UHS-I V30 U3 C10
  • SanDisk Extreme PRO 170MB/s 64GB SDHC UHS-I V30 U3 C10

Karta s 32 GB byla použita jako zdroj fotografií, tzn. karta, na kterou ukládá data fotoaparát. Na kartu bylo nahráno 1 267 RAW souborů, celkově o velikosti téměř 32 GB, přičemž na kartě zůstalo 9 MB volných. Průměrná velikost fotografie v CR2 formátu se pohybovala mezi 21 MB až 31 MB. Některé z uvedených údajů lze deklarovat výstupem z terminálu:

# volne a vyuzite misto v kB blocich pro kartu s fotografiemi
$ df -l -k /Volumes/EOS_DIGITAL/
Filesystem   1024-blocks     Used Available Capacity iused ifree %iused  Mounted on
/dev/disk2s1    31154688 31145792      8896   100%       0     0  100%   /Volumes/EOS_DIGITAL

# pocet souboru na karte v adresari s fotkami
$ ls /Volumes/EOS_DIGITAL/DCIM/100CANON/ | wc -l
    1267

# pocet vyuzitych kB na karte v adresari s fotkami
$ du -k /Volumes/EOS_DIGITAL/DCIM/100CANON/
31145504    /Volumes/EOS_DIGITAL/DCIM/100CANON/

Byly provedeny 2 druhy testů: první bylo zálohování z 32 GB karty plné fotografií na externí SSD disk a druhý test zahrnoval kopírování stejné 32 GB karty na druhou kartu, tentokrát 64 GB.

Typ zálohy Doba zálohy Průměrná rychlost
SD karta → SSD disk 9min 54s 53,99 MB/s
SD karta → SD karta 10min 21s 51,18 MB/s

Pro zaplnění celého SSD disku je třeba 15 záloh kompletně nového obsahu 32 GB karty. Pro její realizaci tak potřebujeme zhruba 157 minut, kdy musí dodávat zdroj energie proud, což je 2 hodiny a 37 minut. A to powerbanka s 20 000 mAh má zvládnout s přehledem, byť RPi 4 má potřebu 3A a 5V, tedy 15W.