Shell skripty

Jedným z najjednoduchších spôsobov, akým sa dá zálohovať systém, je použitie tzv. shell skriptov - skriptov pre príkazový riadok. Pomocou takéhoto skriptu môžeme nastaviť, ktoré priečinky sa majú zálohovať a obsah týchto priečinkov môžeme skomprimovať (zbaliť) pomocou nástroja tar do archívu. Archív je súbor, ktorý potom môžeme skopírovať na iné miesto. Môžeme ho vytvoriť aj na vzdialenom súborovom systéme, ktorý pripojíme pomocou systému NFS.

Nástroj tar dokáže vytvoriť jeden archívny súbor z veľkého množstva súborov a priečinkov. Nástroj tar tiež zredukuje priestor potrebný na uchovanie archívu prostredníctvom kompresie.

Jednoduchý skript

Nasledujúci skript použije nástroj tar na vytvorenie archívu na vzdialenom súborovom systéme, ktorý je pripojený pomocou systému NFS. Meno súboru s archívom sa odvodí od dátumu a názvu počítača.

#!/bin/sh
####################################
#
# Skript na vytvorenie zálohy na vzdialenom disku
#
####################################

# Čo sa bude zálohovať.
backup_files="/home /var/spool/mail /etc /root /boot /opt"

# Kam sa bude zálohovať.
dest="/mnt/backup"

# Vytvorí názov súboru s archívom.
day=$(date +%A)
hostname=$(hostname -s)
archive_file="$hostname-$day.tgz"

# Vypíše hlásenie o prebiehajúcej operácii.
echo "Zálohujem $backup_files do $dest/$archive_file"
date
echo

# Vytvorí archív pomocou nástroja tar.
tar czf $dest⁄$archive_file $backup_files

# Vypíše správu o dokončení operácie.
echo
echo "Záloha bola vytvorená"
date

# Detailný výpis cieľového priečinka $dest aby sa dala overiť veľkosť archívu.
ls -lh $dest
  • $backup_files: premenná, ktorá obsahuje zoznam priečinkov, ktoré sa majú zálohovať. Tento zoznam si môžeme upraviť podľa našich potrieb.

  • $day: premenná, ktorá obsahuje deň v týždni (Pondelok, Utorok, Streda, atď.). Táto premenná sa používa na vytvorenie archívu pre každý deň v týždni, čo nám poskytne sedem dňovú históriu archívov. Meno archívu môžeme vytvoriť aj inými spôsobmi. Napríklad môžeme využiť nástroj date.

  • $hostname: premenná, ktorá obsahuje krátky názov stanice. Vďaka tomuto menu rozoznáme, z ktorého počítača záloha pochádza, v prípade, že na rovnaké miesto ukladáme zálohy z viacerých počítačov.

  • $archive_file: celé meno súboru s archívom.

  • $dest: priečinok, do ktorého sa má archív uložiť. Tento priečinok je potrebné pred použitím skriptu vytvoriť a v našom prípade aj pripojiť pomocou NFS. Viac informácií o NFS sa nachádza v časti Sieťový súborový systém NFS.

  • stavové správy: toto sú voliteľné správy, ktoré sa vypíšu pomocou nástroja echo na počítači, aby používateľ vedel, čo sa na počítači deje.

  • tar czf $dest/$archive_file $backup_files: príkaz tar sa využíva na vytvorenie archívu.

    • c: vytvorí archív.

    • z: použije kompresiu gzip.

    • f: zapíše výstup do súboru. Keby sme tento parameter nepoužili, tar by výstup odoslal na STDOUT.

  • ls -lh $dest: voliteľný príkaz ktorý zobrazí -l dlhý výpis cieľového priečinka -h v tvare zrozumiteľnom pre človeka. Tento príkaz je užitočný, ak sa chceme uistiť, že bol súbor vytvorený a aká je jeho veľkosť.

Toto je jednoduchý príklad skriptu na vytvorenie zálohy. Pri vytváraní skriptu máme k dispozícií veľké množstvo možností. Viac informácií o vytváraní skriptov môžeme nájsť v časti “Zdroje”.

Spustenie skriptu

Spustenie z príkazového riadka

Najjednoduchší spôsob, akým spustiť predchádzajúci skript, je uložiť ho do súboru. Súbor môžeme nazvať napríklad zaloha.sh. Potom ho môžeme spustiť v príkazov riadku:

sudo bash zaloha.sh

Tento spôsob môžeme využiť, ak chceme otestovať správnu funkčnosť skriptu.

Spustenie pomocou plánovacieho nástroja cron

