ot Georgi Tellalov(11-07-2005)

reiting (34)   [ dobre ]  [ zle ]

Printer Friendly Variant za otpechatvane

Suzdavane na rezervni kopiia s TAR

Vsichki znaem (pone na teoriia) kolko vazhni sa arhivnite kopiia na dannite (backups). Mnogo ot nas sa izpitvali i zagubata na hard disk zaedno s vsichki danni na nego. Na men tova mi se e sluchvalo dva puti. Vupreki vsichko malko ot nas si praviat kopiia na dannite. Mislia, che prichinata v goliama stepen e lipsata na dostatuchno lesen nachin za tova. Zatova sega shte vi predlozha edno elementarno reshenie na tozi problem koeto razchita edinstveno na GNU tar (i po zhelanie gzip ili bzip2). Tova reshenie se rodi ot nuzhdata za platformeno nezavisima sistema za arhivirane, koiato da generira lesnodostupni arhivi (takiva koito da mogat da se otvariat i v nai-spartanski usloviia) i koiato ne se nuzhdae nikakvi „spetsialni“ funktsii.

Strategiia za arhivirane

Pulen arhiv (ili nivo 0) – vsichki danni, koito triabva da se zapaziat.

Diferentsialen arhiv (vsiako nivo nad 0) – vsichki promeneni danni ot posledno arhivirane ot po-gorno nivo.

Eto edna primerna strategiia:

  • Nivo 0 – ezhesedmichno pulno kopie na dannite. Pravi se vseki petuk vecher v 18 chasa.

  • Nivo 1 – ezhednevno diferentsialno kopie. Pravi se vsiaka vecher v 18 chasa (bez petuk).

  • Nivo 2 – ezhechasno diferentsialno kopie. Pravi se na vseki chas ot 09 do 17.

Pri taka opisanata shema v sluchai na bedstvie (naprimer grumnal hard disk) mozhem da vuzstanovim dannite si s maksimalna zaguba na 1 chas rabota. Vuzstanoviavaneto proticha taka:

  • Razarhivirane na nivo 0.

  • Razarhivirane na posledniia diferentsialen arhiv ot nivo 1.

  • Razarhivirane na posledniia diferentsialen arhiv ot nivo 2.

Reshenieto Kakvo shte pazim?

Purviiat vupros, koito shte si zadadem e „kakvo da zapazim“? Dobra ideia e /etc, /home, /root. Kum tiah mozhem da dobavim i niakoi spetsialni nuzhdi kato /usr/local/bin (poleznite shel skriptove, koito sme si napisali), /var/lib/iptables (ruchnite nastroiki, koito sme napravili na zashtitnata si stena), /var/lib/postgres (bazata danni koiato izpolzvame).

Kakvo niama da pazim?

Sledva da se zapitame, kakvi izklyucheniia iskame da napravim. Ako shte pazim dannite si na DVD sus sigurnost shte iskame da izklyuchim znachitelnata si kolektsiia ot mp3 muzika i divx filmi, tui kato veche gi imame na originalnite diskove, koito sme si kupili (ili vinagi mozhem da si gi svalim otnovo, ako avtorite im gi razprostraniavat svobodno). Da kazhem, che te ni stoiat v /home/multimedia. Iskame da izklyuchim i svobodniia softuer, koito si svaliame ot Internet, zashtoto vinagi mozhem da si go svalim otnovo (/home/downloads). Nakraia shte izklyuchim i vsichko ot /usr/local/bin, koeto ne e shel skript (t.e. ne zavurshva na .sh), zashtoto ne ni triabva arhiv na izpulnimite failove, koito sme si kompilirali ot sors.

Kak shte se podgotvim?

