— je besplatan, open-source deduplicator — alat sličan arhiveru koji značajno smanjuje veličinu sigurnosnih kopija, a također omogućava organiziranje shema inkrementalnih i diferencijalnih sigurnosnih kopija, i ne samo to.
Ovo je uvodni članak koji opisuje mogućnosti. Samo korištenje hashget-a (vrlo jednostavno) opisano je u projekta i .
Usporedba
Po zakonu žanra, odmah ću početi s intrigom — usporedbom rezultata:
Uzorkovanje podataka
raspakirana veličina
.tar.gz
hashget .tar.gz
WordPress-5.1.1
43 Mb
11 Mb ( 26% )
155 Kb ( 0.3% )
Linux kernel 5.0.4
934 Mb
161 Mb ( 20% )
4.7 Mb ( 0.5% )
Debian 9 (LAMP) LXC VM
724 Mb
165 Mb ( 23% )
4.1 Mb ( 0.5% )
Pozadina, kakav bi trebao biti idealan i učinkovit backup
Svaki put kad sam radio sigurnosnu kopiju novostvorene virtualne mašine, nisam mogao da se otarasim osjećaja da nešto radim pogrešno. Zašto dobijam tako obimnu sigurnosnu kopiju na sustavu gdje je moje dragocjeno, vječno stvaralaštvo — jedinstveni index.html s tekstom 'Hello world'?
Zašto u mojoj sigurnosnoj kopiji postoji 16-megabajtni /usr/sbin/mysqld? Da li je baš meni pripala čast da čuvam ovu važnu datoteku, i ako ne uspijem — ona će biti izgubljena za čovječanstvo? Vjerojatno ne. Ona se čuva na visoko pouzdanim debian serverima (njihova pouzdanost i neprekidnost se ne može usporediti s onim što mogu ja osigurati), kao i u rezervnim kopijama (milionima njih) drugih administratora. Moramo li za povećanje pouzdanosti kreirati 10 000 000 + 1 kopiju ove važne datoteke?
U osnovi to rješava ovaj problem. Pri pakiranju — stvara vrlo malu sigurnosnu kopiju. Pri raspakiranju — potpuno raskrinkanu sustav, sličnu onoj koja bi bila uz tar -c / tar -x. (Drugim riječima, ovo je bezgubitno pakiranje)
Kako funciona hashget
U hashgetu postoje pojmovi Package i HashPackage, s njihovom pomoću izvršava dedupliciranje.
Paket (paket). Datoteka (obično arhiva .deb ili .tar.gz) koja se može pouzdano preuzeti s interneta i iz koje se može dobiti jedna ili više datoteka.
HashPackage — mala JSON datoteka koja predstavlja Package, uključujući URL paketa i hash-e (sha256) datoteka iz njega. Na primjer, za paket mariadb-server-core veličine 5 megabajta, veličina hashpackage-a iznosi svega 6 kilobajta. Otprilike tisuću puta manje.
Dedupliciranje — stvaranje arhive bez dupliciranih datoteka (ako deduplicator zna gdje se može preuzeti izvorni paket, smanjuje duplicirane dijelove u arhivi).
Pakiranje
Kada se pakiraju, svi datoteke iz pakiranog direktorija se pregledavaju, izračunavaju se njihovi hashovi, i ako se hash pronađe u nekom od poznatih HashPackage, tada se metapodaci o datoteci (ime, hash, prava pristupa itd.) spremaju u posebnu datoteku .hashget-restore.json, koja će također biti uključena u arhiv.
Samo pakiranje u najjednostavnijem slučaju izgleda nekomplicirano kao tar:
hashget -zf /tmp/mybackup.tar.gz --pack /path/to/dataRaspakiranje
Raspakiravanje se radi u dva koraka. Prvo se radi uobičajeno tar raspakiravanje:
tar -xf mybackup.tar.gz -C /path/to/datazatim obnova s mreže:
hashget -u /path/to/dataPrilikom obnove hashget čita datoteku .hashget-restore.json, preuzima potrebne pakete, raspakuje ih, i izvlači potrebne datoteke, postavljajući ih na potrebne putanje, s potrebnim vlasnikom/grupom/dozvolama.
Složenije stvari
Ono što je opisano iznad - već je dovoljno za one koji žele "tako kao tar, ali da mi se debian zapakira u 4 megabajta". Zatim ćemo pogledati složenije stvari.
Indeksiranje
Ako hashget uopće nije imao nijedan HashPackage, jednostavno ne bi mogao ništa deduplirati.
HashPackage se može stvoriti i ručno (jednostavno: hashget --submit https://wordpress.org/wordpress-5.1.1.zip -p my), ali postoji i praktičniji put.
Da biste dobili potrebne hashpakete, postoji faza indeksiranja (automatski se izvodi prilikom korištenja komande --pack) i heuristike. Prilikom indeksiranja hashget "hrani" svaku pronađenu datoteku svim postojećim heuristikama koje ga zanimaju. Heuristike zatim mogu indeksirati neki Package kako bi stvorili HashPackage.
Na primjer, debianova heuristika voli datoteku /var/lib/dpkg/status i otkriva instalirane debian pakete, i ako oni nisu indeksirani (za njih nisu stvoreni HashPackage), preuzima i indeksira ih. Rezultat je vrlo ugodan efekt - hashget će uvijek učinkovito deduplicirati debian operacijske sustave, čak i ako imaju najnovije pakete.
Datoteke-savetnici (hintovi)
Ako u vašoj mreži koristite neku vašu proprietarnu ili javnu paket koji nije uključen u heuristike hashget, možete dodati jednostavnu hint-datoteku hashget-hint.json prema uzoru:
{
"project": "wordpress.org",
"url": "https://ru.wordpress.org/wordpress-5.1.1-ru_RU.zip"
}Nakon toga, svaki put kada se stvara arhiva, paket će biti indeksiran (ako nije ranije), a datoteke paketa će biti deduplikovane iz arhive. Nije potrebna nikakva programiranja, sve se može uraditi iz vim-a, štedeći u svakom backupu. Imajte na umu da, zahvaljujući pristupu putem heš suma, ako su neke datoteke iz paketa izmenjene lokalno (na primer, promenjena je datoteka sa konfiguracijom) — izmenjene datoteke će se sačuvati u arhivi „onako kako jesu“ i neće biti smanjene.
Ako se neki vaš paket povremeno ažurira, ali promene nisu velike, možete napraviti hint samo za glavne verzije. Na primer, u verziji 1.0 je napravljen hint koji se odnosi na mypackage-1.0.tar.gz, i ona će se potpuno deduplikovati, zatim je objavljena verzija 1.1 koja se malo razlikuje, a hint nije ažuriran. Nema veze. Deduplikovaće se samo datoteke koje se podudaraju (koje se mogu obnoviti) sa verzijom 1.0.
Heuristika koja obrađuje hint datoteku — dobar je primer za razumevanje unutrašnjeg mehanizma rada heuristika. Obrađuje samo datoteke hashget-hint.json (ili .hashget-hint.json sa tačkom) i ignoriše sve ostale. Prema ovoj datoteci, određuje koji URL paketa treba da bude indeksiran, a hashget ga indeksira (ako to nije već učinjeno).
HashServer
Bilo bi prilično otežano prilikom izrade backupova potpuno izvršiti indeksiranje. Za to je potrebno preuzeti svaki paket, raspakovati ga, indeksirati. Zato hashget koristi shemu sa . Kada se otkrije instalirani debian-ov paket, ako se ne nađe u lokalnim HashPackage, prvo se pokušava jednostavno preuzeti HashPackage sa heš servera. I samo ako to ne uspe — hashget sam preuzima i hešira paket (i učitava ga na hashserver, kako bi ga kasnije hashserver pružio).
HashServer — nije obavezni element sheme, nije kritičan, služi isključivo za ubrzanje i smanjenje opterećenja na repozitorijumima. Lako se isključuje (opcijom --hashserver bez parametara). Pored toga, lako je moguće .
Inkrementalni i diferencijalni backupovi, planirano zastare
omogućava vrlo jednostavno kreiranje sheme . Zašto ne bismo indeksirali naš backup (sa svim našim jedinstvenim datotekama)? Jedna komanda --submit i sve je spremno! Sljedeća sigurnosna kopija koju će stvoriti hashget neće uključivati datoteke iz ovog arhiva.
No, to nije baš dobar pristup, jer se može dogoditi da prilikom vraćanja moramo pretraživati sve hashget sigurnosne kopije tijekom cijelog razdoblja (ako svaka sadrži barem jednu jedinstvenu datoteku). Za to postoji mehanizam . Prilikom indeksiranja možete odrediti datum zastare HashPackage --expires 2019-06-01, a nakon toga datuma (od 00:00) neće se koristiti. Sam arhiv se nakon tog datuma ne mora brisati (iako hashget može praktično prikazati URL-ove svih sigurnosnih kopija koje su nam istekle/isteknu do tog trenutka ili na bilo kojem datumu).
Na primjer, ako 1. dana radimo punu sigurnosnu kopiju i indeksiramo je sa životnim rokom do kraja mjeseca — dobit ćemo shemu diferencijalne sigurnosne kopije.
Ako budemo indeksirali i nove sigurnosne kopije — bit će to shema inkrementalnih sigurnosnih kopija.
Za razliku od tradicionalnih shema, hashget omogućuje korištenje više osnovnih izvora. Sigurnosna kopija će biti smanjena i zbog smanjenja datoteka iz prethodnih sigurnosnih kopija (ako ih ima), i zbog javnih datoteka (onoga što se može preuzeti).
Ako iz nekog razloga ne vjerujemo u pouzdanost debianovskih resursa () ili koristimo drugi distribucijski sustav, možemo jednom napraviti punu sigurnosnu kopiju sa svim paketima, a zatim se oslanjati već na nju (). Sada, ako svi serveri naših distribucija postanu nedostupni (u suvenirskom internetu ili tijekom zombi apokalipse), ali naše sigurnosne kopije budu u redu — moći ćemo se oporaviti iz bilo koje kratke diff sigurnosne kopije, oslanjajući se samo na naše ranije sigurnosne kopije.
Hashget se oslanja samo na pouzdane izvore vraćanja prema VAŠEM odabiru. Oni koje smatrate pouzdanim — bit će ti korišteni.
FilePool i Glacier
Mehanizam omogućuje neprestano obraćanje vanjskim serverima za preuzimanje paketa, već se koriste paketi iz lokalnog direktorija ili korporativnog servera, na primjer:
$ hashget -u . --pool /tmp/poolili
$ hashget -u . --pool http://myhashdb.example.com/Da biste stvorili bazen u lokalnom direktoriju, jednostavno kreirajte direktorij i stavite u njega datoteke; hashget će sam pronaći što mu treba prema hash vrijednostima. Da bi bazen bio dostupan preko HTTP-a, potrebno je na poseban način stvoriti simboličke veze, što se može učiniti s jednom naredbom (hashget-admin --build /var/www/html/hashdb/ --pool /tmp/pool). Sam HTTP FilePool sastoji se od statičnih datoteka, pa ga može poslužiti bilo koji jednostavan web server, a opterećenje na serveru je gotovo nulto.
Zahvaljujući FilePool-u, kao osnovne resurse možemo koristiti ne samo resurse na http(s) već i, , Amazon Glacier.
Nakon učitavanja sigurnosne kopije na glacier, dobijamo svoj Upload ID i koristimo ga kao URL. Na primjer:
hashget --submit Glacier_Upload_ID --file /tmp/my-glacier-backup.tar.gz --project glacier --hashserver --expires 2019-09-01Sada će se nove (diferencijalne) sigurnosne kopije oslanjati na ovu sigurnosnu kopiju i bit će kraće. Nakon raspakiravanja diferencijalne sigurnosne kopije možemo vidjeti na koje se resurse oslanja:
hashget --info /tmp/unpacked/ listi jednostavnim shell skriptom preuzeti sve te datoteke iz glaciers u pool i pokrenuti običan oporavak: hashget -u /tmp/unpacked --pool /tmp/pool
Isplati li se to
U najjednostavnijem slučaju – jednostavno ćete plaćati manje za sigurnosne kopije (ako ih čuvate negdje u oblaku uz naknadu). Možda čak i znatno manje.
No, to nije jedino. Količina prelazi u kvalitetu. Možete to iskoristiti kako biste postigli kvalitetno poboljšanje sustava sigurnosnih kopija. Na primjer, sada kada su nam sigurnosne kopije kraće – možete raditi ne mjesečne sigurnosne kopije, već svakodnevne. Čuvati ih ne pola godine, kao prije, već 5 godina. Prije se čuvalo u sporom, ali jeftinom ‘hladnom’ skladištu (Glacier), sada možete pohraniti u ‘vruće’, odakle se sigurno može brzo preuzeti sigurnosna kopija i vratiti se za nekoliko minuta, a ne za dan.
Možete povećati pouzdanost pohrane sigurnosnih kopija. Ako ih sada čuvamo u jednom skladištu, smanjenjem obujma sigurnosnih kopija – moći ćemo ih pohraniti u 2-3 skladišta i bezbolno preživjeti, ako jedno od njih bude oštećeno.
Kako isprobati i početi koristiti?
Idemo na stranicu gitlab , instaliramo jednom naredbom (pip3 install hashget[plugins]) i samo slijedite quick-start. Mislim da će uraditi sve jednostavne stvari — trajati će desetak minuta. Zatim možete probati smanjiti svoje virtualne instance, napraviti, ako je potrebno, hint datoteke da se smanje još više, igrati se s grupama, lokalnom bazom heševa i heš serverom, ako vas to zanima, a sljedeći dan pogledati kolika će biti veličina inkrementalne sigurnosne kopije preko jučerašnje.
Izvor: habr.com
