Ovo je pregledni članak koji opisuje karakteristike. Stvarna upotreba hashget-a (prilično jednostavna) je opisana u
Upoređivanje
Prema zakonu žanra, odmah ću početi s intrigom - poređenjem rezultata:
Uzorak podataka
raspakovana 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 o tome kakva bi idealna i efikasna sigurnosna kopija trebala biti
Svaki put kada sam napravio rezervnu kopiju sveže kreirane virtuelne mašine, proganjao me je osećaj da radim nešto pogrešno. Zašto dobijam ogromnu rezervnu kopiju od sistema, gde je moja neprocenjiva, neprolazna kreativnost index.html u jednom redu sa tekstom “Zdravo svete”?
Zašto postoji 16 MB /usr/sbin/mysqld u mojoj rezervnoj kopiji? Da li je zaista moguće da na ovom svetu imam čast da čuvam ovaj važan dosije, a ako ne uspem, biće izgubljen za čovečanstvo? Najvjerovatnije ne. Pohranjen je na vrlo pouzdanim debian serverima (čija se pouzdanost i vrijeme neprekidnog rada ne mogu usporediti s onim što mogu pružiti), kao iu sigurnosnim kopijama (milijuni njih) drugih administratora. Da li zaista treba da kreiramo 10+ 000. kopije ove važne datoteke da bismo poboljšali pouzdanost?
Generalno tar -c
/ tar -x
. (Drugim riječima, ovo je pakovanje bez gubitaka)
Kako funkcioniše hashget
hashget ima koncepte Package i HashPackage, uz njihovu pomoć vrši deduplikaciju.
paket (plasticna kesa). Datoteka (obično .deb ili .tar.gz arhiva) koja se može bezbedno preuzeti sa Interneta i iz koje se može dobiti jedna ili više datoteka.
HashPackage — mala JSON datoteka koja predstavlja paket, uključujući URL paketa i hash sume (sha256) datoteka iz njega. Na primjer, za paket mariadb-server-core od 5 megabajta, veličina hash paketa je samo 6 kilobajta. Otprilike hiljadu puta manje.
Deduplikacija — kreiranje arhive bez duplikata (ako deduplikator zna gdje se originalni paket može preuzeti, smanjuje duplikate iz arhive).
Pakovanje
Prilikom pakiranja, skeniraju se svi fajlovi iz direktorija koji se pakuje, izračunavaju se njihovi hash sumi, a ako se ta suma nađe u nekom od poznatih HashPackagesa, tada se pohranjuju metapodaci o datoteci (ime, hash, prava pristupa, itd.) u posebnoj datoteci .hashget-restore.json, koja će takođe biti uključena u arhivu.
U najjednostavnijem slučaju, sama ambalaža ne izgleda ništa kompliciranije od katrana:
hashget -zf /tmp/mybackup.tar.gz --pack /path/to/data
Raspakivanje
Raspakivanje se vrši u dve faze. Prvo uobičajeno raspakivanje katrana:
tar -xf mybackup.tar.gz -C /path/to/data
zatim vratite sa mreže:
hashget -u /path/to/data
Prilikom vraćanja, hashget čita datoteku .hashget-restore.json, preuzima potrebne pakete, raspakuje ih i izdvaja potrebne datoteke, instalirajući ih na tražene putanje, sa potrebnim vlasnikom/grupom/dozvolom.
Teže stvari
Ono što je gore opisano već je dovoljno za one koji “žele kao tar, ali da moj Debian spakuju u 4 megabajta”. Pogledajmo složenije stvari kasnije.
Indeksiranje
Ako hashget uopće nije imao niti jedan HashPackage, onda jednostavno ne bi mogao ništa deduplicirati.
HashPackage možete kreirati i ručno (jednostavno: hashget --submit https://wordpress.org/wordpress-5.1.1.zip -p my
), ali postoji pogodniji način.
Da biste dobili potreban hashpackage, postoji faza indeksiranje (automatski se izvršava sa naredbom --pack
) i heuristika. Prilikom indeksiranja, hashget "hrani" svaku pronađenu datoteku svim dostupnim heuristikama koje su zainteresirane za njega. Heuristika onda može indeksirati bilo koji paket kako bi kreirala HashPackage.
Na primjer, Debian heuristika voli datoteku /var/lib/dpkg/status i otkriva instalirane debian pakete, a ako nisu indeksirani (za njih nije kreiran HashPackage), preuzima ih i indeksira. Rezultat je vrlo lijep učinak - hashget će uvijek učinkovito deduplicirati Debian OS, čak i ako imaju najnovije pakete.
Hint fajlovi
Ako vaša mreža koristi neke od vaših vlasničkih paketa ili javni paket koji nije uključen u hashget heuristiku, možete joj dodati jednostavnu datoteku nagoveštaja hashget-hint.json na sljedeći način:
{
"project": "wordpress.org",
"url": "https://ru.wordpress.org/wordpress-5.1.1-ru_RU.zip"
}
Zatim, svaki put kada se arhiva kreira, paket će biti indeksiran (ako ranije nije bio), a datoteke paketa će biti uklonjene iz arhive. Nije potrebno programiranje, sve se može uraditi iz vim-a i sačuvati u svakoj rezervnoj kopiji. Imajte na umu da zahvaljujući pristupu hash zbroja, ako se neke datoteke iz paketa promijene lokalno (na primjer, promijeni se konfiguracijski fajl), tada će promijenjene datoteke biti sačuvane u arhivi „kao što jesu“ i neće biti skraćene.
Ako se neki od vaših vlastitih paketa povremeno ažuriraju, ali promjene nisu velike, možete nagovijestiti samo glavne verzije. Na primjer, u verziji 1.0 su napravili hint koji ukazuje na mypackage-1.0.tar.gz, i on će biti potpuno dedupliciran, zatim su objavili verziju 1.1, koja je malo drugačija, ali nagoveštaj nije ažuriran. Uredu je. Samo datoteke koje odgovaraju (mogu se vratiti na) verziju 1.0 se uklanjaju.
Heuristika koja obrađuje datoteku nagoveštaja je dobar primer za razumevanje internog mehanizma kako heuristika funkcioniše. Obrađuje samo datoteke hashget-hint.json (ili .hashget-hint.json sa tačkom) i zanemaruje sve ostale. Iz ove datoteke određuje koji URL paketa treba indeksirati, a hashget ga indeksira (ako to već nije učinio)
HashServer
Bilo bi prilično radno intenzivno izvršiti potpuno indeksiranje prilikom kreiranja rezervnih kopija. Da biste to učinili, morate preuzeti svaki paket, raspakirati ga i indeksirati. Stoga hashget koristi šemu sa
HashServer je opcioni element šeme, nije kritičan, služi isključivo za ubrzavanje i smanjenje opterećenja na spremištima. Lako se onemogućava (opcionalno --hashserver
bez parametara). Osim toga, možete lako
Inkrementalne i diferencijalne sigurnosne kopije, planirano zastarjelo
--submit
i gotovi ste! Sljedeća sigurnosna kopija koju hashget kreira neće uključivati datoteke iz ove arhive.
Ali ovo nije baš dobar pristup, jer se može ispostaviti da ćemo prilikom vraćanja morati povući sve sigurnosne kopije hashget-a u cijeloj historiji (ako svaka sadrži barem jednu jedinstvenu datoteku). Za to postoji mehanizam --expires 2019-06-01
, a nakon ovog datuma (od 00:00) neće se koristiti. Sama arhiva se ne može izbrisati nakon ovog datuma (iako hashget može prikladno prikazati URL-ove svih rezervnih kopija koje su/će biti pokvarene u ovom trenutku ili bilo kojeg datuma).
Na primjer, ako napravimo potpunu sigurnosnu kopiju 1. i indeksiramo je sa životnim vijekom do kraja mjeseca, dobićemo diferencijalnu šemu sigurnosne kopije.
Ako indeksiramo nove sigurnosne kopije na isti način, postojat će šema inkrementalnih sigurnosnih kopija.
Za razliku od tradicionalnih shema, hashget vam omogućava korištenje više osnovnih izvora. Sigurnosna kopija će se smanjiti i smanjenjem datoteka iz prethodnih rezervnih kopija (ako ih ima) i javnih datoteka (ono što se može preuzeti).
Ako iz nekog razloga ne vjerujemo u pouzdanost Debian resursa (
Hashget se oslanja samo na pouzdane izvore za oporavak prema VAŠEM nahođenju. Biće korišteni oni koje smatrate pouzdanim.
FilePool i Glacier
Mehanizam
$ hashget -u . --pool /tmp/pool
ili
$ hashget -u . --pool http://myhashdb.example.com/
Da biste napravili bazen u lokalnom direktoriju, trebate samo kreirati direktorij i baciti datoteke u njega, hashget će sam pronaći ono što mu je potrebno koristeći hashove. Da bi bazen bio dostupan preko HTTP-a, potrebno je kreirati simbolične veze na poseban način; to se radi jednom naredbom (hashget-admin --build /var/www/html/hashdb/ --pool /tmp/pool
). HTTP FilePool je sam po sebi statičan fajl, tako da ga može poslužiti bilo koji jednostavan web server, opterećenje na serveru je skoro nulo.
Zahvaljujući FilePoolu, možete koristiti ne samo http(s) resurse kao osnovne resurse, već i
Nakon upload-ovanja sigurnosne kopije na glečer, dobijamo njegov 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-01
Sada će nove (diferencijalne) sigurnosne kopije biti bazirane na ovoj sigurnosnoj kopiji i bit će kraće. Nakon što tar raspakira diffbackup, možemo vidjeti na koje resurse se oslanja:
hashget --info /tmp/unpacked/ list
i samo upotrijebite shell skriptu da preuzmete sve ove datoteke iz Glaciera u bazen i pokrenite uobičajeni oporavak: hashget -u /tmp/unpacked —pool /tmp/pool
Je li igra vrijedna svijeće?
U najjednostavnijem slučaju, jednostavno ćete platiti manje za sigurnosne kopije (ako ih pohranite negdje u oblaku za novac). Možda mnogo, mnogo manje.
Ali to nije jedina stvar. Količina se pretvara u kvalitet. Ovo možete koristiti da dobijete visokokvalitetnu nadogradnju vaše šeme sigurnosne kopije. Na primjer, pošto su naše sigurnosne kopije sada kraće, možemo praviti ne mjesečne, već dnevne. Čuvajte ih ne šest mjeseci, kao prije, već 5 godina. Ranije ste ga pohranjivali u sporo, ali jeftino “hladno” skladište (Glacier), sada ga možete pohraniti u vruću pohranu, odakle uvijek možete brzo preuzeti rezervnu kopiju i vratiti je za nekoliko minuta, a ne za jedan dan.
Možete povećati pouzdanost skladištenja rezervnih kopija. Ako ih trenutno skladištimo u jednom skladištu, onda ćemo smanjenjem količine rezervnih kopija moći da ih pohranimo u 2-3 skladišta i bezbolno preživjeti ako se jedan od njih ošteti.
Kako pokušati i početi koristiti?
Idite na stranicu gitlaba pip3 install hashget[plugins]
) i samo pročitajte i izvršite brzi početak. Mislim da će trebati 10-15 minuta da uradite sve jednostavne stvari. Zatim možete pokušati komprimirati svoje virtuelne mašine, napraviti fajlove nagoveštaja ako je potrebno da pojačate kompresiju, poigrajte se sa skupovima, lokalnom hash bazom podataka i hash serverom ako ste zainteresovani, a sledećeg dana vidite kolika je veličina inkrementalne rezervne kopije će biti iznad jučerašnjeg.
izvor: www.habr.com