To je pregledni članek za opis funkcij. Dejanska uporaba hashgeta (precej preprosta) je opisana v
Primerjava
Po zakonu žanra bom takoj začel z intrigo - primerjavo rezultatov:
Vzorec podatkov
nepakirana velikost
.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% )
Ozadje o tem, kakšna bi morala biti idealna in učinkovita varnostna kopija
Vsakič, ko sem naredil varnostno kopijo sveže ustvarjenega virtualnega stroja, me je preganjal občutek, da delam nekaj narobe. Zakaj dobim zajetno varnostno kopijo sistema, kjer je moja neprecenljiva, neminljiva ustvarjalnost enovrstični index.html z besedilom “Hello world”?
Zakaj je v moji varnostni kopiji 16 MB /usr/sbin/mysqld? Ali je res mogoče, da imam na tem svetu čast hraniti to pomembno datoteko, in če mi spodleti, bo izgubljena za človeštvo? Najverjetneje ne. Shranjen je na zelo zanesljivih strežnikih debian (katerih zanesljivost in čas delovanja se ne moreta primerjati s tem, kar lahko zagotovim jaz), pa tudi v varnostnih kopijah (več milijonov) drugih skrbnikov. Ali res moramo ustvariti 10+ 000. kopijo te pomembne datoteke za izboljšanje zanesljivosti?
Na splošno tar -c
/ tar -x
. (Z drugimi besedami, to je embalaža brez izgube)
Kako deluje hashget
hashget ima koncepta Package in HashPackage, z njuno pomočjo izvaja deduplikacijo.
paket (plastična vrečka). Datoteka (običajno arhiv .deb ali .tar.gz), ki jo je mogoče varno prenesti z interneta in iz katere je mogoče pridobiti eno ali več datotek.
HashPackage — majhna datoteka JSON, ki predstavlja paket, vključno z URL-jem paketa in zgoščenimi vsotami (sha256) datotek iz njega. Na primer, za paket mariadb-server-core s 5 megabajti je velikost hashpackage samo 6 kilobajtov. Približno tisočkrat manj.
Deduplikacija — ustvarjanje arhiva brez podvojenih datotek (če deduplikator ve, kje je mogoče prenesti izvirni paket, zmanjša število podvojenih datotek iz arhiva).
Pakiranje
Pri pakiranju se skenirajo vse datoteke iz imenika, ki se pakira, izračunajo se njihove zgoščene vsote in če je vsota najdena v enem od znanih HashPackages, se shranijo metapodatki o datoteki (ime, zgoščena vrednost, pravice dostopa itd.). v posebni datoteki .hashget-restore.json, ki bo prav tako vključena v arhiv.
V najpreprostejšem primeru sama embalaža ne izgleda nič bolj zapletena kot katran:
hashget -zf /tmp/mybackup.tar.gz --pack /path/to/data
Razpakiranje
Razpakiranje poteka v dveh fazah. Najprej običajno razpakiranje katrana:
tar -xf mybackup.tar.gz -C /path/to/data
nato obnovite iz omrežja:
hashget -u /path/to/data
Pri obnavljanju hashget prebere datoteko .hashget-restore.json, prenese potrebne pakete, jih razpakira in ekstrahira potrebne datoteke ter jih namesti na zahtevane poti z zahtevanimi lastniki/skupino/dovoljenji.
Težje stvari
To, kar je zgoraj opisano, je že dovolj za tiste, ki "hočejo kot tar, ampak zapakirati svojega Debiana v 4 megabajte." Oglejmo si bolj zapletene stvari kasneje.
Indeksiranje
Če hashget sploh ne bi imel niti enega HashPackagea, potem preprosto ne bi mogel ničesar odstraniti.
HashPackage lahko ustvarite tudi ročno (preprosto: hashget --submit https://wordpress.org/wordpress-5.1.1.zip -p my
), vendar obstaja bolj priročen način.
Da bi dobili potreben hashpackage, obstaja faza indeksiranje (samodejno se izvede z ukazom --pack
) In hevristika. Pri indeksiranju hashget vsako najdeno datoteko »napolni« z vsemi razpoložljivimi hevristikami, ki jih zanima. Hevristika lahko nato indeksira kateri koli paket, da ustvari HashPackage.
Na primer, hevristika Debian obožuje datoteko /var/lib/dpkg/status in zazna nameščene pakete debian ter jih prenese in indeksira, če niso indeksirani (zanje ni ustvarjen noben HashPackage). Rezultat je zelo lep učinek - hashget bo vedno učinkovito odstranil podvojene operacijske sisteme Debian, tudi če imajo najnovejše pakete.
Datoteke z namigi
Če vaše omrežje uporablja nekaj vaših lastniških paketov ali javni paket, ki ni vključen v hevristiko hashget, mu lahko dodate preprosto datoteko z namigom hashget-hint.json, kot je ta:
{
"project": "wordpress.org",
"url": "https://ru.wordpress.org/wordpress-5.1.1-ru_RU.zip"
}
Nato bo vsakič, ko bo ustvarjen arhiv, paket indeksiran (če ni bil prej), datoteke paketa pa bodo iz arhiva odstranjene podvojene datoteke. Programiranje ni potrebno, vse je mogoče narediti iz vima in shraniti v vsako varnostno kopijo. Upoštevajte, da bodo zaradi pristopa zgoščene vsote nekatere datoteke iz paketa lokalno spremenjene (na primer spremenjena konfiguracijska datoteka), spremenjene datoteke shranjene v arhivu »kot so« in ne bodo okrnjene.
Če se nekateri vaši lastni paketi občasno posodabljajo, vendar spremembe niso zelo velike, lahko namigujete samo za večje različice. Na primer, v različici 1.0 so naredili namig, ki kaže na mypackage-1.0.tar.gz, in bo popolnoma dedupliciran, nato pa so izdali različico 1.1, ki je nekoliko drugačna, vendar namig ni bil posodobljen. V redu je. Samo datoteke, ki se ujemajo z (lahko jih je obnoviti) različice 1.0, se odstranijo podvojene.
Hevristika, ki obdeluje datoteko z namigi, je dober primer za razumevanje notranjega mehanizma delovanja hevristike. Obdeluje samo datoteke hashget-hint.json (ali .hashget-hint.json s piko) in ignorira vse druge. Iz te datoteke določi, kateri URL paketa naj bo indeksiran, hashget pa ga indeksira (če tega še ni storil)
HashServer
Izvedba popolnega indeksiranja pri ustvarjanju varnostnih kopij bi bila precej delovno intenzivna. Če želite to narediti, morate prenesti vsak paket, ga razpakirati in indeksirati. Zato hashget uporablja shemo z
HashServer je neobvezen element sheme, ni kritičen, služi izključno za pospešitev in zmanjšanje obremenitve repozitorijev. Enostavno onemogočeno (izbirno --hashserver
brez parametrov). Poleg tega lahko preprosto
Inkrementalne in diferencialne varnostne kopije, načrtovano zastarevanje
--submit
in končali ste! Naslednja varnostna kopija, ki jo ustvari hashget, ne bo vključevala datotek iz tega arhiva.
Vendar to ni zelo dober pristop, ker se lahko izkaže, da bomo morali pri obnovitvi potegniti vse varnostne kopije hashget v celotni zgodovini (če vsaka vsebuje vsaj eno edinstveno datoteko). Za to obstaja mehanizem --expires 2019-06-01
, po tem datumu (od 00:00) pa ne bo več v uporabi. Samega arhiva po tem datumu ni več mogoče izbrisati (čeprav lahko hashget priročno prikaže URL-je vseh varnostnih kopij, ki so/bodo pokvarjene v tem trenutku ali na kateri koli datum).
Na primer, če naredimo popolno varnostno kopijo 1. in jo indeksiramo z življenjsko dobo do konca meseca, bomo dobili diferencialno varnostno kopijo.
Če nove varnostne kopije indeksiramo na enak način, bo obstajala shema inkrementalnih varnostnih kopij.
Za razliko od tradicionalnih shem vam hashget omogoča uporabo več osnovnih virov. Varnostna kopija bo zmanjšana z zmanjšanjem datotek iz prejšnjih varnostnih kopij (če obstajajo) in javnih datotek (kar je mogoče prenesti).
Če iz nekega razloga ne zaupamo v zanesljivost virov Debian (
Hashget se zanaša samo na zaupanja vredne vire za obnovitev po VAŠI presoji. Uporabljeni bodo tisti, ki se vam zdijo zanesljivi.
FilePool in Glacier
Mehanizem
$ hashget -u . --pool /tmp/pool
ali
$ hashget -u . --pool http://myhashdb.example.com/
Če želite ustvariti bazen v lokalnem imeniku, morate samo ustvariti imenik in vanj vrči datoteke, hashget bo sam našel, kar potrebuje, s pomočjo zgoščenih vrednosti. Če želite narediti bazen dostopen prek HTTP, morate na poseben način ustvariti simbolne povezave; to storite z enim ukazom (hashget-admin --build /var/www/html/hashdb/ --pool /tmp/pool
). HTTP FilePool je sam po sebi statična datoteka, zato jo lahko streže kateri koli preprost spletni strežnik, obremenitev strežnika je skoraj nič.
Zahvaljujoč FilePoolu lahko kot osnovne vire uporabljate ne le vire http(s), ampak tudi
Ko naložimo varnostno kopijo na ledenik, dobimo njen ID za nalaganje in ga uporabimo kot URL. Na primer:
hashget --submit Glacier_Upload_ID --file /tmp/my-glacier-backup.tar.gz --project glacier --hashserver --expires 2019-09-01
Zdaj bodo nove (diferencialne) varnostne kopije temeljile na tej varnostni kopiji in bodo krajše. Ko tar razpakira diffbackup, lahko vidimo, na katere vire se opira:
hashget --info /tmp/unpacked/ list
in preprosto uporabite lupinski skript za prenos vseh teh datotek iz Glacierja v bazen in zaženite običajno obnovitev: hashget -u /tmp/unpacked —pool /tmp/pool
Ali je igra vredna sveče?
V najpreprostejšem primeru boste enostavno plačali manj za varnostne kopije (če jih boste za denar shranili nekje v oblak). Morda veliko, veliko manj.
Ampak to ni edino. Kvantiteta se spremeni v kvaliteto. To lahko uporabite za visokokakovostno nadgradnjo varnostne sheme. Na primer, ker so naše varnostne kopije zdaj krajše, lahko ne delamo mesečnih varnostnih kopij, ampak dnevne. Shranjujte jih ne šest mesecev, kot prej, ampak 5 let. Prej ste ga shranjevali v počasnem, a poceni "hladnem" skladišču (Glacier), zdaj ga lahko shranite v vročem skladišču, od koder lahko vedno hitro prenesete varnostno kopijo in jo obnovite v minutah, ne v enem dnevu.
Zanesljivost varnostnega shranjevanja lahko povečate. Če jih trenutno hranimo v enem skladišču, jih bomo z zmanjšanjem obsega varnostnih kopij lahko hranili v 2-3 skladiščih in neboleče preživeli, če se eden od njih poškoduje.
Kako poskusiti in začeti uporabljati?
Pojdite na stran gitlab pip3 install hashget[plugins]
) ter samo preberite in izvedite hitri zagon. Mislim, da bo trajalo 10-15 minut, da naredite vse preproste stvari. Nato lahko poskusite stisniti svoje virtualne stroje, po potrebi ustvarite datoteke z namigi, da bo stiskanje močnejše, se poigrajte z bazeni, lokalno zgoščeno bazo podatkov in zgoščenim strežnikom, če vas zanima, in naslednji dan preverite, kakšna je velikost inkrementalne varnostne kopije. bo na vrhu včerajšnjega.
Vir: www.habr.com