— je brezplačen, odprtokodni deduplikač — orodje podobno arhivatorju, ki omogoča znatno zmanjšanje velikosti varnostnih kopij ter organizacijo shem inkrementalnega in diferencialnega varnostnega kopiranja in še več.
To je pregledni članek, ki opisuje zmožnosti. Uporaba hashget (ki je precej preprosta) je opisana v projektu in .
Comparison
Po zakonu žanra bom takoj začel z intrigami — primerjave rezultatov:
Vzorec podatkov
nerazpakirana 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, kakšen naj bi bil idealen in učinkovit varnostni kopij
Vsakič, ko sem naredil varnostno kopijo sveže ustvarjene virtualke, me je mučilo občutek, da delam nekaj narobe. Zakaj imam težko varnostno kopijo sistema, kjer je moje neprecenljivo nesmrtnok delo — enovrstni index.html z besedilom 'Hello world'?
Zakaj je v moji varnostni kopiji 16-megabajtni /usr/sbin/mysqld? Ali sem res jaz tisti, ki moram hraniti to pomembno datoteko, in če ne bom uspel — bo izgubljena za človeštvo? Verjetno ne. Shranjuje se na zelo zanesljivih strežnikih debian (njihova zanesljivost in neprekinjenost sta neprimerljivi s tem, kar sem sposoben zagotoviti jaz), pa tudi v varnostnih kopijah (milijoni jih) drugih administratorjev. Ali res potrebujemo ustaviti tako veliko zanesljivost s 10 000 000 + 1. kopijo te pomembne datoteke?
Na splošno in rešuje to težavo. Pri pakiranju — ustvari zelo majhno varnostno kopijo. Pri razpakiranju — popolnoma razpakiran sistem, podoben tistemu, ki bi bil pri tar -c / tar -x. (Z drugimi besedami, to je brezizgubno pakiranje)
Kako deluje hashget
V hashget so pojmi Package in HashPackage, s katerima izvaja deduplifikacijo.
Package (paket). Datoteka (običajno arhiv .deb ali .tar.gz), ki jo je mogoče zanesljivo prenesti iz omrežja in iz katere lahko pridobimo eno ali več datotek.
HashPackage — majhna JSON datoteka, ki predstavlja Package, tudi vsebuje URL paketa in hash vrednosti (sha256) datotek iz njega. Na primer, za paket mariadb-server-core velikosti 5 megabajtov je velikost hashpackage le 6 kilobajtov. Približno tisočkrat manj.
Dedupikacija — ustvarjanje arhiva brez podvojenih datotek (če deduplikator ve, kje se lahko originalni paket prenese, skrajša podvojitve iz arhiva).
Pakiranje
Pri pakovanju se pregledavaju svi fajlovi iz pakovanog direktorijuma, računaju njihovi heš-žetoni, i ako se žeton nađe u nekom od poznatih HashPackage, tada se metapodaci o fajlu (ime, heš, prava pristupa itd.) čuvaju u posebnoj datoteci .hashget-restore.json, koja će takođe biti uključena u arhivu.
Samo pakovanje u najjednostavnijem slučaju izgleda ne složenije od tar-a:
hashget -zf /tmp/mybackup.tar.gz --pack /path/to/dataRaspakovanje
Raspakovanje se obavlja u dva koraka. Prvo obično tar raspakovanje:
tar -xf mybackup.tar.gz -C /path/to/datazatim obnavljanje iz mreže:
hashget -u /path/to/dataPrilikom obnavljanja hashget čita datoteku .hashget-restore.json, preuzima potrebne pakete, raspakuje ih i izvlači potrebne fajlove, postavljajući ih na odgovarajuće puteve, sa odgovarajućim owner/group/permissions.
Složenije stvari
Ono što je opisano iznad — već je dovoljno za one kojima "želim kao tar, ali da upakuje moj Debian u 4 megabajta". Dalje ćemo pogledati složenije stvari.
Indeksiranje
Ako hashget uopšte nije imao nijedan HashPackage, jednostavno ne bi mogao ništa deduplirati.
HashPackage se može kreirati i ručno (jednostavno: hashget --submit https://wordpress.org/wordpress-5.1.1.zip -p my), ali postoji i jednostavniji put.
Da biste dobili potrebne hashpackage, postoji korak indeksiranja (automatski se izvršava prilikom komande --pack) i heuristike. Prilikom indeksiranja hashget "nahrani" svaki pronađeni fajl svim postojećim heuristikama, koje ga zanimaju. Heuristike tada mogu indeksirati neki Package, da stvore HashPackage.
Na primer, debian 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 veoma prijatan efekat — hashget će uvek efikasno deduplirati debian OS, čak i ako na njima postoje najnoviji paketi.
Datoteke-pokazivači (hintovi)
Ako se u vašoj mreži koristi neki vaš proprijetarni paket ili javni paket, koji nije uključen u heuristike hashget-a, možete dodati jednostavnu hint-datoteku hashget-hint.json po uzoru:
{
"project": "wordpress.org",
"url": "https://ru.wordpress.org/wordpress-5.1.1-ru_RU.zip"
}Pri naslednji izdelavi arhiva bo paket indeksiran (če ni bil prej), in datoteke paketa bodo deduplicirane iz arhiva. Ni potrebno nobeno programiranje, vse se da narediti iz vim-a in prihraniti pri vsakem kopiranju. Upoštevajte, da se zaradi pristopa s kontrolnimi vsotami, če se kakšne datoteke paketa spremenijo lokalno (na primer, če se spremeni datoteka konfiguracije) — bodo spremenjene datoteke shranjene v arhivu "takšne, kot so", brez skrajševanja.
Če se kakšen vaš paket občasno posodablja, a spremembe niso prevelike, lahko naredite namig le za glavne različice. Na primer, v različici 1.0 je bil ustvarjen namig s sklicevanjem na mypackage-1.0.tar.gz, in ta bo popolnoma dedupliciran, nato je bila izdana različica 1.1, ki se nekoliko razlikuje, a namig ni bil posodobljen. Nič hudega. Deduplicirane bodo le datoteke, ki se ujemajo (ki jih je mogoče obnoviti) z različico 1.0.
Hevristika, ki obdeluje hint-datoteko — dober primer za razumevanje notranjega delovanja hevristik. Obdeluje le datoteke hashget-hint.json (ali .hashget-hint.json s piko) in ignorira vse ostale. Po tej datoteki ugotovi, kateri URL paketa naj bo indeksiran, in hashget ga indeksira (če tega ni bilo narejeno prej)
HashServer
Bilo bi precej zamudno pri ustvarjanju varnostnih kopij popolnoma izvajati indeksiranje. Za to je potrebno prenesti vsak paket, ga razpakirati, indeksirati. Zato hashget uporablja shemo s . Ko se odkrije nameščen debian-ov paket, če ga ni v lokalnih HashPackage, se najprej poskusi preprosto prenesti HashPackage s hesh-serverja. In šele če to ne uspe — hashget sam prenese in hašira paket (in naloži na hashserver, da ga bo kasneje hashserver ponudil).
HashServer ni obvezni element sheme, ni kritičen in služi izključno za pospešitev in zmanjšanje obremenitve na repozitorijih. Enostavno se izklopi (z opcijo --hashserver brez parametrov). Poleg tega je enostavno .
Inkrementalne in diferencialne varnostne kopije, načrtovana zastare
omogoča zelo enostavno izdelavo sheme . Zakaj ne bi indeksirali same naše varnostne kopije (z vsemi našimi edinstvenimi datotekami)? Ena ukazna --submit in vse je pripravljeno! Naslednja varnostna kopija, ki jo bo ustvaril hashget, ne bo vključila datotek iz tega arhiva.
Vendar to ni najboljša metoda, saj se lahko zgodi, da bomo morali med obnovitvijo pregledati vse hashget-varnostne kopije v vsej zgodovini (če bo v vsaki vsaj ena edinstvena datoteka). Za to obstaja mehanizem . Med indeksiranjem lahko navedete datum poteka HashPackage --expires 2019-06-01, in ko bo ta datum dosežen (od 00:00), ne bo več uporabljen. Sam arhiv lahko po tem datumu ne izbrišete (čeprav lahko hashget priročno prikaže URL-je vseh varnostnih kopij, ki so že potekle ali bodo potekle ob določeni datumnem).
Na primer, če bomo 1. dneva naredili polno varnostno kopijo in jo indeksirali s trajanjem do konca meseca — prejeli bomo shemo diferencialnih varnostnih kopij.
Če bomo na enak način indeksirali tudi nove varnostne kopije — bo to shema inkrementalnih varnostnih kopij.
V nasprotju s tradicionalnimi shemami, hashget omogoča uporabo več osnovnih virov. Varnostna kopija bo zmanjšana tako zaradi zmanjšanja datotek iz prejšnjih varnostnih kopij (če so na voljo), kot tudi zaradi javnih datotek (to, kar lahko prenesete).
Če iz kakršnega koli razloga ne zaupamo zanesljivosti debianovskih virov () ali uporabljamo drugo distribucijo, lahko enkrat naredimo popolno varnostno kopijo z vsemi paketi in se nato zanašamo nanjo (). Zdaj, če se vse strežnike naših distribucij izkažejo za nedostopne (v spominskem internetu ali med zombi apokalipso), vendar bodo naše varnostne kopije v redu — lahko se obnovimo iz katere koli kratke diferencne varnostne kopije, ki se zanaša samo na naše prejšnje varnostne kopije.
Hashget se zanaša samo na zanesljive vire za obnovitev po VAŠI izbiri. Tiste, ki jih smatrate za zanesljive, bodo uporabljene.
FilePool in Glacier
Mehanizem omogoča, da se ne obračate nenehno na zunanje strežnike za prenos paketov, temveč uporabite pakete iz lokalnega imenika ali korporativnega strežnika, na primer:
$ hashget -u . --pool /tmp/poolili
$ hashget -u . --pool http://myhashdb.example.com/Omogočiti pool v lokalni mapi je preprosto, dovolj je ustvariti mapo in vanjo dodati datoteke, hashget bo sam po iskalnih hashih našel, kar potrebuje. Da bi pool bil dostopen preko HTTP, je potrebno na poseben način ustvariti simbolične povezave, kar se izvede z enim ukazom (hashget-admin --build /var/www/html/hashdb/ --pool /tmp/pool). Sam HTTP FilePool so statične datoteke, tako da ga lahko upravlja vsak najpreprostejši spletni strežnik, obremenitev strežnika je skoraj nič.
Zahvaljujoč FilePool-u lahko kot osnovne vire uporabljamo ne samo vire na http(s), ampak tudi, , Amazon Glacier.
Po nalaganju varnostne kopije na globus dobimo njen Upload ID 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-01Zdaj se bodo nove (diferencialne) varnostne kopije opirale na to varnostno kopijo in bodo krajše. Po razpakiranju difvarnostne kopije si lahko ogledamo, na katere vire se opira:
hashget --info /tmp/unpacked/ listin preprosto s shell skripto prenesti vse te datoteke iz globusa v pool in zagnati običajno obnovitev: hashget -u /tmp/unpacked --pool /tmp/pool
Se splača trud
V najpreprostejšem primeru boste preprosto plačali manj za varnostne kopije (če jih hranite nekje v oblaku za denar). Morda - veliko manj.
Toda to ni edino. Količina se spreminja v kakovost. To lahko uporabite za dosego kakovostne nadgradnje sheme varnostnih kopij. Na primer, ker so naše varnostne kopije zdaj krajše - lahko namesto mesečnih varnostnih kopij naredimo dnevne. Hranimo jih ne šest mesecev, kot prej, ampak 5 let. Prej smo hranili v počasnem, a poceni »hladnem« prostoru (Glacier), zdaj pa lahko shranjujemo v vročem, od koder lahko hitro prenesemo varnostno kopijo in se obnovimo v minutah, ne pa v dnevu.
Lahko povečate zanesljivost shranjevanja varnostnih kopij. Če jih zdaj shranjujemo v enem prostoru, jih lahko, s skrajšanjem obsega varnostnih kopij, shranjujemo v 2-3 prostorih in brezskrbno preživimo, če eden od njih poškoduje.
Kako poskusiti in začeti uporabljati?
Obiščite stran na gitlabu , namestite z enim ukazom (pip3 install hashget[plugins]) in samo beremo-izvajamo hitri začetek. Mislim, da bi bilo vse preproste zadeve možno narediti – vzelo bi 10-15 minut. Nato lahko poskusite stiskati svoje virtualke, narediti, če je potrebno, hint datoteke, da bi bilo stiskanje še močnejše, se igrati z bazeni, lokalno bazo hashev in hashs servisom, če bo zanimivo, in naslednji dan pogledati, kakšna bo velikost inkrementalne varnostne kopije preko včerajšnje.
Izvor: habr.com