Kakvo triabva da napravi kompyuturut predi da zapochne arhiviraneto na dannite? Triabva da spre vsichki programi, koito biha mogli da zapisvat danni, koito shte arhivirame. Naprimer ako izpolzvame postgres bazi danni triabva da sprem survura i da sme sigurni, che ne se izpulniava „pochistvane“ na bazata (vaccum). Tova se nalaga, zashtoto ako kopirame failovete i v sushtoto vreme niakoia programa zapisva nova informatsiia v tiah mozhem da svurshim s chastichno kopie, koeto niama da raboti, ako se nalozhi vuzstanoviavane ot arhivite.

Parametrite na tar

Za iasnota shte izpolzvam dulgite varianti na optsiite na tar.

Arhivut se suzdava s optsiia –create i se zapazva vuv faila ukazan ot optsiia –file. Ako iskame da spestim miasto (za smetka na po-dulgo vreme za suzdavane na arhiva) mozhem da izpolzvame optsiia –gzip ili –bzip za kompresirane.

GNU tar mozhe da suzdava dva vida diferentsialni arhivi. Stariiat format (–incremental) suzdava nestandartni arhivi, koito mozhe da ne se chetat ot ne-GNU versii na tar. Zatova az predpochitam noviia (–listed-incremental). Toi suzdava otdelen opisatelen fail, sudurzhasht spisuk na vsichki direktorii, vklyucheni v arhiva. Tozi spisuk e neobhodim, za da bude suzdaden diferentsialniiat arhiv ot sledvashto nivo kakto i pri vuzstanoviavane na dannite ot arhiva.

Ostava nai-vazhnoto – da ukazhem kakvo shte vklyuchim i kakvo shte izklyuchim ot arhiva. Nai-lesno e dvata spisuka da se suhraniavat vuv failove i da instruktirame tar da gi chete ottam. Failut sudurzhasht elementite za arhivirane se zadava s optsiia –files-from, a tozi sudurzhasht izklyucheniiata – s –exclude-from. Tezi failove shte budat suotvetno /etc/backup/do-backup i /etc/backup/do-not-backup.

Eto kak izglezhda okonchatelnata ni komanda za suzdavane na pulen arhiv:

tar –create –file=/backup/level0-backup.tar –listed-incremental=/backup/level0-backup.list \

–files-from=/etc/backup/do-backup –exclude-from=/etc/backup/do-not-backup

Rezultatut ot izpulnenieto sa dva faila – level0-backup.tar, koito e standarten tar arhiv i level0-backup.list, koito e obiknoven tekstov fail.

Da suzdadem i edin arhiv ot nivo 1:

tar –create –file=/backup/level1-backup.tar –listed-incremental=/backup/level1-backup.list \

–files-from=/etc/backup/do-backup –exclude-from=/etc/backup/do-not-backup

Zabelezhete, che izpolzvame drug opisatelen fail (level1-backup.list, a ne level0-backup.list). Za da postignem naistina kakvoto iskame, t.e. arhiv ot nivo 1, triabva predvaritelno da sme kopirali level0-backup.list v level1-backup.list. Za da razberem, kak tochno raboti tova, triabva da se zadulbochim v rukovodstvoto na tar. Na moiata Debian sistema man tar predlaga pogled ot dosta visoko. Podrobnostite sa skriti v info tar. Tam chetem, che optsiiata –listed-incremental izpolzva ukazaniia i kato parametur fail, za da suzdade diferentsialen arhiv ili suzdava nov fail, ako ukazaniiat ne sushtestvuva kato pri tova vklyuchva vsichko izbrano v arhiva (t.e. suzdava arhiv ot nivo 0). Nakratko kazano, kogato iskame da suzdadem diferentsialen arhiv triabva da izpolzvame veche sushtestvuvasht opisatelen fail. Kopiraneto se nalaga, zashtoto tar promenia opisatelniia fail, kato vklyuchva v nego samo direktoriite, koito sudurzhat promeni. Taka ako izpolzvame originalniia opisatelen fail, toi shte bude promenen i niama da sme v sustoianie da suzdavame poveche arhivi ot sushtoto nivo.

Ne se ostaviaite da vi oburkam s tezi obiasneniia – v sledvashtata glava muglata se razseiva s primeri!

Avtomatizatsiia

