Fórum Ubuntu CZ/SK
Ostatní => Tipy a triky pro Linux => Téma založeno: existpierre 02 Února 2008, 21:25:46
-
Zlozku /home mam na tom istom oddieli ako cely system. Podla Wiki navodu (http://wiki.ubuntu.cz/Z%C3%A1loha_a_obnova_syst%C3%A9mu?highlight=%28z%C3%A1loha%29%7C%28a%29%7C%28obnova%29) som si spravil skript pre zalohovanie, o ktory by som sa chcel s Vami podelit.
Najprv si vytvorte povedzme na plochu prazdny subor mybackup
pravym mysitkom na plochu - vytvorit dokument - prazdny subor
Klik nan pravym mystikom - prava - povolit spusenie suboru ako programu.
Otvorte ho a do neho vlozte tento kod:
#!/bin/bash
trap Prerusene INT
Prerusene()
{
echo
echo "Zalohovanie bolo prerusene uzivatelom!"
echo
exit
}
extractZnakVerzia()
{
najvacsieCislo=0
posunVerzia=$(($dlzkaStrFile - 4))
txtKon=${file:0:posunVerzia}
verzia=${txtKon:19}
}
extractZnakDatum()
{
posunZnak=$(($dlzkaStrFile - 17))
posunVerzia1=$(($dlzkaStrFile - $posunZnak))
txtKon1=${file:0:posunVerzia1}
extrDatum=${txtKon1:7}
}
NajvyssiaVerzia()
{
cislo=0
inc=0
for file in *.tgz; do
dlzkaStrFile=${#file}
case $dlzkaStrFile in
24 )
extractZnakVerzia
extractZnakDatum
if [ $extrDatum = $1 ]
then
inc=$(($inc + 1))
pVers[$inc]=$verzia
fi
;;
25 )
extractZnakVerzia
extractZnakDatum
if [ $extrDatum = $1 ]
then
inc=$(($inc + 1))
pVers[$inc]=$verzia
fi
;;
26 )
extractZnakVerzia
extractZnakDatum
if [ $extrDatum = $1 ]
then
inc=$(($inc + 1))
pVers[$inc]=$verzia
fi
;;
esac
done
dlzkaPoleVer=${#pVers[@]}
j=0
while [ $j -lt $dlzkaPoleVer ]; do
j=$(($j + 1))
if [ ${pVers[$j]} -gt $najvacsieCislo ] ; then
najvacsieCislo=${pVers[$j]}
fi
done
}
Titulok()
{
echo "##################################################"
echo "##################################################"
echo "## ##"
echo "## Zálohovanie systému v2.1 ##"
echo "## ##"
echo "## Pred inštaláciou vypnite všetky aplikácie ##"
echo "## ##"
echo "## created by existPierre ##"
echo "## ##"
echo "## 02.02.2008 ##"
echo "## ##"
echo "##################################################"
echo "##################################################"
echo
}
Zalohovat()
{
vCislo=1
txtZaloha="backup_"
suborDatum="`date +%d`_`date +%m`_`date +%Y`"
pripona=".tgz"
NajvyssiaVerzia $suborDatum
cVerzia="_v$najvacsieCislo"
celySuborNazov="$txtZaloha$suborDatum$cVerzia$pripona"
if test -e $celySuborNazov
then
echo -n "Najvyssia verzia je $najvacsieCislo, inkrementujem a vytvaram novu zalohu "
najvacsieCislo=$(($najvacsieCislo + 1))
cVerzia="_v$najvacsieCislo"
celySuborNazov="$txtZaloha$suborDatum$cVerzia$pripona"
echo $celySuborNazov
echo
echo -n "Proces zálohovania sa začne za: "
odpocit=5
for x in 1 2 3 4 5; do
echo -n "$odpocit "
odpocit=$(($odpocit - 1))
sleep 1.5
done
echo
if sudo tar czf $celySuborNazov --exclude=/proc --exclude=/lost+found --exclude=/mnt --exclude=/media --exclude=/sys --exclude=$cestaSkript$celySuborNazov /
then
echo
echo "Zálohovanie úspešne dokončené!"
else
echo
echo "Zálohovanie sa neskončilo korektne!"
fi
else
echo -n "Neexistuje zaloha pre den $suborDatum, vytvaram "
najvacsieCislo=1
cVerzia="_v$najvacsieCislo"
celySuborNazov="$txtZaloha$suborDatum$cVerzia$pripona"
echo $celySuborNazov
echo
echo -n "Proces zálohovania sa začne za: "
odpocit=5
for x in 1 2 3 4 5; do
echo -n "$odpocit "
odpocit=$(($odpocit - 1))
sleep 1.5
done
echo
if sudo tar czf $celySuborNazov --exclude=/proc --exclude=/lost+found --exclude=/mnt --exclude=/media --exclude=/sys --exclude=$cestaSkript$celySuborNazov /
then
echo
echo "Zálohovanie úspešne dokončené!"
else
echo
echo "Zálohovanie sa neskončilo korektne!"
fi
fi
}
clear
cestaSkript="Sem vlozte cestu k priecinku, kde sa ma zaloha ukladat"
if test -d $cestaSkript
then
cd $cestaSkript
if [ $# -eq 0 ]; then
Titulok
echo -n "Prajete si zálohovať systém?[a/n]: "
read zadanie
k=1
while [ $k -eq 1 ]; do
case $zadanie in
a | ano )
Zalohovat
k=0
;;
n | nie )
k=0
exit
;;
* )
echo -n "Napíš a/ano alebo n/nie: "
read zadanie
k=1
;;
esac
done
else
case $* in
--a | --ano )
Zalohovat
;;
--n | --nie )
exit
;;
--h | --help )
Titulok
echo "--a alebo --ano pre okamzite zalohovanie"
echo "--n alebo --nie pre zrusenie zalohovania"
echo "--h alebo --help pre pomoc"
echo "ctrl+c pre zrusenie zalohovania pocas jeho vykonavania "
echo
esac
fi
else
echo "Zadana cesta nebola najdena, program konci!"
exit 0
fi
Potom na 168. riadku si navolte cestu, kam sa ma ta zaloha ukladat
cestaSkript="Sem vlozte cestu k priecinku, kde sa ma zaloha ukladat"
Tento skript si pod rootom presunte do /bin zlozky
sudo mv ~/Plocha/mybackup /bin/mybackup
Potom uz len staci v konzole zadat
mybackup
Pre vsetky info mozte zadat
mybackup --help
Tak ako je to aj v title napisane, je odporucane mat pocas zalohovania vsetky aplikacie vypnute, koli korektnemu ukonceniu
Je to robene presne podla prikazu na wiki, takze ak mate ine vynimky, ktore nechcete zalohovat, doplne v prikaze. pozor je to tam dvakrat
enjoy :)
-
Jak se provede obnova této zálohy.?
Děkuji
-
Jak se provede obnova této zálohy.?
Děkuji
Ta je uz podla postupov, ktore sa nachadzaju na hore zmienenej wiki. Pretoze pustas liveCD, na ktorom sa ten skript nenachadza.
-
Potřebuji poradit.Mám Home jinde,dal jsem exclude na home a ono ho to stejně zálohovalo.Kde je prosím problém.
Děkuji
-
Poslete prikaz jakym jste zalohoval.
-
Potřebuji poradit.Mám Home jinde,dal jsem exclude na home a ono ho to stejně zálohovalo.Kde je prosím problém.
Děkuji
Bud nespravne zadany --exclude, alebo bol zadany len do jedneho prikazu v skripte, pricom som upozornoval, ze treba upravit oba. Pokial neexistuje v navolenom priecinku ziadna zaloha, spusti sa ten prvy prikaz, ktory ho pomenuje verziou 1. Ked uz daka verzia v tom dni existuje, spusti sa ten druhy, kde pred tym verziu inkrementuje. Tie prikazy su na riadku 132 a 155.
-
1. if sudo tar cvpzf /backup.tgz --exclude=/proc --exclude=/lost+found --exclude=/mnt --exclude=/media --exclude=/sys --exclude=/home --exclude=/backup.tgz /
2. if sudo tar cvpzf /backup.tgz --exclude=/proc --exclude=/lost+found --exclude=/mnt --exclude=/media --exclude=/sys--exclude=/home --exclude=/backup.tgz /
Kde je prosím chyba?
Děkuji
-
1. if sudo tar cvpzf /backup.tgz --exclude=/proc --exclude=/lost+found --exclude=/mnt --exclude=/media --exclude=/sys --exclude=/home --exclude=/backup.tgz /
2. if sudo tar cvpzf /backup.tgz --exclude=/proc --exclude=/lost+found --exclude=/mnt --exclude=/media --exclude=/sys--exclude=/home --exclude=/backup.tgz /
Kde je prosím chyba?
Děkuji
Chybi Vam tam mezera mezi slovama.
-
OK už to jede.Děkuji
-
na konci mi to hodi chybu, :-[
-
myslis, to ze sa to neskoncilo korektne? Ak jo, tak si povypinaj pocas zalohovania vsetko. Ja mam vtedy zapnutu len online music a pidgina, najlepsie je zalohovat po restarte. Vtedy je najistejsie, ze sa to ukonci korektne. Pokial mas debian, mal by si ten mybackup pustit asi pod rootom, neviem ci idu zalohovat subory, na ktore nemas pravo pristupovat. Na toto by som chcel aj ja odpoved.
btw este som trosku upravil ten prikaz
if sudo tar cvpzf $celySuborNazov --exclude=/proc --exclude=/lost+found --exclude=/mnt --exclude=/media --exclude=/sys --exclude=$cestaSkript$celySuborNazov /
to pre istotu, aby nezalohoval zalohu (este rano tu bol prispevok ohlade tohoto)
-
Este male upozornenie, aj ja som si to vsimol po dlhsiej dobe co som niekolkokrat bol na wiki navode. V navode je spomenute, ze ked vrati script :
tar: Za behu programu nastala chyba
u mna
tar: Za behu programu nastala chyba
Zálohovanie sa neskončilo korektne!
mozte tu chybu odignorovat
-
4 eXistPierre <<
ad.1) sudo ve skriptu? ehm ehm .. no nic .. v ubuntu je to asi nutne ..
ad.2) naprosto neprehledne .. ve jmenech promennych a funkci se pouziva podtrzitko // "_"
take se nekombinuje nahodile upper a lower case .. ve jmenech promennych se pouziva upper one a ve fcich lower ::
MAIN_VAR=$1;
main_fce() {
# neco
}
ad.3) *vse* co testujeme je vhodne "$uvozovkovat"
ad.4) man echo
echo -e '\ntoto je to same aka\n';
echo
echo toto je to same aka
echo
cat << EOF;
toto je to same aka
EOF
ad.5) k cemu inicializovat promenne aka a=x; b=y; c=z abychom je pouzili via $a$b$c ??? nestaci potom a=xyz ???
ad.6) nac presouvat skript do /bin, kdyz na nej potrebujeme rootovska prava ?? nedela se nahodou na zacatku jednou ::
if [ "$UID" -ne "0" ]; then
echo "sorry kid ..";
exit;
fi
ad.6) +tisic drobnych vychytavek aka for((x=0;x<10;x++)) { echo $x; }, mezer mezi bloky kodu, pouzivani a inicializovani promenych na oznaceni vyskoku z cyklu apod ..
rad bych skript vyzkousel, ale minimalne pro me je to naprosto neprehledny spaghetti code (http://en.wikipedia.org/wiki/Spaghetti_code), kterej chce heslo roota, takze ..
ad.x) kdyz uz teda zalohujes metodou "vypust jenom co je receno" (a ne opacne, tedy zalohuj co je receno), tak proc tam nejni excludnute treba /dev ???
-
ad.y) ps. eXistPierre neber si to osobne, ale fandim vsem snazivym hochum a devcatum, a u Tebe si moc dobre pamatuju, ze jsi tady nekde resil i veci jako c/c++ a vubec .. to jsou me pripominky a nemyslim to konfrontacne .. kdybys to nebyl Ty, ale nejaky noname prispivatel, tak u takovehleho kodu nestravim ani minutu ..
zdravi ntz
-
ad.y) ps. eXistPierre neber si to osobne, ale fandim vsem snazivym hochum a devcatum, a u Tebe si moc dobre pamatuju, ze jsi tady nekde resil i veci jako c/c++ a vubec .. to jsou me pripominky a nemyslim to konfrontacne .. kdybys to nebyl Ty, ale nejaky noname prispivatel, tak u takovehleho kodu nestravim ani minutu ..
zdravi ntz
robil som to podla wiki, bol to moj prvy skript a funguje to. co sa tyka upper a lower case, uz som si na taky zvykol. Ale ked budem mat cas, tak sa na to kuknem a skusim to cele zprehladnit. Aj ked uzivatelovi to moze byt sumafuk, ked to funguje tak ako ma. Viem ze sudo by malo byt pocas spusatnia app, ale ja som nejak lenivy a chcel som si to dat len ako mybackup a potom uz len zadat heslo. ::)
neberiem si to osobne, skor dakujem za kritiku a tipy ;)