Portál AbcLinuxu, 12. května 2025 06:58

Dotaz: zaloha ze snapshotu

28.5.2010 10:02 Marek
zaloha ze snapshotu
Přečteno: 422×
Odpovědět | Admin
Ahoj, mam skriptik, ktery mi vyzalohuje /etc ze snapshotu (ktery si vytvori) a synchronizuje jej s DVD-RAM. Kdyz ho spustim rucne, je vse ok.
#!/usr/bin/env bash

#####################
# zalohovaci skript #
#   (viz. nazev)    #
#####################

# promenne
CIL="/home/zaloha"
ZDROJ="/mnt/root-ss/etc"
PREFIX="etc_"
POSTFIX="`date +%d%m%y`.tar.bz2"
NAZEV=${PREFIX}${POSTFIX}

echo "vytvářím snapshot /"
/etc/init.d/snapshot-root start >/dev/null &&

echo "zálohuji adresář $ZDROJ"
tar -cjf ${CIL}/${NAZEV} "$ZDROJ" 2>/dev/null &&

echo "odpojuji snapshot /"
/etc/init.d/snapshot-root stop >/dev/null &&

echo "upravuji práva souboru zálohy"
find ${CIL} -name "${PREFIX}*" -print0 | xargs -0 chmod 640 &&

echo "hledám a mažu zálohy starší 3 dny"
find ${CIL} -name "${PREFIX}*" -mtime +2 -print0 | xargs -0 rm -f &&

echo "připojuji DVD-RAM"
mount /media/dvd-ram &&

echo "synchronizuji zálohy s DVD-RAM"
rsync -av --delete ${CIL}/ /media/dvd-ram/ >> /dev/null &&

echo "odpojuji DVD-RAM"
umount /media/dvd-ram

echo "zasílám informační e-mail a zapisuji stav do logu"
if [[ `echo $?` -eq 0 ]]; then
	echo -e "`date` Zaloha "$ZDROJ" byla provedena." >>/var/log/zaloha.log

	else
		echo -e "`date` Zaloha "$ZDROJ" SKONCILA CHYBOU!" >> /var/log/zaloha.log
		mail -s "zaloha "$ZDROJ"" example@example.net <<-MESSAGE

Dobry den,

   Zaloha "$ZDROJ" NEBYLA PROVEDENA v `date +%H:%M` `date +%d.%m.%Y`.
   
                                       Vas zalozni server :(

MESSAGE
fi

echo "HOTOVO!"
pokud dam spusteni do cronu, tak mi to napise toto:
/etc/init.d/snapshot-root: line 12: lvcreate: command not found
umount: /mnt/root-ss: not found
Jak je to mozne? Myslel jsem, ze cron to spusti naprosto stejne, jak ja rucne.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

28.5.2010 10:04 PEE
Rozbalit Rozbalit vše Re: zaloha ze snapshotu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Co zkusit zadat celou cestu k lvcreate ?
28.5.2010 10:47 Marek
Rozbalit Rozbalit vše Re: zaloha ze snapshotu
SUPER, pomohlo :-)

Jeste bych se rad zeptal, ted mam skriptik upraveny takto:
#!/usr/bin/env bash

# promenne
CIL="/home/zaloha"
ZDROJ="/mnt/root-ss/etc"
PREFIX="etc_"
POSTFIX="`date +%d%m%y`.tar.bz2"
NAZEV=${PREFIX}${POSTFIX}

echo "vytvářím snapshot /"
/etc/init.d/snapshot-root start &&

echo "zálohuji adresář $ZDROJ"
tar -cjf ${CIL}/${NAZEV} "$ZDROJ" 2>/dev/null &&

echo "odpojuji snapshot /"
/etc/init.d/snapshot-root stop &&

echo "upravuji práva souboru zálohy"
find ${CIL} -name "${PREFIX}*" -print0 | xargs -0 chmod 640 &&

echo "hledám a mažu zálohy starší 3 dny"
find ${CIL} -name "${PREFIX}*" -mtime +2 -print0 | xargs -0 rm -f &&

echo "připojuji DVD-RAM"
mount /media/dvd-ram &&

echo "synchronizuji zálohy s DVD-RAM"
rsync -av --delete ${CIL}/ /media/dvd-ram/ &&

echo "odpojuji DVD-RAM"
umount /media/dvd-ram

