Articolul de rezervă prin dump

Pe de rezervă nu are nici un sens să spun: dacă administratorul de sistem nu înțelege acest lucru, atunci după primul eșec sau hacking server, sau pur și simplu dacă ștergeți accidental informații valoroase vor gândi la asta. Vreau să împărtășesc experiența mea, deși nu bogată, în acest domeniu.







Sistemele de rezervă a inventat multe, dar nu toate sunt la fel de utile în condiții de acces redus la server: programul de restaurare trebuie să se încadreze pe un suport amovibil bootabil și de a lucra cu ea fără a fi nevoie pentru a instala sistemul.

dump este un utilitar de backup tradițional pentru sistemele de operare asemănătoare unix. Acesta poate funcționa cu zece nivele de depozite incrementale, le puteți scrie pe casetele de filmare, pe orice dispozitive bloc și doar la fișierele dintr-o altă partiție. Puteți restabili întreaga secțiune, precum și fișiere și directoare individuale.

Utilitatea funcționează direct cu dispozitivul bloc care conține sistemul de fișiere și funcționează cu arborele nod (inode). Poate copia datele atât de pe dispozitivul demontat, cât și de cel folosit - montat. Pentru backup incremental, se folosește timpul de modificare a inodului.

Fișierul / etc / dumpdates stochează informații despre timpul fiecărui nivel incremental pentru fiecare partiție. Pentru un anumit dispozitiv, informațiile apar numai după crearea unei dumpări la nivel zero și sunt actualizate cu fiecare dump ulterior al oricărui nivel.

Dump poate arhiva date în zbor folosind diverse algoritmi de compresie. Care dintre ele - este mai bine să faceți față cu manualul (memoria omului) pe sistemul dvs. de operare. Pentru Linux, acesta este: zlib, bzlib și lzo. Zlib și bzlib suportă 9 nivele de compresie și, în consecință, o rată de scădere diferită. Lzo funcționează mai repede. Folosirea simultană a compresiei și a fluxului este posibilă dacă unitatea de bandă suportă blocuri cu lungime variabilă.

O dumpă adâncă poate fi împărțită în volume - automat, prin umplerea dispozitivului de recepție sau în bucăți de lungime specificată.

haldei EXEMPLU: reset depozit la zero bzlib comprimat bibliotecă de compresie la nivelul șasea, este tăiat într-un volum de 700.000 pe blocuri 1KB (fiecare fișier va fi plasat pe un CD sau 6 fișiere pe DVD), un volum este numit automat de prefixul adăugat în Rădăcină- și directorul / mnt / backup / 0 (at / mnt / de rezervă montată partiție separată nosuid). În final, intrarea în fișierul / etc / dumpdates este actualizată.

dump -0 -f / mnt / backup / 0 / root- -uMB 700000 -j6 /

Lucrul cu restaurarea.

Restaurarea din dump este efectuată de comanda de restaurare. N-am avut timp să-i înțeleg pe toți parametrii. Vă recomand să porniți omul mai repede decât aveți nevoie pentru a restaura datele! Vă voi spune cum să restaurați directorul din dump.

Exporta o listă de fișiere, le-a selectat pe cele necesare și le-a plasat căile complete într-un fișier din directorul curent.

restabili -t -M -f / mnt / backup / 0 / var- | \
grep '^ / var / www / virtuali / mysite / www / data' \
awk ''> listă

Apoi le-am restaurat din dump la directorul curent.

restabili -x -M -f / mnt / backup / 0 / var- -X lista

Strategie de rezervă.