Glava za naprednali potrebiteli. Tezi koito ne se interesuvat ot tehnicheskite podrobnosti mogat da preskochat napravo na glava Izpolzvane.

Vsichko kazano dotuk sigurno zvuchi mnogo dobre na teoriia (pone az se nadiavam taka, zashtoto obratnoto bi oznachavalo, che nikak ne me biva v obiasneniiata), no trugnem li da go prilagame na praktika, mnogo skoro shte otkriem, che reshenieto dalech ne e tova, koeto statiiata pretendira da e – lesno za izpolzvane. Vuvezhdaneto na komanda ot dva reda vseki den (a za niakoi chitateli i po-chesto), e vsichko drugo, no ne lesno, ili burzo, ili udobno. Da ne govorim, che tova dalech ne e edinstvenata komanda – osobeno ako iskame da zapisvame arhivite na DVD. Zatova shte triabva da ulesnim zhivota si s malko avtomatizatsiia. Za tselta shte pribegnem do uslugite na GNU bash. Predi da produlzha iskam da se izvinia na tezi ot vas, koito vse oshte pomniat purvonachalnoto mi tvurdenie, che reshenieto e bazirano samo na GNU tar – vinovat!

Dokumentatsiiata na tar govori za gotovi skriptove – backup i restore – chast ot paketa tar. V moiata instalatsiia tezi skriptove ne prisustvat.

I taka neka si suzdadem dva dopulnitelni faila – backup.sh i options. Skripta backup.sh shte postavim v lyubimata si direktoriia za izpulnimi failove, koiato e vklyuchena v putishtata ni (/usr/local/bin e edna dobra ideia), a konfiguratsionniia fail options shte dobavim kum /etc/backup.

Sudurzhanieto na backup.sh i komentarite kum nego sledvat:


1 #!/bin/bash

2

3 LEVEL=""

4 for i; do

5 case "$i" in

6 --level*)