echo "záloha $ZDROJ byla úspěšně provedena" >>/var/log/zaloha.log
Potrebuju nejak osetrit to, aby se mi posledni radek zapsal do logu pouze tehdy, kdyz je vse opravdu OK. A pokud bude chyba, chtel bych, aby se zapsal do logu ta chybova hlaska (treba s nejakou omackou, ze zaloha nebyla provedena z duvodu...). Diky
28.5.2010 13:26 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: zaloha ze snapshotu
Je třeba ošetřovat, záleží na tom co vás zajímá ale vzhledem k tomu co děláte a jak to děláte, tak bych si asi napsal fci:
myexit(){
# logger -p error "Neco stojí za prd. Message: $1"
#  echo " ERROR !!! Message: $1" | /usr/bin/mailx \
#    -s "Nejaky muj predmet" -r pepastroj@moje.kubrt pepa@moje.kubrt
 echo "Error: $1" 
 exit $2
}
a pokaždém příkazu (mimo echo :)) otestoval (nebo příkaz můžete dát přímo do podmínky)
if [ $? != 0 ]; then
  myexit "Error: tento příkaz nefunguje" 3
fi
za předpokladu že si dáte ty && pryč (proč tam jsou?)
a to 2>/dev/null bych asi vyměnil za 2>>/var/log/zaloha_tar_err.log - pomůže to při analýze případného problému.
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
31.5.2010 10:12 Marek
Rozbalit Rozbalit vše Re: zaloha ze snapshotu
Dobry den, az dneska jsem si vsiml Vasi odpovedi.

>> ..ale vzhledem k tomu co děláte a jak to děláte..

To znamena, ze to delam spatne, nebo jak to bylo mysleno? Za kazde vylepseni budu rad :-)

>> ..tak bych si asi napsal fci..

Ta funkce se pise nekam na zacatek toho scriptu?

Jinak v tom mailu bude primo i ta chybova hlaska nebo ne?

>> a to 2>/dev/null bych asi vyměnil za 2>>/var/log/zaloha_tar_err.log - pomůže to při analýze případného problému.

Presmeroval jsem do /dev/null i chybovy vypis z tar, protoze mi to porad posilalo i tu hlasku s tim lomitkem..ted si ji nevybavim, ale tar to ma v oblibe
31.5.2010 10:50 Marek
Rozbalit Rozbalit vše Re: zaloha ze snapshotu
A jeste jedna vec. Kdyz pustim script rucne, je to ok, kdyz ho ale spusti cron, ulozi se chyba (pri vytvareni snapshotu):
Invalid argument 14,994G
Error during parsing of command line.
umount: /mnt/home-ss: not found
tady je script na snapshot:
#!/bin/sh

zarizeni="/dev/LVM-sda2-sdb2/home";     # LVM logický oddíl
pripojny_bod="/mnt/home-ss"; 		# Adresář, kam vytvořený obraz připojíme 
velikost_obrazu="14,994G"; 		# tolik změn lze na disku udělat, než se snapshot zaplní na 100%
nazev_obrazu="home-ss";		        # Název LVM obrazu
nazev_vg="LVM-sda2-sdb2";               # LVM skupina svazků (VG)

case "$1" in
    start)
        echo "Vytvářím obraz disku";
        /sbin/lvcreate -s -L ${velikost_obrazu} -n ${nazev_obrazu} ${zarizeni} &&
        mkdir ${pripojny_bod} &&
        mount /dev/${nazev_vg}/${nazev_obrazu} ${pripojny_bod};
        
;;
    restart)
        $0 stop
        $0 start
;;
    stop)
        echo "Ruším obraz disku";
        umount ${pripojny_bod} &&
        /sbin/lvremove -f /dev/${nazev_vg}/${nazev_obrazu} &&
        rmdir ${pripojny_bod} ;
;;
    *)
        echo "Použijte jeden z těchto parametrů: $0 {start|stop|restart}"
        exit 3
