Verminder rugsteun met 99.5% met hashget

hashget - dit is gratis, oopbron deduplikator is 'n hulpprogram soortgelyk aan 'n argiverer wat jou toelaat om die grootte van rugsteun aansienlik te verminder, sowel as om inkrementele en differensiële rugsteunskemas en meer te organiseer.

Hierdie is 'n oorsigartikel om die kenmerke te beskryf. Die werklike gebruik van hashget (heel eenvoudig) word beskryf in README projek en wiki dokumentasie.

vergelyking

Volgens die wet van die genre begin ek dadelik met die intrige - en vergelyk die resultate:

Datamonster
uitgepakte grootte
tar.gz
hashget.tar.gz

WordPress-5.1.1
43 Mb
11 Mb (26%)
155 Kb ( 0.3% )

Linux kern 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% )

Agtergrond oor wat 'n ideale en effektiewe rugsteun moet wees

Elke keer as ek 'n rugsteun van 'n nuutgeskepte virtuele masjien gemaak het, was ek agtervolg deur die gevoel dat ek iets verkeerd doen. Hoekom kry ek 'n stewige rugsteun van die stelsel, waar my kosbare, onverganklike kreatiwiteit 'n eenreëlige index.html is met die teks "Hallo wêreld"?

Hoekom is daar 'n 16 MB /usr/sbin/mysqld in my rugsteun? Is dit regtig moontlik dat ek in hierdie wêreld die eer het om hierdie belangrike lêer te hou, en as ek misluk, sal dit vir die mensdom verlore gaan? Heel waarskynlik nee. Dit word op hoogs betroubare debian-bedieners gestoor (waarvan die betroubaarheid en uptyd nie vergelyk kan word met wat ek kan verskaf nie), sowel as in rugsteun (miljoene daarvan) van ander admins. Moet ons regtig 10 000 000+ 1ste kopie van hierdie belangrike lêer skep om betroubaarheid te verbeter?

Oor die algemeen hashget en los hierdie probleem op. Wanneer dit verpak word, skep dit 'n baie klein rugsteun. Wanneer u uitpak - 'n heeltemal uitgepakte stelsel, soortgelyk aan wat dit sou wees as tar -c / tar -x. (Met ander woorde, dit is verlieslose verpakking)

Hoe hashget werk

hashget het die konsepte van Package en HashPackage, met hul hulp voer dit deduplisering uit.

pakket (plastiese sak). 'n Lêer (gewoonlik 'n .deb- of .tar.gz-argief) wat veilig van die internet afgelaai kan word, en waaruit een of meer lêers verkry kan word.

HashPackage - 'n klein JSON-lêer wat 'n pakket verteenwoordig, insluitend die pakket-URL en hash-somme (sha256) van lêers daaruit. Byvoorbeeld, vir 'n 5 megagreep mariadb-bediener-kernpakket, is die hashpakketgrootte slegs 6 kilogrepe. Ongeveer duisend keer minder.

Deduplisering - skep 'n argief sonder duplikaatlêers (as die deduplikator weet waar die oorspronklike pakket afgelaai kan word, verminder dit duplikate uit die argief).

Verpakking

Wanneer dit gepak word, word alle lêers van die gids wat verpak word geskandeer, hul hash-somme word bereken, en as die som in een van die bekende HashPackages gevind word, word metadata oor die lêer (naam, hash, toegangsregte, ens.) gestoor in 'n spesiale lêer .hashget-restore.json, wat ook in die argief ingesluit sal word.

In die eenvoudigste geval lyk die verpakking self nie meer ingewikkeld as teer nie:

hashget -zf /tmp/mybackup.tar.gz --pack /path/to/data

Uitpak

Uitpak word in twee fases gedoen. Eers die gewone teeruitpak:

tar -xf mybackup.tar.gz -C /path/to/data

herstel dan vanaf die netwerk:

hashget -u /path/to/data

Wanneer dit herstel word, lees hashget die .hashget-restore.json-lêer, laai die nodige pakkette af, pak dit uit en onttrek die nodige lêers, installeer dit in die vereiste paaie, met die vereiste eienaar/groep/toestemmings.

Moeiliker dinge

Wat hierbo beskryf is, is reeds genoeg vir diegene wat dit "soos teer wil hê, maar om my Debian in 4 megagrepe te pak." Kom ons kyk later na meer komplekse dinge.

Indeksering

As hashget glad nie 'n enkele HashPackage gehad het nie, sou dit eenvoudig niks kon dedupliseer nie.

U kan ook 'n HashPackage met die hand skep (eenvoudig: hashget --submit https://wordpress.org/wordpress-5.1.1.zip -p my), maar daar is 'n geriefliker manier.