Am ales următoarea strategie pentru server:
  • Odată ce un sfert sau o dată pe an (în funcție de gust și nevoi), se resetează o groapă de zero. Este cea mai mare și conține toate informațiile din secțiune. Prin urmare, pentru a nu suferi cu gunoaie cu mai multe gigabyte, merită să nu o faci des.
  • Oarecum mai des (o dată pe lună), se restabilește o dumpare a primului nivel. Și, ca să nu coincidă cu halda zero, o vom face pe 15. Acesta va conține toate modificările acumulate și, eventual, va crește la următoarea dumpă zero. Aceasta este, de asemenea, o dumpă masivă (depinde de viteza schimbărilor de date de pe disc).
  • O dată pe săptămână, este abandonat un al doilea nivel. Colectează într-o singură modificare schimbările pentru săptămână, acumulate de niveluri mai ridicate de halde. Trebuie să fie copiat în mod regulat la stocarea la distanță.
  • Pentru restul zilelor săptămânii - treptat - niveluri mai ridicate: 3, 4, 5, 6, 7 și 8. Acestea sunt mici și fiecare conține modificări într-o singură zi. Copiați-le sau nu - problema integrității datelor. Va fi mai bine să copiați - în caz contrar, în aceste halde va exista puțină semnificație.
  • Pentru a reseta manual, părăsim nivelul 9. Acest lucru poate fi util pentru erorile de administrator "neașteptate" când trebuie să restaurați versiuni vechi de config-uri sau fișiere șterse accidental și aveți nevoie de ele să nu fie o copie de rezervă de noapte, dar cât mai proaspete.

Resetarea haldelor se face cel mai bine pe timp de noapte, într-un moment în care serverul nu este încărcat și nu este ocupat cu alte sarcini programate. Perioada optimă este de la 3 la 5 dimineața. Puteți alege oricare alt moment, stabilind în practică perioada de încărcare minimă.

Automatizarea și optimizarea haldei.

Pentru o lansare programată, am folosit cron (este puțin probabil să alegeți un alt scheduler în Unix). Activitățile trebuie executate ca root. Prin urmare, ele pot fi introduse: fie de utilitarul root crontab. sau scris în fișierul / etc / crontab.

Un exemplu este fragmentul / etc / crontab:

05 5 * * 6 dump rădăcină -8 -f / mnt / backup / 0 / root- -uMB 700000 -j6 /
05 5 * * 5 dump rădăcină -7-f / mnt / backup / 0 / root- -uMB 700000 -j6 /
05 5 * * 4 dump rădăcină -6 -f / mnt / backup / 0 / root- -uMB 700000 -j6 /
05 5 * * 3 rădăcină dump -5 -f / mnt / backup / 0 / root- -uMB 700000 -j6 /
05 5 * * 2 dump rădăcină -4 -f / mnt / backup / 0 / root- -uMB 700000 -j6 /






05 5 * * 1 dump rădăcină -3 -f / mnt / backup / 0 / root- -uMB 700000 -j6 /
05 5 * 7 dump rădăcină -2 -f / mnt / backup / 0 / root- -uMB 700000 -j6 /
05 4 15 * * dump rădăcină -1 -f / mnt / backup / 0 / root- -uMB 700000 -j6 /
35 3 1 1,4,7,10 * dump rădăcină -0 -f / mnt / backup / 0 / root- -uMB 700000 -j6 /

Deci, este necesar să se repete pentru fiecare secțiune copiată. Acest lucru este incomod, greoi și există posibilitatea ca procesele de copiere să fie stivuite unul pe celălalt în timp și astfel să încetinească doar. Este momentul să scrie ceva pentru comoditate și automatizare.

# Verificați dacă parametrul este un număr de la 0 la 9. Aveți posibilitatea să luați o metodă mai slabă.
dacă # 91; _ $ 1. = _0 # 93; # 91; _ $ 1. = _1 # 93; # 91; _ $ 1. = _2 # 93; \
# 91; _ $ 1. = _3 # 93; # 91; _ $ 1. = _4 # 93; # 91; _ $ 1. = _5 # 93; \
# 91; _ $ 1. = _6 # 93; # 91; _ $ 1. = _7 # 93; # 91; _ $ 1. = _8 # 93; \
# 91; _ $ 1. = _9 # 93; ;
atunci
ecou "Sistem de backup: argument invalid!"
echo "Utilizare: dump.sh "
ieșirea 1;
Fi

echo "Start backup de sistem. Nivel $ DL."

# Deșeurile vechi, de la nivelul actual și de mai sus, pot fi șterse, astfel încât să nu poată ocupa spațiu.
pentru N în `seq $ 9`
face
rm -f / mnt / backup / $ / *
făcut

# Realizăm o resetare pentru fiecare partiție.
dump -f / mnt / backup / $ / rădăcină- - $ uMB 700000 -j6 /
dump -f / mnt / backup / $ / home- - $ uMB 700000 -j6 / home
dump -f / mnt / backup / $ / var- - $ uMB 700000 -j2 / var