7 LEVEL=${i#*=}

8 ;;

9 esac

10 done

11

12 test -z "$LEVEL" && echo "No level selected" && exit 1

13

14 test -f /etc/backup/options && . /etc/backup/options

15

16 test -z "$DESTINATION_PATH" && echo "Missing destination path" && exit 2

17

18 NOW=$(date +%Y-%m-%d-%H-%M)

19 ARCHIVE_FILE="${DESTINATION_PATH}/${HOSTNAME}-level${LEVEL}-${NOW}.tar.bz2"

20 LIST_FILE="${DESTINATION_PATH}/${HOSTNAME}-level${LEVEL}-${NOW}.list"

21

22 if [ $LEVEL -gt 0 ]; then

23 LOW_LEVEL=$((LEVEL-1))

24 LAST_LIST_FILE=$(ls "${DESTINATION_PATH}/${HOSTNAME}-level${LOW_LEVEL}"*list 2>/dev/null | tail -1)

25 test -z "$LAST_LIST_FILE" && echo "Level $LOW_LEVEL backup not found" && exit 3

26 cp "$LAST_LIST_FILE" "$LIST_FILE"

27 fi

28

29 /etc/init.d/postgresql stop

30 tar --create --listed-incremental="$LIST_FILE" --file="$ARCHIVE_FILE" \

31 --directory=/ --exclude-from=/etc/backup/do-not-backup \

32 --files-from=/etc/backup/do-backup

33 /etc/init.d/postgresql start


Redove ot 3 do 10 obrabotvat edinstveniia parametur na skripta – nivoto na arhiva, koito shte bude suzdaden. Red 14 zarezhda konfiguratsionniia fail v sluchai, che e nalichen. Redove 19 i 20 definirat imenata na arhivniia i opisatelniia fail. Neka oburnem vnimanie, che imenata sa malko po-opisatelni ot primerite v prednata glava. Te sudurzhat imeto na kompyutura (hostname), chiito danni se arhivirat, kakto i datata i chasa na suzdavaneto na arhiva. Datata i chasut se predstaviat vuv format GODINA-MESETS-DEN-CHAS-MINUTI (red 18).

Nai-interesnata chast ot skripta sa redove ot 22 do 27. Te osiguriavat suzdavaneto na arhivi ot nivo 1 i po-visoki sledvaiki mnogo prost algoritum. Vsiako nivo nad 0 se suzdava kato se bazirame na posledniia arhiv ot edno nivo po-dolu. Redove 24 do 26 kopirat posledniia opisatelen fail ot po-dolnoto nivo v opisatelniia fail na tekushtoto nivo i redove 30 do 32 suzdavat noviia diferentsialen arhiv na bazata na tozi opisatelen fail.

Predi suzdavaneto na arhiva se spirat vsichki uslugi, koito mogat da mu poprechat (red 29) i sled tova se puskat nanovo (red 33).


Da razgledame i /etc/backup/options:

1 DESTINATION_PATH="/backup"


V nastoiashtata si versiia ne e osobeno bogat na sudurzhanie i spokoino mozhe da bude premesten v backup.sh. Napravil sum go taka, za da bude po-pregledno v sluchai, che v budeshte se poiavi nuzhdata ot poveche nastroiki.


Eto i primernoto sudurzhanie na /etc/backup/do-backup:

1 usr/local/bin

2 etc

3 home

4 var/lib/iptables

5 var/lib/postgres

6 root


Sledva /etc/backup/do-not-backup:

1 usr/local/bin/*[^.][^s][^h]

2 home/multimedia

3 home/downloads


Izpolzvane
  • Iztegliame si failovete opisani v statiiata ot tuk.

  • Razarhivirame s komandata tar -C / -xvvf backup.tar (ot root shell)

Sega veche mozhem da suzdadem purviia si pulen arhiv s komandata:

backup.sh –level=0

Taka suzdadeniiat arhiv se namira v /backup. Sega mozhem da si go zapishem na SD/DVD s lyubimata si programa ili da go zapazim na drugo miasto po izbran ot nas nachin.

Napulno avtomatichno arhivirane se postiga s pomoshtta na /etc/crontab, no tova e izvun obhvata na statiiata.

Vuzstanoviavaneto ot arhiva mozhe da stane po dva nachina:

  1. tar –extract –file=/backup/.tar

  2. tar –extract –file=/backup/.tar –listed-incremental=/backup/.list

Razlikata e, che vtoriiat variant shte iztrie vsichki failove, koito ne prisustvat v arhiva. Toi se izpolzva za vuzstanoviavane na tochnoto sustoianie na failovata sistema kum momenta na arhiviraneto. S nego triabva da se vnimava, zashtoto ako iskame samo da vuzstanovim iztrit po greshka fail, mozhem da zavurshim s iztrivane na drugi failove, koito oshte niamame arhivirani.

Zaklyuchenie

Razgledahme reshenie, koeto e orientirano kum obiknoveni potrebiteli sus skromni nuzhdi. To e dostatuchno guvkavo, za da bude izpolzvano na vseki YUniks variant, koito razpolaga s bash i GNU tar, kakto i na Uindous s pomoshtta na cygwin ili msys. Taka suzdadenite arhivi mogat da budat zapisvani vurhu lentovi ustroistva, prezapisvaemi optichni nositeli, mrezhovi skladove i t.n. Naprimer za dobaviane na nov diferentsialen arhiv vurhu prezapisvaemo DVD mozhem da izpolzvame slednata komanda:

growisofs -M /dev/dvd -R -J /backup/.*

Niakoi putishta v izpolzvanite primeri sa spetsifichni za Debian GNU/Linuks i mozhe da se nuzhdaiat ot promiana za da rabotiat na drugi OS.


Tazi statiia (pri tova dobre formatirana) e dostupna sushto v OpenOffice i HTML format.

Priemam predlozheniia za podobrenie pod formata na krupki na adres gtellalov na bigfoot.com.




<< amaroK - next generation multimedia player | Virtualen tunel na bazata na Linux -2 >>