Om die nodige hashpackage te kry, is daar 'n stadium indeksering (dit word outomaties uitgevoer met die opdrag --pack) En heuristiek. Wanneer jy indekseer, "voer" hashget elke lêer wat gevind word na alle beskikbare heuristieke wat daarin belangstel. Heuristiek kan dan enige pakket indekseer om 'n HashPackage te skep.

Byvoorbeeld, die Debian-heuristiek hou van die lêer /var/lib/dpkg/status en bespeur geïnstalleerde debian-pakkette, en as hulle nie geïndekseer is nie (daar is geen HashPackage vir hulle geskep nie), laai dit af en indekseer dit. Die resultaat is 'n baie mooi effek - hashget sal altyd effektief Debian-bedryfstelsels dedupliseer, selfs al het hulle die nuutste pakkette.

Wenk lêers

As jou netwerk sommige van jou eie pakkette of 'n publieke pakket gebruik wat nie by die hashget-heuristiek ingesluit is nie, kan jy 'n eenvoudige hashget-hint.json-wenklêer soos volg daarby voeg:

{
    "project": "wordpress.org",
    "url": "https://ru.wordpress.org/wordpress-5.1.1-ru_RU.zip"
}

Vervolgens, elke keer as 'n argief geskep word, sal die pakket geïndekseer word (as dit nie voorheen was nie), en die pakketlêers sal uit die argief gededupliseer word. Geen programmering is nodig nie, alles kan vanaf vim gedoen word en in elke rugsteun gestoor word. Neem asseblief kennis dat, danksy die hash-som-benadering, as sommige lêers van die pakket plaaslik verander word (byvoorbeeld, 'n konfigurasielêer word verander), dan sal die veranderde lêers in die argief gestoor word "soos dit is" en sal nie afgekap word nie.

As sommige van jou eie pakkette periodiek opgedateer word, maar die veranderinge is nie baie groot nie, kan jy net vir hoof weergawes wenk. Byvoorbeeld, in weergawe 1.0 het hulle 'n wenk gemaak wat na mypackage-1.0.tar.gz verwys, en dit sal heeltemal gededupliseer word, dan het hulle weergawe 1.1 vrygestel, wat effens anders is, maar die wenk is nie opgedateer nie. Dit is OK. Slegs lêers wat ooreenstem met (kan herstel word na) weergawe 1.0 word gededupliseer.

Die heuristiek wat die wenklêer verwerk, is 'n goeie voorbeeld om die interne meganisme van hoe heuristiek werk te verstaan. Dit verwerk net hashget-hint.json-lêers (of .hashget-hint.json met 'n punt) en ignoreer alle ander. Uit hierdie lêer bepaal dit watter pakket-URL geïndekseer moet word, en hashget indekseer dit (indien dit nie reeds gedoen het nie)

HashServer

Dit sal redelik arbeidsintensief wees om volledige indeksering uit te voer wanneer rugsteun geskep word. Om dit te doen, moet jy elke pakket aflaai, uitpak en indekseer. Daarom gebruik hashget 'n skema met HashServer. Wanneer 'n geïnstalleerde Debian-pakket opgespoor word, as dit nie in die plaaslike HashPackage gevind word nie, word eers probeer om die HashPackage eenvoudig van die hash-bediener af te laai. En net as dit nie werk nie, laai hashget self die pakket af en hashes (en laai dit op na hashserver, sodat die hashserver dit in die toekoms verskaf).

HashServer is 'n opsionele element van die skema, nie krities nie, dit dien uitsluitlik om die las op die bewaarplekke te bespoedig en te verminder. Maklik gedeaktiveer (opsioneel --hashserver sonder parameters). Daarbenewens kan jy maklik maak jou eie hashserver.

Inkrementele en differensiële rugsteun, beplande veroudering

hashget maak dit baie maklik om 'n diagram te maak inkrementele en differensiële rugsteun. Hoekom indekseer ons nie ons rugsteun self (met al ons unieke lêers) nie? Een span --submit en jy is klaar! Die volgende rugsteun wat hashget skep, sal nie lêers uit hierdie argief insluit nie.

