Zálohování dat je bezesporu velmi důležitá věc. Většina lidí pracujích hodně s počítačem, se dostane jednou do chvíle, že pro ně začnou být jejich data cenná a začnou přemýšlet o jejich zálohování. Nejlépe pravidelném. I já mezi ně patřím a jelikož jsem člověk docela líný, rozhodl jsem si tuto činnost co nejvíce usnadnit – napsal jsem si skritpt v bashi, který potřebnou rutinu vykoná za mě.
Co je to Bash?
Jsem uživatelem operačního systému Mac OS X a tudíž můžu s výhodou použít mocného nástroje zvaného Bash. K tomuto nástroji se dostaneme spuštěním aplikace Terminál. Vyskočí na vás sice jen černé nic neříkající okno, ale nenechte se odradit, v tuto chvíli se opravdu stáváte pánem (paní) svého počítače. Terminál totiž dokáže poslouchat příkazy, které mu zadáte, a podle nich udělat snad vše, na co si vzpomenete – a ještě mnohem víc. Stačí tedy jen vědět, co mu chcete přikázat.
Zálohování souborů pomocí terminálu
Jakožto bývalý uživatel Linuxu jsem stále ještě docela zběhlý v používání příkazové řádky (terminálu) a používám ji velmi rád. Je prostě rychlejší a mocnější.
Obvykle jsem zálohoval svá data vždy jednou za čas, když se mi prostě chtělo. Většinou jsem to dělal posloupností několika příkazů. Dejme tomu, že jsem si chtěl zálohovat složku se svými dokumenty do školy.
tar czf `date +"%Y-%d-%m"`.School.tar.gz School
mv [[datum]].School.tar.gz ~/Backup/
A poté jsem si chtěl zálohovat další složku, například veškerou svoji práci.
tar czf `date +"%Y-%d-%m"`.School.tar.gz School
mv [[datum]].School.tar.gz ~/Backup/
Jde to i jednodušeji – skriptováním
Skriptování zní jako něco velmi složitého, určeného pouze těm divným lidem, kteří rozumí jedničkám a nulám. Ale ve skutečnosti to vůbec složité není. Skript v Bashi je jen posloupnost příkazů – nemusíte je psát každý zvlášť, ale zapíšete si je všechny do jednoho souboru a ten si poté spustíte. Jak jednoduché…
Konečně řešení
Takže jsem nelenil, využil chvilky volnějšího času a pustil se do skriptování. Mým cílem bylo vytvořit skript, kterému pouze předám soubory, které chci zálohovat, a on se již o vše ostatní postará. Pojmenoval jsem si ho backup.sh
.
#!/bin/bash
backupStorage=/Users/jirka/Backup/
# print usage info
usage() {
echo -e "`basename $0` usage:"
echo -e "`basename $0` backup_file [ backup_file, ... ]"
echo -e "`basename $0` default backup storage is '$backupStorage'"
}
# do backup by creating tar.gz file and place it into desired folder
# arg1: path to file to backup
# arg2: path where to place backuped file
backup() {
if [ $# -lt 2 ] && ([ ! -f $1 ] || [ ! -d $i ]) || [ ! -d $2 ]; then
echo -e "$@"
usage $@
exit 4
fi
date=`date +"%Y-%m-%d"`
fileName=`basename $1`.tar.gz
echo $fileName
tar czf /tmp/$fileName $1
if [ ! -d $2$date ]; then
mkdir $2$date
fi
mv /tmp/$fileName $2$date
}
# run the script
if [ ! -d $backupStorage ]; then
echo -e "`basename $0`: backuping storage '$backupStorage' does not exist"
exit 2
fi
if [ $# -lt 1 ]; then
usage $@
exit 2
fi
for i in $@; do
if [ -f $i ] || [ -d $i ]; then
backup $i $backupStorage
else
echo -e "`basename $0`: file '$i' does not exist"
fi
done
Nyní si můžu jednoduše zálohovat své soubory jediným příkazem. Nesmím však zapomenout přidat soubor práva na spouštění.
chmod u+x backup.sh
./backup.sh School Work Photos Documents/ImportantFile.txt
Ve skriptu je pro uložení mých zálohovaných soborů nadefinována složka Backup
v mém domovském adresáři. Po úspěšném ukončení skriptu se v ní vytvoří podsložka pojmenovaná podle aktuálního data a v ní všechny zálohované soubory zabalené do archivu tar.gz
.
Zálohování skutečně automaticky
Ti bystřejší pochopili, že tohle stále ještě není automatické zálohovaní. Pořád tu musí být někdo, kdo celý skript spustí. Ale i tento problém se dá snadno vyřešit. Mac OS X nám totiž nabízí automatické spouštění skriptů a to v podstatě kdykoliv si usmyslíte – buďto jen určitý den v měsíci v určitou hodinu nebo třeba v pravidelných intervalech. Řekněme, že budeme chtít spouštět náš zálohovací skript každý týden. K tomuto účelu nám slouží složka /etc/periodic/weekly
(v linuxu známá jako /etc/cron.weekly
) Zde se umisťují skripty, které chceme, aby se automaticky spustily každý týden. Bohužel takovýto automatický skript neumí přijmout žádné parametry, takže je potřeba ještě malé úpravy – vytvoření dalšího skriptíku.
Chci si každý týden zálohovat své pracovní dokumenty, fotky a školu. Svůj skript jsem si umístil v domovském adresáři ve složce bin
.
#!/bin/bash
/Users/jirka/bin/backup.sh /Users/jirka/School /Users/jirka/Work /Users/jirka/Photos
chown -R jirka:jirka /Users/jirka/Backup/`date +"%Y-%m-%d"`
Tento kód si uložíme do souboru a soubor umístíme do výše zmíněné složky (opět je nutné přidělit práva na spouštění pomocí příkazu chmod
). Tohe už jsem ale netestoval, takže nemohu zaručit dokonalou funkčnost. Já si své zálohy budu spouštět kdy chci sám a hlavně si vyberu pokaždé různé soubory, které chci zálohovat.
Závěrem
Skript není dokonalý. Obsahuje pár nedostatků. Konkrétně, jméno zálohovaného souboru se zjišťuje podle posledního názvu v dané cestě k souboru. Například /Users/jirka/documents/soubor.txt
bude zálohován jako soubor.txt.tar.gz
. To tedy znamená, že pokud skriptu předáme dva různé soubory, které ale končí stejně, např. School/predmet1/prednaska.pdf
a School/predmet2/prednaska.pdf
, bude zálohován pouze jeden z nich – ten poslední.
Druhá nevýhoda je, že skript nefunguje správně pro soubory obsahující ve svém názvu mezery (na tohle už mé skriptovací schopnosti zřejmě nestačí).
Také je nutné upozornit, že zálohovaná data samozřejmě musí být jinde, než na počítači, který je zálohován. Takže na úplný závěr je potřeba si všechny soubory z zálohovacího uložiště skopírovat na flash disk, vypálit na CD, nebo jako backupStorage
ve skriptu nadefinovat cestu k připojenému externímu disku. Externí disky na Mac OS X jsou vždy připojeny do složky /Volumes
.
A co time machine? neni to nejlepsi zpusob zalohy???
ano, to nejspíš je, ale musí mít člověk disk vyhrazený jen na time machine a musi ho mit neustále připojený a zálohování pribíhá každou hodinu (možná jde nastavit vetší interval, nevím), což taky spotřebuje nějaké CPU, RAM atp. Mě osobně vyhovuje víc jednou týdně si zálohovat, co potřebuji takhle ručně.