ecou "Sistem de backup complet."
ieșire 0

Apoi, backup-ul de pornire se face astfel:

/ root / bin / dump.sh 0

Din moment ce dump funcționează cu inode, nu nume de fișiere, pentru excludere, trebuie să treci o listă de inode la comanda, pe care nu trebuie să o pui în dump. Acest lucru se face cu tastele -e sau -E. Prima tastă specifică lista inode direct pe linia de comandă, iar a doua cheie specifică numele fișierului text care conține lista inode (câte una pe linie). Dacă inode aparține unui director, directorul și toate fișierele și directoarele de mai sus nu vor fi incluse în memoria de stocare.

Numărul de inode pentru un fișier sau director poate fi obținut cu comanda stat:

stat -c% i / etc / dumpdates

În acest fel, puteți face o listă de inode și le puteți adăuga la un șir cu dump. dar într-un fel nu este convenabil și nu este flexibil. De exemplu, ar fi mai bine ca toate fișierele și directoarele să intre în dumpul zero, iar cele mai mari vor fi adăugate la haldele mai mari. Trebuie doar să automatizezi procesul.

În final, am primit un program în Perl. Încă nu are capacitatea de a lucra cu șabloane în nume de fișiere (metacaractere).

utilizați stricte;
utilizați Config. INI. Reader;

$ CONFIG = '/etc/dumper.conf';

# În mod prestabilit, permiteți-i să fie nivelul 9.
nivelul meu $ = 9;
# Setări implicite.
meu% config = # 40;
'dump-dir' => '/ mnt / back / backups / system'.
# 41; ;
meu # 40; $ fd. $ ini # 41; ;

# Parametrul nostru unic este să fie o cifră.
dacă # 40; $ ARGV # 91; 0 # 93; =

# Am analizat lista de fișiere separate de colonii și a crea o listă de inode pentru ei.
sub get_inode_list # 40; $)
# 123;
meu # 40; fișier $. @list # 41; ;

pentru $ file # 40; împărțit ":". $ _ _ # 91; 0 # 93; # 41;
# 123;
dacă nu # 40; - fișier # 41; ;
împingeți @ listă. # 40; Stat # 40; fișier $ # 41; # 41; # 91; 1 # 93; ;
# 125;

retur @ listă;
# 125;

# Pentru a evita scrierea parserului meu de configurare, am ales formatul ini și am instalat modulul corespunzător.
$ ini = Config. INI. Reader -> read_file # 40; $ CONFIG # 41; ;

# Secțiunea "*" prezintă parametrii generali.
dacă # 40; există $ ini -> # 123; '*' # 125; # 41;
# 123;
print STDERR "*** Config eroare! \ n";
ieșirea 1;
# 125;

# Înlocuim parametrii impliciți cu valori din config.
% config = # 40; % config. % # 123; $ ini -> # 123; '*' # 125; # 125; # 41; ;

dacă # 40; există $ config # 123; „Locuri de muncă“ # 125; # 41;
# 123;
print STDERR "*** Lista de locuri de muncă nu a fost găsită! \ n";
ieșirea 1;
# 125;

print "*** Nivelul de dump solicitat este '$ level'. \ n";
tipăriți "*** Ștergerea copiilor de rezervă vechi:". alătura # 40; ''. # 40; $ nivel. 9 # 41; # 41;. ". \ n";

pentru $ n # 40; $ nivel. 9 # 41;
# 123;
fișierul meu @files = glob # 40; alătura # 40; '/'. $ config # 123; 'Dump-dir' # 125;. $ n. '*' # 41; # 41; ;
dacă nu # 40; @files # 41; ;
meu @ cmd = # 40; 'Rm'. '-f'. @files # 41; ;
Imprimă-te # 40; ''. @cmd # 41;. "\ n";
sistem @cmd;
# 125;

print "*** Începutul sistemului de backup a început \ n";

# Parametrul "joburi" afișează numele "sarcinilor".
# Pentru fiecare sarcină din configurație trebuie să creați același bloc cu parametrii.
L_jobs. pentru slujba mea # 40; împărțit ". $ config # 123; „Locuri de muncă“ # 125; # 41;
# 123;
dacă nu # 40; există $ ini -> # 123; $ job # 125; există $ ini -> # 123; $ job # 125; # 123; 'Fs' # 125; există $ ini -> # 123; $ job # 125; # 123; 'Dump' # 125; # 41;
# 123;
print STDERR "*** Job '$ job': nu este configurat corect! \ n";
următorii L_jobs;
# 125;