Nástroj cron môžeme využiť na automatické spúšťanie skriptu. Démon cron umožňuje spúšťanie skriptov alebo príkazov v stanovený čas.

cron môžeme nastaviť prostredníctvom záznamov v súbore crontab. Syntax riadkov súboru crontab je nasledovná:

# m h dom mon dow   command
  • m: minúta, kedy sa má príkaz spustiť v rozsahu 0 až 59.

  • h: hodina, kedy sa má príkaz spustiť v rozsahu 0 až 23.

  • dom: deň v mesiaci, kedy sa má príkaz spustiť.

  • mon: mesiac, v ktorom sa má príkaz spustiť v rozsahu 1 až 12.

  • dow: deň v týždni, kedy sa má príkaz spustiť v rozsahu 0 až 7. Nedeľa sa dá zapísať buď pomocou 0 alebo 7.

  • command: príkaz, ktorý sa má vykonať.

Ak chceme pridať záznam do súboru crontab, použijeme príkaz crontab -e. Obsah súboru crontab si môžeme pozrieť pomocou príkazu crontab -l.

Ak chceme nastaviť spúšťanie skriptu zaloha.sh pomocou nástroja cron, najskôr zadáme príkaz:

sudo crontab -e
[Note]

Ak použijeme sudo spolu s príkazom crontab -e, budeme upravovať crontab používateľa root. To je nevyhnutné, ak chceme zálohovať systémové priečinky, pretože iba používateľ root ku nim má prístup.

Pridáme nasledujúci záznam do súboru crontab:

# m h dom mon dow   command
0 0 * * * bash /usr/local/bin/zaloha.sh

Pri použití tohto nastavenia sa bude skript zaloha.sh spúšťať každý deň o polnoci.

[Note]

Skript zaloha.sh je potrebné nakopírovať do priečinka /usr/local/bin/, lebo tak sme definovali cestu v súbore crontab. Skript môžeme umiestniť aj inam, ale v tom prípade je potrebné túto cestu zmeniť.

Viac informácií o súboroch crontab môžeme nájsť v časti “Zdroje”..

Obnovenie údajov z archívu

Potom ako vytvoríme archív, je dôležité ho otestovať. Môžeme to urobiť tak, že si necháme vypísať súbory, ktoré obsahuje. Najlepší test ale je, ak súbory z archívu obnovíme.

  • Ak chceme zobraziť obsah archívu, do príkazového riadka zadáme:

    tar -tzvf /mnt/backup/nazovpc-Pondelok.tgz
    
  • Ak chceme obnoviť súbor z archívu do iného priečinka, zadáme:

    tar -xzvf /mnt/backup/nazovpc-Pondelok.tgz -C /tmp etc/hosts
    

    Prepínač -C povie nástroju tar, aby presmeroval obnovovaný súbor do zadaného priečinka. Predchádzajúci príkaz obnoví súbor /etc/hosts do priečinka /tmp/etc/hosts. Nástroj tar obnoví súbor aj s celou jeho cestou a chýbajúce priečinky automaticky vytvorí.

    Z tohto dôvodu na začiatku cesty, ktorá sa má obnoviť, nie je zapísané  "/".

  • Ak chceme obnoviť súbory z archívu, zadáme nasledujúce príkazy:

    cd /
    sudo tar -xzvf /mnt/backup/nazovpc-Pondelok.tgz
    
[Note]

Týmto prepíšeme aktuálne súbory v súborovom systéme.

Zdroje

  • Viac informácií o vytváraní skriptov sa dozviete na stránke Advanced Bash-Scripting Guide

  • Vynikajúcou online knihou o vytváraní skriptov je Teach Yourself Shell Programming in 24 Hours.

  • O ďalších možnostiach nástroja cron sa môžeme dozvedieť na stránke CronHowto Wiki Page.

  • Viac o nástroji tar sa dozvieme na stránke GNU tar Manual.

  • O iných stratégiách pre vytváraní záloh sa dozvieme na stránke Wikipédie s názvom Backup Rotation Scheme.

  • V našom skripte sme použili na vytvorenie zálohy nástroj tar, no existuje mnoho ďalších nástrojov, ktoré sa dajú na tento účel použiť. Sú to napríklad:

    • cpio: používa sa na vytváranie kópií do a z archívov.

    • dd: je súčasťou balíka coreutils. Umožňuje nízkoúrovňové kopírovanie dát z jedného formátu do druhého

    • rsnapshot: systém na zálohovanie aktuálneho stavu systému - vytvorenie tzv. snap shotu.