Jak už jsem psal v předchozích článcích, používám Raspberry PI pro uchovávání statistických hodnot a vizualizaci grafů ze systémů Loxone, meteostanice Wario Weather nebo tepelného čerpadla Nibe. V minulosti se mi již stalo, že se mi poškodila SD karta a musel jsem kompletně přeinstalovat systém. Toho času jsem neměl vyřešeno zálohování a panovala oprávněná obava, že přijdu o statistiky za přibližně posledního půl roku, což by mě úplně nepotěšilo. Tak jak to bývá dobrým zvykem, potřeba řešit zálohování vyvstane poprvé teprve tehdy, až o data skutečně přijdete. Já o svá data nakonec napřišel, ale bylo to díky několika dnům práce s oroseným čelem.

Začal jsem tedy přemýšlet, jak data z Raspberry zálohovat. Když se řeší zálohování, je potřeba položit si několik základních otázek:

1. Potřebuji zálohovat na úrovni souborů, nebo celý image?
2. Co konkrétně potřebuji zálohovat?
3. Kolik je to dat?
4. Jaký je požadovaný typ a doba obnovy?

Abych ty otázky nenechával otevřené, odpovím za sebe:

1. Zálohovat potřebuji na souborové úrovni. Image by se mohl zdát asi lepší, nicméně, nepotřebuji zálohovat vše, ale jen konkrétní data.

2. Potřebuji zálohovat konfigurační soubory InfluxDB a Grafana, obslužné skripty pro stahování a ukládání dat z tepelného čerpadla Nibe, meteostanice a obsah databáze InfluxDB

3. Zálohovat potřebuji přibližně 2,5 GB dat

4. Obnovu chci na souborové úrovni s možností obnovit buď kompletní soubor nebo kompletní adresář, doba obnovy mě netrápí, nemusí to být hned. V případě výpadku celého systému budu postupovat tak, že nejprve nainstaluji systém a aplikace v aktuálních verzích, ze zálohy použiji konfigurační soubory a skripty a obnovím uložená data (Někdo by mohl namítat, že data by nemusela být kompatibilní s jinou verzí systému, ano je to tak, záleží na každém z vás, jaký si zvolí postup)

Synology

V mém případě používám Synology DS415play zejména pro ukládání důležitých souborů, jako jsou skeny smluv, či jiné nefiremní důležité dokumenty. Využívám NAS jako „privántí cloud“, protože nechci svá data svěřovat službám, jako je Dropbox nebo Google Drive. Namísto toho využívám Synology Drive, kdy vím, kde data leží a kdo k nim má přístup. Dále NAS využívám jako streamovací server, odkud pouštíme dětem pohádky. Verzi „play“ jsem zvolil z toho důvodu, že disponuje x86 architekturou procesoru a umožňuje tak transcoding videa. Důležité pro mě je, že za těch cca 5 let, co jej používám, prostě funguje.

Prerekvizity

  • Root (admin) přístup do Synology NAS
  • Nástroj pro terminálové připojení SSH, například Putty
  • Povolený SSH přístup na Synology NAS

Povolení SSH přístupu na NAS

Otevřete web rozhraní vaší Synology NAS a jděte do „Control Panel” -> “Terminal & SNMP“ a zatrhněte checkbox „Enable SSH service„. Zkontrolujte, jaký máte nastavený port pro SSH přístup. Výchozí port pro SSH je 22, po některé aktualizací Synology port doporučilo změnit na 2222. Já doporučuji port změnit na jakýkoliv nevýchozí port, zejména v případě, kdy je možnost přístupu na NAS z internetu. (Mnozí to tak mají). Ať již máte nastavený jakýkoliv port, zapamatujte si jej.

Zapnutí SSH na Synology NAS
Zapnutí SSH na Synology NAS

Práce s terminálem

Budete potřebovat dvě terminálová okna. V jednom okně budete mít SSH spojení na Raspberry PI a ve druhém okně budete mít SSH spojení na Synology NAS. Pozor, v aplikaci pro terminálové připojení je třeba zadat správný port pro připojení (viz výše).

Protože je důležité, abyste příkazy spouštěli ve správném okně, dále budu jednotlivé příkazy rozlišovat barevně. Příkazy modrou barvou budete psát do okna Raspberry, zelené příkazy budete psát do okna Synology.

Přihlašte se na Synology pomocí SSH jako root. Pokud se vám nedaří přihlásit uživatelem root, přihlaste se účtem „admin“ a spusťte příkaz

sudo su

Změní se styl příkazového řádku

Spusťte příkaz

ls ~/.ssh

a ověřte, zda-li již existují SSH klíče. Pokud vidíte soubor, pojmenovaný jako id_rsa.pub, již máte SSH klíče vytvořeny. Pokud klíče vytvořeny nejsou, zobrazí se hláška ls: cannot access /root/.ssh: No such file or directory

Pokud klíče neexistují, vytvoříme je spuštěním příkazu

ssh-keygen -t rsa -C root@<Název vaší Synology NAS> (Název vaší Synology NAS zjistíte spuštěním příkazu hostname)

Až budete dotazováni na to, kam klíče uložit, ponechejte výchozí umístění (jen stiskněte <enter>)

Heslo ke klíči nevyplňujte a stiskněte <enter> (žádné heslo)

Znovu ověřte, že klíče opravdu existují ( ls ~/.ssh )

Nyní je třeba přenést SSH klíč do Raspberry. Pokud máte povoleno přihlášení pomocí root, můžete si práci usnadnit použitím příkazu

cat ~/.ssh/id_rsa.pub | ssh root@<Adresa vašeho RPi> 'cat >> .ssh/authorized_keys'

Pokud přihlášení pomocí root účtu nemáte, přihlaste se na RPi pomocí SSH jako standardní uživatel (např pi). Doporučuji mít otevřenu opravdu novou session, abyste měli v jednom okně SSH session na Synology a ve druhém okně SSH na RPi.

V okně s RPi spusťe příkaz su a zadejte heslo uživatele root

Nyní je třeba otevřít k editaci soubor ~/.ssh/authorized_keys, třeba pomocí příkazu

nano ~/.ssh/authorized_keys

alternativnš lze použít i příkaz

vi ~/.ssh/authorized_keys (záleží, jaký editor preferujete)

Pokud jste si s autorizačními klíči ještě nehráli, pravděpodobně bude soubor prázdný. Pokud soubor již nějaké klíče obsahuje, přesuňte kurzor na nový řádek.

Přepněte se zpět do okna s SSH session na zařízení Synology a vypište si obsah souboru id_rsa.pub příkazem

cat ~/.ssh/id_rsa.pub

Označte celý obsah souboru, který začíná textem „ssh-rsa“ a končí root@<Název vaší Synology NAS> . Pokud používáte Putty, tak označením textu se vám text automaticky uloží do schránky, což potřebujeme.

Přepněte se zpět do okna s SSH session na Raspberry a vložte klíč do již otevřeného editoru. (pokud používáte Putty, stačí kliknout pravým tlačítkem myši do okna terminálu a text se vloží). Obsah souboru uložte.

Ověřte, že klíč je skutečně uložen

cat ~/.ssh/authorized_keys

Nyní ověříme, že klíče opravdu fungují. Přepneme se do okna Synology a spustíme příkaz

ssh root@<IP adresa vašeho RPi>

Pokud vše funguje, automaticky budete přihlášeni do Raspberry, aniž byste byli vyzváni k zadání hesla. Z Raspberry zpět do Synology se dostaneme pomocí příkazu „exit

První část máme za sebou. V tuto chvíli již nebudeme terminálové služby potřebovat, takže SSH připojení na Synology i Raspberry lze ukončit a okna zavřít.

Nastavení v Synology DSM

Přihlaste se k Vašemu Synology pomocí účtu „admin“ a všechny následující kroky provádějte pod tímto účtem

Abychom mohli začít zálohovat první Raspberry PI, je třeba nejprve vytvořit zálohovací skripty, které nám zálohu zajistí. Následující kroky platí pouze, pokud vytváříte zálohu prvního Raspberry. Pokud se jedná o další Raspberry v řade, přeskočte sem.

Otevřete „File Station“ a ověřte, že existuje složka „/volume1/backups/_scripts“ (v případě potřeby podsložku _scripts vytvořte.

Pokud jste zmatení, že nevidíte „/volume1/“ v navigaci vlevo, nezoufejte, je to z toho důvodu, že se jedná o výchozí svazek. Začnete shora a najděte (nebo vytvořte) složku „backups/_scripts“ a pokračujte dál.

Vytvořte nový soubor, který se bude jmenovat „backup_target.sh„. Vytvořit nový prázdný soubor pomocí Synology DSM není zrovna jednoduché. Jednodušší je vytvořit si prázdný soubor na svém počítači a následně soubor do složky nahrát. Stačí kliknout do prostoru složky pravým tlačítkem myši a zvolit „Upload to _scripts„.

Nebo prostě do této složky nakopírujte jakýkoliv jiný čistě textový soubor, který je již na vaší NAS uložený a jakmile je zkopírován se složce „_scripts„, tak jej přejmenujte na „backup_target.sh

Poznámka: Nemusíte nutně používat složku „_scripts„, pokud chcete skripty uložit kamkoliv jinam, klidně to udělejte, jen si prosím zapamatujte umístění zálohovacích skriptů.

Otevřete soubor  „backup_target.sh“ v režimu úprav. Stačí kliknout na název souboru a zvolit „Open with Text Editor„. Otevře se okno, ve kterém je možné obsah souboru upravit. Pokud soubor obsahuje jakýkoliv text, vymažte jej. Do textového editoru zkopírujte následující text:

SERVER=$1
ADDRESS=$2
NOW=$(date +"%Y-%m-%d")
LOGFILE="$SERVER-$NOW.log"
ping $ADDRESS -c 30 >> /volume1/backups/logs/$LOGFILE
/usr/syno/bin/rsync -av --delete --exclude-from=/volume1/backups/_scripts/rsync-exclude.txt -e "ssh -p 22" root@$ADDRESS:/ /volume1/backups/$SERVER/ >> /volume1/backups/logs/$LOGFILE 2>&1

Pokud jste se rozhodli, že zálohovací skripty budete ukládat do jiné složky, opravte v souboru cesty.

Nyní jste vytvořili parametrizovaný skript pro provádění záloh vašeho Raspberry. Pomocí tohoto skriptu můžete zálohovat několik Raspberry, aniž byste tento skript museli kopírovat. V následujících krocích se dozvíte, že každé RPi je obsluhováno pomocí separátního skriptu, který poskytne název a adresy zařízení. Tento skript provede zálohu RPi, které je identifikováno parametrem $1 a jehož IP adresa je definována parametrem $2 a obsah zálohy uloží do adresáře „/volume1/backups/<název vašeho RPI>„. Zároveň je v souboru „/volume1/backups/logs/<Název vašeho RPi><Časové razítko>.log“ uložen log, který obsahuje detaily o provedené záloze.  (Složku /volume1/backups/logs/ vytvořte)

Před tím, než započne proces samotné zálohy (rsync), bude na RPi vysláno 30 ping dotazů, aby se ověřilo, že je zařízení na síti dostupné a síťová konektivita je v pořádku).