;;
esac
PS: A taky je spatne, ze prestoze se snapshot nevytvoril, script jede dal a tim padem nic nevyzalohuje a jeste smaze stare funkcni zalohy. Asi to bude potreba cele prepracovat, ze jo :-(
31.5.2010 21:24 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: zaloha ze snapshotu
Jste si jistým tím zápisem velikost_obrazu="14,994G", nebylo by správnější velikost_obrazu="14G" ?
Podle mě to vytváření nefunguje (neůže), viz hláška “Invalid argument 14,994G“ a následná „Error during parsing of command line“ - to je tytyty za tu velikost.
No a potože následné příkazy mkdir a mount spojujete && tak se neprovedou, bo první neskočil s návratovým kódem '0', takže je logické že není co odmontovat – poslední hlášení
Pokud si doplníte ještě (nemusíte, ale bude to jasné)
…mount /dev/${nazev_vg}/${nazev_obrazu} ${pripojny_bod} && exit 0;
exit 3
a
…rmdir ${pripojny_bod} && exit 0;
exit 3
Tak se vám ze sciptu dostane návratový kód (o restartu se fčul nebavě).

Problém 2 tkví ve výše uvedeném scriptu opakujete tuto chybu:
/etc/init.d/snapshot-root start &&
echo "zálohuji adresář $ZDROJ"
tar -cjf ${CIL}/${NAZEV} "$ZDROJ" 2>/dev/null &&
Toto prakticky znamená, že pokud se neprovede vytvoření snapshotu, nevypíše se to „echo“, ale další příkaz normálně pokračuje.
Takže i za echo by jste to musel celé zřetězit přes && - no nevím, proto jsem Vám navrhl každý návratový kód otestovat a dále pokračovat jen po úspěšném splnění.
např.:
…
echo "vytvářím snapshot"
/etc/init.d/snapshot-root start
if [ $? != 0 ]; then
  echo "Snapshot stávkuje"
  exit 3
fi

echo "zálohuji adresář $ZDROJ"
tar -cjf ${CIL}/${NAZEV} "$ZDROJ" 2>/dev/null
if [ $? != 0 ]; then
  echo "Tar má na háku a proc, to nevis, bo je to v /dev/null"
  exit 3
fi
…
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
31.5.2010 22:24 Marek
Rozbalit Rozbalit vše Re: zaloha ze snapshotu
Dekuji za reakce, trosku me ted tlaci cas, tak zareaguju jen na zacatek, ktery jsem si stacil precist. Ta velikost 14,994G mi opravdu funguje, pokud skript pustim rucne (a myslim tim budto ten zalohovaci a ten samotny "snapshotovy"), proto se divim, ze Cron s tim ma problem. Jinak ty && uz jsem tam v te dobe nemel (jen jsem to zde zapomnel zminit).

31.5.2010 22:27 Marek
Rozbalit Rozbalit vše Re: zaloha ze snapshotu
Pardon, ty && jsem dal pryc z toho "zalohovaciho skriptu".
1.6.2010 10:10 dustin | skóre: 63 | blog: dustin
Rozbalit Rozbalit vše Re: zaloha ze snapshotu
A není problém v tom, že v cronu to může běžet v jiném locale a tu desetinnou čárku to neskousne? Skripty jsou boj.
1.6.2010 12:38 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: zaloha ze snapshotu
Jak je naspáno níže, je možné, že pod např. českým locale to jede, ale cron má své vlastní prostředí (obvykle s minimálním nastavením cest apod.).
Jednoznačně chybový výpis je jasný - nežere to.
Ve scitptech spouštěných cronem raději předpokládejte, že nic není nastaveno. :)
Rozhodně bych to vyjádřil jako 15G, co má za význam, tam dávat o maličko méně. Pokud již není prostor na disku a chcete opravdu využít maximum prostoru (z nějakého neznámého důvodu :) ), tak to lze vyjádřit v MB.
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
1.6.2010 16:34 Marek
Rozbalit Rozbalit vše Re: zaloha ze snapshotu
Dobre, to je to, co jsem nevedel.

>> z nějakého neznámého důvodu

duvod byl pouze "esteticky" :-D
1.6.2010 21:05 Ash | skóre: 53
Rozbalit Rozbalit vše Re: zaloha ze snapshotu
Můžete samozřejmě také nastavit ta locales, třeba
LANG=C /sbin/lvcreate... 14.994G
nebo
LC_ALL=C /sbin/lvcreate... 14.994G
podle toho co používá lvcreate.
31.5.2010 20:41 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: zaloha ze snapshotu
„>> ..ale vzhledem k tomu co děláte a jak to děláte..“ - nijak jsem to nehodnotil, spíše jsem myslel styl, vypisované hlášky po každém kroku apod… – tak tím, že to tak děláte, chcete mít přehled po krocích

„Ano“ - fci si můžete napsat třeba na začátek scriptu.
Ten mail a zápis do logu je tam zakomentovaný znakem '#' takže je nefunkční, chtěl jsem jen nastínit možnosti.
Kdyby se to odkomentovalo, tak v mailu bude ten první parametr co té fci pošlete a ukončí script s návratovým kódem, předaným fci jako druhý parametr.

ad. přesměrování, může Vás tar zklamat s různých důvodů, a pokud nebudete mít někde výpis, tak nebudete vědět proč, a nějaký log navíc s pár bajtama už nikoho nezabije :)
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.