Maar dit is nie 'n baie goeie benadering nie, want dit kan blyk dat wanneer ons herstel, ons alle hashget-rugsteune in die hele geskiedenis sal moet trek (as elkeen ten minste een unieke lêer bevat). Daar is 'n meganisme hiervoor beplande veroudering van rugsteun. Wanneer jy indekseer, kan jy die vervaldatum van HashPackage spesifiseer --expires 2019-06-01, en na hierdie datum (vanaf 00:00), sal dit nie gebruik word nie. Die argief self kan nie na hierdie datum uitgevee word nie (alhoewel hashget gerieflik die URL's kan wys van alle rugsteun wat op die oomblik of op enige datum vrot is/sal wees).

Byvoorbeeld, as ons 'n volledige rugsteun op die 1ste maak en dit met 'n leeftyd tot die einde van die maand indekseer, sal ons 'n differensiële rugsteunskema kry.

As ons nuwe rugsteun op dieselfde manier indekseer, sal daar 'n skema van inkrementele rugsteun wees.

Anders as tradisionele skemas, laat hashget jou toe om verskeie onderliggende bronne te gebruik. Die rugsteun sal verminder word deur beide lêers van vorige rugsteun (indien enige) en deur publieke lêers (wat afgelaai kan word) te verminder.

As ons om een ​​of ander rede nie die betroubaarheid van Debian-hulpbronne vertrou nie (https://snapshot.debian.org/) of 'n ander verspreiding gebruik, kan ons eenvoudig een keer 'n volledige rugsteun maak met al die pakkette, en dan daarop staatmaak (deur heuristiek uit te skakel). Nou, as al die bedieners van ons verspreidings onbeskikbaar blyk te wees vir ons (op die aandenking-internet of tydens 'n zombie-apokalips), maar ons rugsteun is in orde, kan ons herstel van enige kort verskil-rugsteun wat slegs op ons vroeëre rugsteun staatmaak .

Hashget maak slegs staat op betroubare herstelbronne volgens U diskresie. Die wat jy as betroubaar beskou, sal gebruik word.

FilePool en Glacier

meganisme FilePool laat jou toe om nie voortdurend eksterne bedieners te kontak om pakkette af te laai nie, maar pakkette van 'n plaaslike gids of korporatiewe bediener te gebruik, byvoorbeeld:

$ hashget -u . --pool /tmp/pool

of

$ hashget -u . --pool http://myhashdb.example.com/

Om 'n swembad in 'n plaaslike gids te maak, hoef jy net 'n gids te skep en lêers daarin te gooi, hashget self sal vind wat dit nodig het met behulp van die hashes. Om die swembad via HTTP toeganklik te maak, moet jy simskakels op 'n spesiale manier skep; dit word gedoen met een opdrag (hashget-admin --build /var/www/html/hashdb/ --pool /tmp/pool). HTTP FilePool self is statiese lêers, so enige eenvoudige webbediener kan dit bedien, die las op die bediener is amper nul.

Danksy FilePool kan jy nie net http(s)-bronne as basisbronne gebruik nie, maar ook byvoorbeeld, Amazon Glacier.

Nadat ons die rugsteun na die gletser opgelaai het, kry ons sy oplaai-ID en gebruik dit as 'n URL. Byvoorbeeld:

hashget --submit Glacier_Upload_ID --file /tmp/my-glacier-backup.tar.gz --project glacier --hashserver --expires 2019-09-01

Nou sal nuwe (differensiële) rugsteun op hierdie rugsteun gebaseer wees en sal korter wees. Nadat ons die diffbackup uitgepak het, kan ons sien op watter hulpbronne dit staatmaak:

hashget --info /tmp/unpacked/ list

en gebruik net 'n dopskrif om al hierdie lêers van Glacier na die swembad af te laai en voer die gewone herstel uit: hashget -u /tmp/unpacked —pool /tmp/pool

Is die speletjie die kers werd?

In die eenvoudigste geval sal jy eenvoudig minder betaal vir rugsteun (as jy dit iewers in die wolk stoor vir geld). Miskien baie, baie minder.

Maar dit is nie die enigste ding nie. Kwantiteit verander in kwaliteit. U kan dit gebruik om 'n hoëgehalte-opgradering na u rugsteunskema te kry. Byvoorbeeld, aangesien ons rugsteun nou korter is, kan ons nie maandelikse rugsteune maak nie, maar daaglikse. Bêre dit nie vir ses maande, soos voorheen nie, maar vir 5 jaar. Voorheen het jy dit in stadige maar goedkoop "koue" berging (Glacier) gestoor, nou kan jy dit in warm stoor stoor, van waar jy altyd vinnig 'n rugsteun kan aflaai en dit binne minute kan herstel, nie in 'n dag nie.

U kan die betroubaarheid van rugsteunberging verhoog. As ons dit tans in een stoorfasiliteit stoor, sal ons dit in 2-3 stoorfasiliteite kan stoor deur die volume van rugsteun te verminder en pynloos te oorleef as een van hulle beskadig word.

Hoe om te probeer en begin gebruik?

Gaan na die gitlab-bladsy https://gitlab.com/yaroslaff/hashget, installeer met een opdrag (pip3 install hashget[plugins]) en lees net en voer 'n vinnige begin uit. Ek dink dit sal 10-15 minute neem om al die eenvoudige dinge te doen. Dan kan jy probeer om jou virtuele masjiene saam te pers, wenklêers maak indien nodig om die kompressie sterker te maak, speel met poele, 'n plaaslike hash-databasis en 'n hash-bediener as jy belangstel, en die volgende dag kyk wat die grootte van die inkrementele rugsteun sal bo gister s'n wees.

Bron: will.com

Voeg 'n opmerking