Last Updated on 20/07/2022 by administrator
Linux script – záloha souborů a složek
Motivace:
Tento linux script slouží pro zálohu libovolných složek a souborů na libovolné lokální či síťové úložiště. Script používám pro zálohu všech configů z Ubuntu serveru na síťové úložiště NAS.
Záloha je provedena nástrojem rsync, který slouží pro synchronizaci souborů a složek a minimalizuje přenos dat tím, že přenáší pouze rozdílové informace a zároveň pomocí kontrolního součtu porovnává skutečný obsah obou kopií [2]. Celý přenos je navíc šifrován přes SSH protokol.
OS:
Implementace byla prakticky prováděna na Ubuntu 20.04 LTS, Ubuntu 18.04 LTS a Ubuntu 12.04.5 LTS. Předpokládám, že postup je také aplikovatelný na ostatní verze Ubuntu.
Implementace:
Aktualizace seznamu balíčků z repozitářů:
sudo apt-get update
Instalace SSHPASS balíčku:
sudo apt-get install sshpass
Pozn. Prográmek sshpass v podstatě doplňuje funkci SSH klienta. Umožnuje zadání hesla jako parametr (volba -p) a tímpádem uživatel nemusí při každém přihlášení ručně zadávat přihlašovací heslo. To je užitečné, neboť se script může spouštět automaticky, přes cron (viz níže).
Linux script příklad vytvoření:
Soubor script vytvořit ve složce opt (složka opt je nejbezpečnější místo pro uložení scriptů [1]):
sudo vim /opt/script
Vložit do souboru script kód níže:
#!/bin/bash sshpass -p "password" rsync --bwlimit=50000 -arRvhe "ssh -p 22" /etc/apache2/sites-available/ user@192.168.0.5:/volume1/backups/Linux_configs --delete
Legenda:
- password – heslo, pro ověření na cílovém síťovém úložišti
- –bwlimit=50000 – slouží pro omezení rychlosti (zde bude posílat 50000KBytes/s [50MBytes/s]) [4]
- -a – archive mode – umožnuje rekurzivní kopírování se zachováním symbolických linků, oprávnění souborů a vlastnictví uživatelů a skupin s časovými razítky
- -r – recursive – zahrne podsložky a podsoubory
- -R – relative – zahrne celou cestu souboru či složky (od kořenového adresáře)
- -v – verbose – ukecanost
- -e – remote shell – pro případnou změnu SSH portu pro příkaz „ssh -p 22“ [3]
- -h – human-readable – výstupní čísla budou v čitelném formátu
- –delete – pokud se smaže složka či soubor v zdrojové složce bude vymazán i v cílové složce
- /etc/apache2/sites-available/ – co chci kopírovat (v tomto případě složku „sites-available“ na Ubuntu serveru)
- user@192.168.0.5:/volume1/backups/Linux_configs – kde chci kopírovat. V tomto případě na síťové úložiště NAS pod IP adresou 192.168.0.5 do složky „Linux_configs“ pod uživatelem „user“. Uživatel „user“ musí být vytvořený na cílovém síťovém úložišti.
Zabrousit do složky opt:
cd /opt
Povolit práva pro spouštění souboru script:
sudo chmod u+x script
Přes spuštěním scriptu je dobré se přihlásit na cílové úložiště pomocí SSH, zda na něm běží SSH server.
sudo ssh user@192.168.0.5
Výpis příkazu sudo ssh user@192.168.0.5. Je nutné potvrdit fingerprint – dopsáním yes a následně zadat heslo pro uživatele user:
ECDSA key fingerprint is 7b:bb:cc:dd:ee:4a:bb:cc:d7:ee:aa:bb:cc:9d:e1:. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.0.5' (ECDSA) to the list of known hosts.
Pokud dojde k úspěšnému připojení, lze soubor script spustit.
sudo ./script
Ověřit zda byla v tomto případě složka „sites-available“ zkopírována na cílovém síťovém úložišti.
Tuning scriptu:
Máme-li více složek či souborů které je potřeba zálohovat, lze si například vytvořit jednu proměnnou pro každou složku či soubor umístěný jiné lokaci s využitím smyčky for. Vytvořený script ve složce opt je možné také zálohovat:
#!/bin/bash snmp="/etc/snmp/" ntp="/etc/ntp.conf" syslog="/etc/rsyslog.*" samba="/etc/samba/" opt="/opt/" for location in $snmp $ntp $syslog $samba $opt do sshpass -p "password" rsync --bwlimit=50000 -aRvhe "ssh -p 22" $location user@192.168.0.5:/volume1/backups/Linux_configs --delete done
Povolení rsync na NAS Synology:
Jak již bylo zmíněno výše, soubory a složky se zálohují na mé síťové úložiště NAS Synology, běžící na IP 192.168.0.5. Nástroj rsync je nutné povolit:
Automatizaci scriptu, lze provést pomocí nástroje Cron, což je správce úloh – viz článek níže:
Zdroje:
[1] https://askubuntu.com/questions/195652/is-there-a-standard-place-for-placing-custom-linux-scripts
[2] https://cs.wikipedia.org/wiki/Rsync
[3] https://www.poftut.com/specify-different-port-for-linux-rsync/
[4] https://www.cyberciti.biz/faq/how-to-set-keep-rsync-from-using-all-your-bandwidth-on-linux-unix/