Volitelně můžete také vytvořit soubor „_scripts/rsync-exclude.txt„, do kterého můžete umístit soubory, které mají být ze zálohy vyňaty. Obsah souboru je jednoduchý seznam definovaný názvem souborů nebo „wildcard šablon“ – soubory v seznamu bude rsync ignorovat. Můžete například vyjmout „*.tmp“ nebo „/tmp/*“ atd.



Následující kroky již platí pro první i každí další Raspberry, které chcete zálohovat

Jdete do „Control Panel -> Task Scheduler

Klikněte na „Create -> Scheduled Task -> User-Defined Script

V záložce „General“ zvolte název naplánované úlohy, například „Backup – <Název vašeho Rpi>“ a zvolte spouštení skriptu pod uživatelem „root

V záložce „Schedule“ vyberte, podmínky, za jakých se bude záloha provádět. Já zálohuji 1x denně v noci

V záložce „Task Settings“ nastavte cestu k zálohovacímu skriptu a jeho parametry v poli „User-Defined script

/volume1/backups/_scripts/backup_target.sh <Název vašeho RPi> <IP Adresa vašeho RPi>

Pokud chcete být emailem informováni o průběhu skriptu a máte správně nastaveno nastavení SMTP, můžete vyplnit vaši e-mailovou adresu do pole Email

Poznámka: mezi _target.sh a MojeRPI je mezera, stejně tak je mezera mezi MojeRPI a 192.168.1.2

Uložte naplánovanou úlohu kliknutím na tlačítko „OK

Vaše nově naplánovaná úloha se zobrazí v seznamu zobrazí jako „User-Defined Script„. Klikněte na název úlohy, tím ji zvýrazníte (modré podbarvení). Nyní je čas poprvé spustit naplánovanou úlohu kliknutím na tlačítko „Run„. Tím ověříme, že je vše nastaveno správně a zálohování je funkční.

Po kliknutí na tlačítko „YES“  počkejte chvíli a po té se vraťte do „File station„. Ve složce „/backups“ byste měli vidět odzálohované soubory z vašeho RPi. Stejně tak si můžete prohlédnout log v souboru „/volume1/backups/log/<Název vašeho RPi><Časové razítko>.log„. Pokud v logu vidíte hlášku „No such file or directory„, pravděpodobně je rsync na vašem Synology umístěn jinde.

V mém případě se po některé z aktualizací objevil rsync zde /usr/bin/rsync (bez podsložky „syno„). Pokud je to i váš případ, upravte v textovém editoru soubor „/volume1/backups/_scripts/backup_target.sh“ cestu k rsync.

Pokud je vše v pořádku, uvidite v logu jak odpovědi na PING, tak seznam všech souborů, které byly zálohovány.

Ještě připomenutí na závěr. Vezte, že se jedná o zálohu na souborové úrovni. Skript tedy „pouze“ zkopíruje požadované soubory z vašeho PI na Synology NAS v podobě, v jaké jsou na RPi uloženy. V případě výpadku RPi budete schopni obnovit zálohované soubory, nikoliv však celý image. V případě požadavku na obnovu, budete muset nejprve obnovit systém, aplikace, vše nakonfigurovat a následně ze zálohy obnovit požadované soubory.

Další důležitou poznámkou je fakt, že zálohované soubory jsou vlastněny uživatelem „root„. V případě obnovy tedy použijte opět rsync, nebo nastavte patřičná oprávnění, abyste byli schopni data ze Synology NAS dostat „ven“.

Netvrdím, že je tohle jediný správný postup, nicméně mě funguje. Zkoušel jsem i opačnou cestu – odesílat data z RPi na Synology a zálohovací skripty spouštěn na RPi. Zde bylo vše funkční, ale mělo to nevýhodu v podobě nutnosti zadávat heslo při každém spuštění zálohy. Nefungovala správně výměna klíčů.

Zdroje a odkazy

 

 

 

 

Zálohování Raspberry PI na Synology NAS
Štítky:                                

2 komentáře u „Zálohování Raspberry PI na Synology NAS

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.

This site uses Akismet to reduce spam. Learn how your comment data is processed.