â see tasuta, avatud lĂ€htekoodiga deduplikator â arhiivijaga sarnane utiliit, mis vĂ”imaldab oluliselt vĂ€hendada varukoopiate suurust ning korraldada inkrementaalse ja diferentsiaalse varukoopia skeeme ja mitte ainult.
See on ĂŒlevaateartikkel vĂ”imaluste kirjeldamiseks. Hashgeti kasutamine (ĂŒsna lihtne) on kirjas projektis ja .
VÔrdlus
Ćœanri seaduse kohaselt alustan kohe intriigi â vĂ”rreldes tulemustega:
Andmeproov
lahustatud suurus
.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% )
Eelstory, milline peaks olema ideaalne ja tÔhus varukoopia
Iga kord, kui tegin vĂ€rskelt loodud virtuaalmasinast varukoopia, ei andnud mulle rahu tunne, et teen midagi valesti. Miks saan ma mahuka varukoopia sĂŒsteemist, kus minu hindamatust ajatusest on ainult ĂŒks rida index.html tekstiga «Hello world»?
Miks on minu varukoopias 16-megabaidiline /usr/sbin/mysqld? Kas just mulle on antud au hoida seda olulist faili, ja kui ma ei suuda sellega toime tulla â siis see kaob inimkonnale? TĂ”enĂ€oliselt ei. See on hoitud usaldusvÀÀrsetel Debian serveritel (kui tĂ”husus ja katkematus, mida nad pakuvad, ei saa vĂ”rreldagi sellega, mida mina suudan pakkuda), ning ka teiste administraatorite varukoopiatena (miljonites). Kas meil tĂ”esti on vaja luua 10 000 000 + 1. koopia sellest olulise failist usaldusvÀÀrsuse tĂ”stmiseks?
Ăldiselt ja lahendab selle probleemi. Arhiivimise ajal â loob ta vĂ€ga vĂ€ikese varukoopia. Lahtipakkimise ajal â tĂ€ielikult lahti pakitud sĂŒsteemi, mis sarnaneb sellele, mis oleks olnud tar -c / tar -x. (TeisisĂ”nu, see on lossless pakkimine)
Kuidas hashget töötab
Hashget sisaldab mÔisted Package ja HashPackage, mille abil ta teostab deduplitseerimist.
Paketid (pakett). Fail (tavaliselt .deb vĂ”i .tar.gz arhiiv), mida saab usaldusvÀÀrselt Internetist alla laadida, ja mille pĂ”hjal saab saada ĂŒhe vĂ”i rohkem faile.
HashPackage â vĂ€ike JSON-fail, mis esindab paketti, sealhulgas sisaldab paketi URL-i ja failide sha256 kontrolsummasid. NĂ€iteks, mariadb-server-core paketi suurus on 5 megabaiti, hashpackage suurus on kokku 6 kilobaiti. Umbes tuhat korda vĂ€iksem.
Deduplication â arhiivi loomine ilma dubleerivate failideta (kui deduplicaator teab, kust originaalpaki alla laadida, vĂ€hendab ta arhiivis dubliikate arvu).
Pakendamine
Pakendamise kĂ€igus vaadatakse ĂŒle kĂ”ik pakendatavas kataloogis olevad failid, arvutatakse nende kontrollsummad ja kui summa leitakse ĂŒhes tuntud HashPackage'is, salvestatakse faili metaandmed (nimi, hash, Ă”igused jne) eraldi failisse .hashget-restore.json, mis samuti lisatakse arhiivi.
Ise pakendamine nÀeb kÔige lihtsamal juhul vÀlja mitte keerulisem kui tar:
hashget -zf /tmp/mybackup.tar.gz --pack /path/to/dataLahtipakkimine
Lahtipakkimine toimub kahes etapis. Esiteks tavaline tar lahtipakkimine:
tar -xf mybackup.tar.gz -C /path/to/dataseejÀrel taastamine vÔrgust:
hashget -u /path/to/dataTaastamise kÀigus loeb hashget faili .hashget-restore.json, allalaadib vajalikud paketid, lahtipakib need ja ekstraktib vajalikud failid, paigutades need Ôigetesse kohtadesse, vajalike omaniku/grupi/Ôigustega.
TĂ€psemad asjad
Ălaltoodud kirjeldus on juba piisav neile, kes soovivad, et "tahaks nagu tar, aga et pakiks minu Debian 4 megabaidiks". Edasi liigume keeruliste asjade juurde.
Indekseerimine
Kui hashget'il polnud ĂŒhtegi HashPackage't, ei oleks ta suutnud midagi dedupliceerida.
HashPackage'i saab luua ka kÀsitsi (lihtsalt: hashget --submit https://wordpress.org/wordpress-5.1.1.zip -p my), kuid on ka mugavam tee.
Selleks, et saada vajalikke hashpackage'e, on etapp indekseerimine (see toimub automaatselt kÀsu --pack) ja heuristikate. Indekseerimise kÀigus "toimetab" hashget iga leitud faili kÔigi olemasolevate heuristikate juurde, mis teda huvitavad. Heuristikad saavad seejÀrel indekseerida mÔne Paketi, et luua HashPackage.
NĂ€iteks debian'e heuristika armastab faili /var/lib/dpkg/status ja tuvastab installitud debian pakette, ja kui need ei ole indekseeritud (neile ei ole loodud HashPackage't), siis allalaadib ja indekseerib need. Tulemus on vĂ€ga meeldiv â hashget suudab alati tĂ”husalt dedupliceerida debian OS'e, isegi kui neil on kĂ”ige uuemad paketid.
Failihinnangud (hints)
Kui teie vÔrgus kasutatakse mÔnda teie enda patendi omandi paketti vÔi avalikku paketti, mis ei kuulu hashgeti heuristikasse, vÔite lisada selle juurde lihtsa vihje faili hashget-hint.json jÀrgmise nÀidise jÀrgi:
{
"project": "wordpress.org",
"url": "https://ru.wordpress.org/wordpress-5.1.1-ru_RU.zip"
}Edasi, iga kord, kui arhiivi luuakse, indekseeritakse pakett (kui seda pole varem tehtud), ja paketi failid dedupeeritakse arhiivist. Programmimist pole vaja, kĂ”ik on vĂ”imalik teha vim-is ja sÀÀsta igas varukoopias. Pange tĂ€hele, et tĂ€nu hash-summade lĂ€henemisele, kui mĂ”ni paketi fail muutub kohalikult (nĂ€iteks konfiguratsioonifaili muutmine) â siis muudetud failid jÀÀvad arhiivi ânagu onâ ja ei vĂ€henenud.
Kui teie mÀÀratud paketid uuendatakse regulaarselt, kuid muudatused ei ole suured, siis saab teha hint ainult pÔhiliste versioonide jaoks. NÀiteks, versioonis 1.0 tehti hint viidates mypackage-1.0.tar.gz, ja see dedupereeritakse tÀielikult; seejÀrel, kui ilmus versioon 1.1, mis erines veidi, ei uuendatud hinti. Pole probleemi. Dedupereeritakse ainult need failid, mis kattuvad (mida saab taastada) versiooniga 1.0.
Heuristika, mis töötleb hint-faili, on hea nÀide, et mÔista heuristikate sisemist toimimise mehhanismi. See töötleb ainult faile hashget-hint.json (vÔi .hashget-hint.json punktiga) ja ignoreerib kÔiki teisi. Selle faili pÔhjal mÀÀrab ta, milline paketi URL tuleks indekseerida, ja hashget indekseerib selle (kui seda pole varem tehtud).
HashServer
KĂ”ikide varukoopiate loomisel oleks ĂŒsna töömahukas tĂ€ielikult indekseerida. Selleks on vaja alla laadida iga pakett, lahti pakkida, indekseerida. SeetĂ”ttu kasutab hashget skeemi, mille kohaselt . Kui avastatakse, et debian'i paketid on installitud ja kui neid kohalikest HashPackage'ist ei leia, siis proovib esmalt lihtsalt alla laadida HashPackage'i hash-serverilt. Ja ainult siis, kui see ei Ă”nnestu, laadib hashget paketi alla ja hash'ib selle (ning laadib hashserverisse, et hashserver saaks seda hiljem edastada).
HashServer ei ole skeemi kohustuslik element, vaid mitte kriitiline, see on mĂ”eldud ainult reposteede koormuse vĂ€hendamiseks ja kiirusel hoidmiseks. Seda saab hĂ”lpsasti vĂ€lja lĂŒlitada (valiku --hashserver ilma parameetriteta). Lisaks on kerge .
Inkrementaalsed ja diferentsiaalsed varukoopiad, kavandatud aegumise
vĂ”imaldab vĂ€ga lihtsalt moodustada skeemi . Miks mitte indekseerida oma varukaudu (kĂ”ik meie ainulaadsed failid)? Ăks kĂ€sk --submit ja kĂ”ik on valmis! JĂ€rgmine varukoopia, mille hashget loob, ei sisalda faili sellest arhiivist.
Kuid see pole vĂ€ga hea lĂ€henemine, sest taastamisel vĂ”ib juhtuda, et peame vĂ”tma kĂ”ik hashget-varukoopiad kogu ajaloo vĂ€ltel (kui igas on vĂ€hemalt ĂŒks ainulaadne fail). Selleks on olemas mehhanism . Indekseerimise kĂ€igus saab mÀÀrata HashPackage aegumiskuupĂ€eva --expires 2019-06-01, ja selle kuupĂ€eva saabumisel (kell 00:00) ei kasutata seda enam. Arhiivi ei pea pĂ€rast seda kuupĂ€eva kustutama (kuigi hashget vĂ”ib mugavalt nĂ€idata URL-e kĂ”igile varundustele, mis on aegunud vĂ”i aeguvad hetkel vĂ”i mis tahes kuupĂ€eval).
NĂ€iteks, kui 1. kuupĂ€eval teha tĂ€isvarundus ja indekseerida see kuupĂ€evas kuni kuu lĂ”puni â saame diferentsiaalsete varunduste plaani.
Kui indekseerida ka uusi varundusi â saame inkrementaalsete varunduste plaani.
Erinevalt traditsioonilistest plaanidest, vÔimaldab hashget kasutada mitmeid pÔhiallikasid. Varundus vÀheneb ka varasemate varunduste failide lisamise ja avalike failide (seda, mis on alla laaditav) kaudu.
Kui mingil pĂ”hjusel ei usalda me debiani ressursside usaldusvÀÀrsust () vĂ”i kasutame teist levitust, vĂ”ime ĂŒks kord teha tĂ€ieliku varunduse koos kĂ”ikide pakettidega ja seejĂ€rel toetuda sellele (). NĂŒĂŒd, kui kĂ”ik meie levitamise serverid ei ole meile ligipÀÀsetavad (sarnaselt suveniiride Internetile vĂ”i zombie-apokalĂŒpsise korral), kuid meie varukoopiad on korras â saame taastuda mis tahes lĂŒhikesest diff-varukoopiatest, toetudes ainult meie varasematele varukoopiatele.
Hashget toetub ainult usaldusvÀÀrsetele taastamisallikatele VEESEDRI VALIKUL. Milliseid te usaldusvÀÀrseteks peate â need ka kasutatakse.
FilePool ja Glacier
Mehhanism vÔimaldab mitte pöörduda pidevalt vÀliste serverite poole pakettide allalaadimiseks, vaid kasutada pakette kohalikust kataloogist vÔi ettevÔtte serverist, nÀiteks:
$ hashget -u . --pool /tmp/poolvÔi
$ hashget -u . --pool http://myhashdb.example.com/Kohalikku katalooge, mis moodustab puuli, on piisav lihtsalt luua kataloog ja sinna faile visata, hashget leiab ise vajaliku ĂŒlesande lĂ”puks. HTTP kaudu juurdepÀÀsetava puu jaoks peab looma spetsiaalsed sĂŒmboolsed lingid, seda saab teha ĂŒhe kĂ€sklusega (hashget-admin --build /var/www/html/hashdb/ --pool /tmp/pool). HTTP FilePool ise on staatilised failid, seega saab selle teenindamiseks kasutada igasuguseid lihtsamaid veebiservereid, koormus serverile on peaaegu null.
FilePool vÔimaldab kasutada baasesemetena mitte ainult http(s) ressursse, vaid ka , Amazon Glacierit.
PĂ€rast varukoopia ĂŒleslaadimist glaatsierisse saame selle Upload ID ja kasutame seda URL-ina. NĂ€iteks:
hashget --submit Glacier_Upload_ID --file /tmp/my-glacier-backup.tar.gz --project glacier --hashserver --expires 2019-09-01NĂŒĂŒd toetuvad uued (diferentsiaalsed) varukoopiad sellele varukoopiale ja on lĂŒhemad. PĂ€rast tar-i lahti pakkimist saame vaadata, millistele ressurssidele see toetub:
hashget --info /tmp/unpacked/ listja lihtsalt shell-skripti abil allalaadida glaatsierist kÔik need failid puudu ja kÀivitada tavaline taastamine: hashget -u /tmp/unpacked --pool /tmp/pool
Kas see on vaeva vÀÀrt
Lihtsaimal juhul peate lihtsalt vĂ€hem maksma varukoopiate eest (kui hoidate neid kuskil pilves tasu eest). VĂ”ib-olla â palju vĂ€hem.
Kuid see ei ole veel kĂ”ik. Kvaliteet tuleneb hulgast. Saate seda kasutada, et saada kvaliteetset varukoopiate sĂŒsteemi uuendust. NĂ€iteks kuna meie varukoopiad on nĂŒĂŒd lĂŒhemad â saab teha mitte igakuist, vaid igapĂ€evast varukoopiat. SĂ€ilitada neid mitte kuue kuu, vaid viis aastat. Varem hoiti neid aeglases, kuid odavas âkĂŒlmasâ salvestuses (Glacier), nĂŒĂŒd saate hoida kuumas, kust saate alati kiiresti varukoopia alla laadida ja taastuda minutite jooksul, mitte pĂ€evade jooksul.
Saame suurendada varukoopiate salvestamise usaldusvÀÀrsust. Kui me praegu hoiame neid ĂŒhes salvestuses, siis vĂ€hendades varukoopiate mahtu â saame salvestada 2-3 salvestusse ja ellu jÀÀda, kui ĂŒks neist kahjustub.
Kuidas proovida ja alustada kasutamist?
Mine GitLabi lehele , installime ĂŒhe kĂ€suga (pip3 install hashget[plugins]) ja lihtsalt loe ja tee seda quick-start. Arvan, et kĂ”ik lihtsad asjad saame teha â see vĂ”tab umbes 10-15 minutit. SeejĂ€rel saad proovida oma virtuaalmasinaid tihendada, teha, kui vajalik, viitamisi, et tihendamine oleks tugevam, mĂ€ngida basseinide, kohaliku hash-databaasi ja hash-serveriga, kui see huvi pakub, ning jĂ€rgmisel pĂ€eval vaadata, mis on inkrementaalse varukoopia suurus eile öösel.
Allikas: habr.com