dacă nu # 40; - e $ ini -> # 123; $ job # 125; # 123; 'Fs' # 125; # 41;
# 123;
print STDERR "*** Job '$ job': greșit fs atribuie! \ n";
următorii L_jobs;
# 125;

mele @args = # 40; "- $". '-f'. alătura # 40; '/'. $ config # 123; 'Dump-dir' # 125;. $ nivel. $ ini -> # 123; $ job # 125; # 123; 'Dump' # 125; # 41; # 41; ;

dacă # 40; există $ ini -> # 123; $ job # 125; # 123; 'Params' # 125; # 41;
# 123;
împingeți @args. împărțit ". $ ini -> # 123; $ job # 125; # 123; 'Params' # 125; ;
# 125;

# Un parametru al formularului "exc #" - pentru fiecare nivel al dump-ului. Conține o listă de excepții de la copii de rezervă.
dacă # 40; există $ ini -> # 123; $ job # 125; # 123; "nivelul exc $" # 125; # 41;
# 123;
mea @inodes = get_inode_list # 40; $ ini -> # 123; $ job # 125; # 123; "nivelul exc $" # 125; # 41; ;

dacă # 40; @inodes! = 0 # 41;
# 123;
împingeți @args. '-e'. alătura # 40; ''. @inodes # 41; ;
# 125;
# 125;

meu @ cmd = # 40; 'Dump'. @args. $ ini -> # 123; $ job # 125; # 123; 'Fs' # 125; # 41; ;
Imprimă-te # 40; ''. @cmd # 41;. "\ n";
sistem @cmd;
# 125;

print "*** Rezolvarea sistemului a fost finalizată. \ n";
ieșire 0;

Se instalează cu ușurință:

  • Despachetați și mergeți la directorul rezultat
  • ./Makefile.PL
  • face instalare

# 91; * # 93;
dump-dir = / mnt / backup
jobs = root home var

# 91; acasă # 93;
fs = / home
dump = home-
params = -uMB 700000 -j6


# 91; rădăcină # 93;
fs = /
dump = root-
params = -uMB 700000 -j6

exc0 =
exc1 = / tmp
exc2 = / tmp
exc3 = / tmp: / root / tmp; Experimentele rădăcină în copiile de rezervă nu ar trebui făcute
exc4 = / tmp: / root / tmp
exc5 = / tmp: / root / tmp
exc6 = / tmp: / root / tmp
exc7 = / tmp: / root / tmp
exc8 = / tmp: / root / tmp
exc9 = / tmp: / root / tmp

# 91; var # 93;
fs = / var
dump = var-
params = -uMB 700000 -j2

exc0 =
exc1 = / var / spool / postfix; nu este nevoie să faceți o copie de siguranță a corespondenței
exc2 = / var / spool / postfix: / var / lib / mysql: / var / nume / chroot / var / nume / date; baze de date și alte date dinamice
exc3 = / var / spool / postfix: / var / lib / mysql: / var / numit / chroot / var / named / date: / var / log: / var / www / / bușteni Virtuale; tot felul de bustean
/ var / lib / mysql: / var / named / chroot / var / nume / date: / var / log: / var / www / virtuals / logs
exc5 = / var / spool / postfix: / var / lib / mysql: / var / numit / chroot / var / named / date: / var / log: / var / www / / bușteni Virtuale
/ var / lib / mysql: / var / named / chroot / var / nume / date: / var / log: / var / www / virtuals / logs
/ var / lib / mysql: / var / named / chroot / var / nume / date: / var / log: / var / www / virtuals / logs
/ var / lib / mysql: / var / nume / chroot / var / nume / date: / var / log: / var / www / virtuale /
exc9 = / var / spool / postfix: / var / lib / mysql: / var / numit / chroot / var / named / date: / var / log: / var / www / / bușteni Virtuale

Rulează astfel:

/ root / bin / dumper.pl 0

Întrebările despre programarea în Perl pot fi stabilite în secțiunea corespunzătoare a forumului.







Articole similare

Trimiteți-le prietenilor: