[Howto] Napravite sami skriptu za backup na linuxu

[Howto] Napravite sami skriptu za backup na linuxu

offline
  • Pridružio: 20 Feb 2005
  • Poruke: 4505
  • Gde živiš: planeta Zemlja

Backup je jedna od najbitnijih stvari na svakom racunaru. Korisnici danas cesto zaboravljaju da jedan backup moze da sacuva vase podatke i da tako lako mozete da "pregrmite" svaku gresku na racunaru buduci da su vasi podaci sacuvani (naravno ako vam crkne neki deo na racunaru to se malo teze "pregrmi"). Skoro sam i sam izgubio podatke (doduse ja cesto pravim backupove pa se nisam previse uzrujavao) pa me je to navelo da razmisljam o tome kako bi bilo da skriptu, koju sada koristim za backup, poboljsam i ucinim zaista kvalitetnom. Siguran sam da postoje mnoge aplikacije za ovu namenu medjutim ajmo da vidimo kako da napravimo sami skriptu koja ce sve to da obavlja za nas (a da cemo mi pritom biti upoznati sa kompletnom skriptom)!

Dakle posto koristimo linux mislim da je najlakse koristiti bash za ovako nesto. Imajte u vidu da je bash jako dobar ali da je potrebno imati dobro razradjen plan kako bi skripta licila na nesto. Kada je backup u pitanju morate znati da su bitni elementi za svaki backup: datum backupa, putanje, provere (detaljnije ce biti dole objasnjeno) i verifikacija backupovanih elemenata (citaj: md5sum buduci da je najlakse napraviti skriptu koja ce ovo da primenjuje).

Sta to znaci? Pa recimo da imate ~/backup koji se mora sacuvati na disk. Da bi backup bio iole dobar potrebno je da:
- su putanje do ~/backup direktorijuma utvrdjene (smesno je medjutim desava se da ljudi "previse klikcu" pa zaborave ovako nesto)
- da aplikacije kojima se sluzimo za backup nisu BETA, ALPHA... zato sto mozda te verzije nisu dovoljno stabilne!
- da se napravi lista sacuvanih fajlova i md5sum istih. Zasto? Pa recimo da posumnjate da vam je disk (koji je, lupam, kreiran pre 2 godine) ostecen. Ako vi imate md5 kreiran za svaki fajl unutar tog backupa vi lako mozete da proverite koji fajlovi su neosteceni a koji jesu. Uostalom pogledajte Brasero: on ce uvek (hteli vi to ili ne) da kreira md5sum check za svaki fajl koji narezete i te sumove ce da ostavi na disku! Ja ne vidim da se iko zali na ovu opciju Smile

Smesno zvuci ali ljudi cesto samo narezu "neke" podatke na disk bez obelezavanja datuma, bez file verifikacije nakon rezanja itd. Vi to nazivate backupom? Da, zasto da ne. A zasto taj backup ne bi imao datum kreiranja, listu narezanih fajlova i ostale korisne informacije?

Paznja: Buduci da ja necu da pisem tutorijal za totalne bash pocetnike, podrazumeva se da ste vi vec upoznati sa bashom (da poznajete osnovne komande i da znate na koji nacin moze bash raditi). Za one koji ne znaju osnove ne brinite buduci da se one mogu nauciti za manje od 1 sata Smile (pogledati sledeci link: [url=]Bash helping guide for begginers[/url]

Dakle idemo od pocetka (logicno jel?). Ovde cu vam pokazati kako ja radim backup pa mozda nekome sine jos bolja i kvalitetnija ideja (a siguran sam da hoce):


1. Prvi korak je kreiranje skripte i postavljanje putanja. Evo kako to kod mene izgleda:

user="${USER}"
datum="`date +%d-%m-%y`"
backupfile="/home/$user/file-backup-$datum.iso"
backupfilemm="/home/$user/multimedia-backup-$datum.iso"
backupdir="/home/$user/krak/softver/podesavanja/rucno-dodata"
backupdirweb="/home/$user/krak/multimedia/web-dizajn/cms/backup"
backupdirkumul="/home/$user/krak/softver/podesavanja/rucno-dodata/mix"
mmdir="/home/$user/krak/multimedia/zvuk/pesme"


Kao sto se da videti tu se nalaze putanje za:
- korisnicko ime
- datum (ovo koristim za mnoga imena fajlova)
- fajl za backup (ako koristite iso fajl)
- direktorijum u kome ce lokalno biti sacuvana podesavanja za aplikacije
.
.
.

ovo je finesa i to moze da podesi svako kako mu je volja. Sto su vam "univerzalnije" putanje to ce vam lakse biti da koristite skriptu na svakom sistemu (primer: za backupfile mogu da koristim /home/$user/backup putanju umesto /home/$user/file-backup-$datum.iso).


2. Sledeci korak je pravljenje uslova. AKo pogledate bash mogucnosti vi imate 2 opcije: while i if. While je jedna od petlji koja ce se vrteti sve dok se ne ispuni odgovarajuci uslov (koji je zadat petljom). TO je neupotrebljivo kada je backup u pitanju. Vama treba samo prosta provera koja ce vam uraditi jednu operaciju na jedan uslov odnosno drugu na drugi uslov. Samim tim uslovljavanje na sledeci nacin je dovoljno:

if [ -d/-f "PATH" ]; then
akcija
fi


AKo koristite ! -d/-f uslov (kojim se zadaje uslov da ako ne postoji dir/fajl) vi cete definitivno morati da koristite else kako bi sam uslov imao smisla (za backup jel).

Kako bi prakticno izgledala jedna prosta petlja:

if [ -f "/usr/bin/7z" ]; then
akcija
fi


Jednostavno zar ne? Ajde da vam sada pokazem kako bi (po mom misljenju) trebala da izgleda jedna petlja za backup:

if [ -f "/usr/bin/openbox" ]; then
#
if [ -d /home/$user/.config/openbox/ ]; then
if [ -f $backupdir/openbox.7z ]; then
rm $backupdir/openbox.7z
7z a $backupdir/openbox.7z /home/$user/.config/openbox/ -y
else
7z a $backupdir/openbox.7z /home/$user/.config/openbox/ -y
fi
fi
#
fi


Jednostavno? Pa jeste ali cekajte da vam prvo objasnim (da bi videli koliko je zaista jednostavno):
1. Prvo vrsimo proveru za aplikacijom. AKo je aplikacija instalirana na sistem ona ce biti u /usr/bin
2. Ako aplikacija postoji potrazicemo lokalni konfiguracioni fajl/direktorijum
3. Ako postoji lokalni konfiguracioni dir/fajl napravicemo njegov backup na zadatu putanju! Ako se na zadatoj putanji vec nalazi backup (od proslog puta recimo) onda cemo da ga izbrisemo i zamenimo novim!
Ovo je primer za cuvanje podataka neke aplikacije. Za cuvanje nekog direktorijuma onda vam ne treba prvi i glavni uslov tj. kod bi izgledao ovako:

if [ -d /home/$user/.config/openbox/ ]; then
if [ -f $backupdir/openbox.7z ]; then
rm $backupdir/openbox.7z
7z a $backupdir/openbox.7z /home/$user/.config/openbox/ -y
else
7z a $backupdir/openbox.7z /home/$user/.config/openbox/ -y
fi
fi


Primetite da su putanje navedene kao promenjljive kako bi ih lako mogli menjati. Ovako mozete lako da napisete skriptu koja ce biti upotrebljiva na svakom racunaru!

Petlju koju sam gore naveo mozete ponoviti 100000000x sve dok ne pokrijete svaku mogucu aplikaciju/direktorijum koji zelite da sacuvate. Imajte u vidu da se direktorijume koristi -d a za fajlove -f uslov (moze vam se desiti da se zabunite Smile


3. Sledeci korak vam dodje zadavanje konkretnih opcija za backup. Posto ste u predhodna 2 koraka kreirali vec i putanje i provere za skriptu sada je neophodno da razmotrimo sledece opcije:
- cuvanje liste fajlova
- pravljenje md5sum-a za iste
- mogucnost rezanja backupa na disk

Uprincipu sve ove opcije su vam jakoooo korisne.

Lista fajlova se lako kreira sledecom komadnom:

ls -lRFa BACKUP-PUTANJA > externi-fajl.txt

Sve ce lepo biti pormatirano i sacuvano sa infom o svim dozvolama i sl. Ovo moze biti veliki fajl!

Pravljenje md5sum-a za fajlove:

find BACKUP-PUTANJA -type f | xargs -i md5sum "{}" > externi-fajl.txt

Ovo je dug i dosadan proces pa budite strpljivi. Izlazni info je OGROMAN i fajl u koji ga cuvate ce biti veci (ako pravite neki veliki backup).

Rezanje na disk:
1. Pravljenje iso fajla:

genisoimage -J -R -A -D -v -input-charset utf-8 -o BACKUP-FIle.iso /putanja-do/foldera-za-backup


2. Rezanje iso fajla na disk:

wodim -v -eject dev=$uredjaj speed=2 BACKUP-FIle.iso

rezite na 2x ili 4x. Tako ste sigurni da rezac nece pobrljaviti Smile


4. Poslednja stvar: skripta bi bila najbolja kada bi imala opcije koje se pozivaju iz terminala. Dakle nesto tipa:

backup-skripta --opcija

Ovako se lako skripta moze dodati u cron i tako se vrsiti redovni backupovi Smile.

Ovo mozete uciniti na sledeci nacin:
- kreirajte funkcije u okviru skripte (primer: sacuvaj i brisi vam mogu biti osnovne funkcije)
- dodajte sledeci kod na sam kraj skripte (nakon svih funkcija izdefinisanih):


opcija="$1"
if [ -z "$opcija" ]; then
upotreba
exit 1
fi

case "$opcija" in
--opcija) akcija ;;
--opcija) akcija ;;
*) upotreba; exit 1 ;;
esac


Upotreba bi bila funkcija u kojoj se nalazi info o tome sta i kako se moze uraditi sa vasom skriptom (isto kao i opcija --help (primer: ls --help)). Ako vam to ne treba onda izbrisite upotrebu o ostavite samo exit 1 (mada moze i exit 0 buduci da se 1 koristi za izlaz kada se jave manje greske prilikom pokretanja opcija u skriptama). Ovaj deo se moze promeniti no ovako je default u vecini aplikacija pa ne vidim zasto bi se to menjalo Smile


Manje vise to vam je to. Ideje sam izneo a sada je na vama da probate ako zelite. Za kraj evo jedne backup skripte koju sam kreirao (davno medjutim tek je skoro pocela da lici na nesto i tek sam skoro postao siguran da nece da brljavi):
https://www.mycity.rs/must-login.png
Cisto da vidite kod i da vidite kako izgleda sve to kada se spoji sve sto sam gore naveo.



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
Ko je trenutno na forumu
 

Ukupno su 1015 korisnika na forumu :: 78 registrovanih, 12 sakrivenih i 925 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: -[CoA]-, 357magnum, A.R.Chafee.Jr., Alibaba1981, amstel, Apok, babaroga, Ben Roj, bojank, BORUTUS, Brada i Gibanica, branko7, burevesnik, cavatina, cikadeda, darkangel, DejanSt, DH, djboj, doklevise, Drugsparrow, Dukelander, Dusan Medojevic, Georgius, Gibli, gmlale, gonzagbs, Ivica1102, Jovan Nenad, kairos, kokodakalo, krlebgd77, Lazarus, Leonardo, Lieutenant, liman, maiden6657, Markoni29, mgolub, MilosKop, Mirage 2000N, Miskohd, Mixelotti, mustangkg, Nadla, naki011, Nobunaga, nuke92, Parker, proka89, raptorsi, RobinHood12, Rocker, S2M, sakota79, Shinobi, slonic_tonic, Smiljke, Snorks, sovanova95, ssekir75, Steeeefan, styg, tanakadzo, tmanda323, Toni, trundle, tubular, upitnik, vathra, Vatrogasaccc, virked, VladaNS1978, Wrangler, zillbg, zlaya011, Žukov, šumar bk2