Å is ir pÄrskata raksts, kurÄ aprakstÄ«tas funkcijas. FaktiskÄ hashget izmantoÅ”ana (diezgan vienkÄrÅ”a) ir aprakstÄ«ta
SalÄ«dzinÄjums
SaskaÅÄ ar žanra likumu, es tÅ«lÄ«t sÄkÅ”u ar intrigu - rezultÄtu salÄ«dzinÄÅ”anu:
Datu paraugs
neizpakots izmÄrs
.tar.gz
hashget.tar.gz
WordPress-5.1.1
43 Mb
11 Mb (26%)
155 KB ( 0.3% )
Linux kodols 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% )
PamatinformÄcija par to, kÄdai jÄbÅ«t ideÄlai un efektÄ«vai dublÄjumam
Katru reizi, kad veidoju svaigi izveidotÄs virtuÄlÄs maŔīnas dublÄjumu, mani vajÄja sajÅ«ta, ka daru kaut ko nepareizi. KÄpÄc es saÅemu dūŔīgu dublÄjumu no sistÄmas, kur mana nenovÄrtÄjamÄ, neiznÄ«cÄ«gÄ radoÅ”ums ir vienas rindiÅas index.html ar tekstu āHello worldā?
KÄpÄc manÄ dublÄjumkopijÄ ir 16 MB /usr/sbin/mysqld? Vai tieÅ”Äm ir iespÄjams, ka Å”ajÄ pasaulÄ man ir tas gods glabÄt Å”o svarÄ«go kartotÄku, un, ja man neizdosies, tÄ tiks zaudÄta cilvÄcei? VisticamÄk nÄ. Tas tiek glabÄts ļoti uzticamos debian serveros (kuru uzticamÄ«bu un darbÄ«bas laiku nevar salÄ«dzinÄt ar to, ko varu nodroÅ”inÄt), kÄ arÄ« citu administratoru dublÄjumkopijÄs (miljonos). Vai mums tieÅ”Äm ir jÄizveido 10 000 000+ 1. Ŕī svarÄ«gÄ faila kopija, lai uzlabotu uzticamÄ«bu?
VispÄrÄ«gi tar -c
/ tar -x
. (Citiem vÄrdiem sakot, tas ir bezzudumu iepakojums)
KÄ darbojas hashget
hashget ir jÄdzieni Package un HashPackage, ar to palÄ«dzÄ«bu tas veic dedublikÄciju.
Pakete (plastmasas maisiÅÅ”). Fails (parasti .deb vai .tar.gz arhÄ«vs), ko var droÅ”i lejupielÄdÄt no interneta un no kura var iegÅ«t vienu vai vairÄkus failus.
HashPackage ā neliels JSON fails, kas apzÄ«mÄ pakotni, tostarp pakotnes URL un no tÄ esoÅ”o failu jaucÄjsummas (sha256). PiemÄram, 5 megabaitu mariadb-server-core pakotnei hashpackage izmÄrs ir tikai 6 kilobaiti. ApmÄram tÅ«kstoÅ” reižu mazÄk.
DeduplikÄcija ā arhÄ«va izveide bez dublikÄtiem (ja dedublikators zina, kur var lejupielÄdÄt oriÄ£inÄlo pakotni, tas samazina dublikÄtus no arhÄ«va).
Iepakojums
Iepakojot tiek skenÄti visi faili no iesaiÅojamÄ direktorija, tiek aprÄÄ·inÄtas to jaucÄjsummas un, ja summa tiek atrasta kÄdÄ no zinÄmajÄm HashPackage, tad tiek saglabÄti faila metadati (nosaukums, hash, piekļuves tiesÄ«bas utt.). Ä«paÅ”Ä failÄ .hashget-restore.json, kas arÄ« tiks iekļauts arhÄ«vÄ.
VienkÄrÅ”ÄkajÄ gadÄ«jumÄ pats iepakojums izskatÄs ne sarežģītÄks par darvu:
hashget -zf /tmp/mybackup.tar.gz --pack /path/to/data
IzpakoŔana
IzpakoÅ”ana tiek veikta divos posmos. Vispirms parastÄ darvas izpakoÅ”ana:
tar -xf mybackup.tar.gz -C /path/to/data
pÄc tam atjaunojiet no tÄ«kla:
hashget -u /path/to/data
Atjaunojot, hashget nolasa failu .hashget-restore.json, lejupielÄdÄ nepiecieÅ”amÄs pakotnes, izpako tÄs un izvelk nepiecieÅ”amos failus, instalÄjot tos vajadzÄ«gajos ceļos, ar nepiecieÅ”amajÄm Ä«paÅ”nieka/grupas/atļaujÄm.
GrÅ«tÄkas lietas
IepriekÅ” aprakstÄ«tÄ jau ir pietiekami tiem, kas "grib to kÄ darvu, bet iepakot manu Debian 4 megabaitos." VÄlÄk apskatÄ«sim sarežģītÄkas lietas.
IndeksÄÅ”ana
Ja hashget vispÄr nebÅ«tu nevienas HashPackage, tad tas vienkÄrÅ”i nevarÄtu neko dedublÄt.
HashPackage varat izveidot arÄ« manuÄli (vienkÄrÅ”i: hashget --submit https://wordpress.org/wordpress-5.1.1.zip -p my
), taÄu ir arÄ« ÄrtÄks veids.
Lai iegÅ«tu nepiecieÅ”amo hashpackage, ir posms indeksÄÅ”ana (tas tiek automÄtiski izpildÄ«ts ar komandu --pack
) Un heiristika. Veicot indeksÄÅ”anu, hashget katru atrasto failu āievadaā ar visu pieejamo heiristiku, kas par to interesÄjas. PÄc tam heiristika var indeksÄt jebkuru pakotni, lai izveidotu HashPackage.
PiemÄram, Debian heiristika mÄ«l failu /var/lib/dpkg/status un nosaka instalÄtÄs debian pakotnes, un, ja tÄs nav indeksÄtas (tÄm nav izveidota HashPackage), tÄs lejupielÄdÄ un indeksÄ. RezultÄts ir ļoti jauks efekts ā hashget vienmÄr efektÄ«vi atcels Debian OS dublikÄtus, pat ja tÄm ir jaunÄkÄs pakotnes.
Padomu faili
Ja jÅ«su tÄ«klÄ tiek izmantotas dažas jÅ«su patentÄtÄs pakotnes vai publiska pakotne, kas nav iekļauta hashget heiristikÄ, varat tam pievienot vienkÄrÅ”u mÄjienu failu hashget-hint.json Å”Ädi:
{
"project": "wordpress.org",
"url": "https://ru.wordpress.org/wordpress-5.1.1-ru_RU.zip"
}
PÄc tam katru reizi, kad tiek izveidots arhÄ«vs, pakotne tiks indeksÄta (ja tÄ iepriekÅ” nav veikta), un pakotnes faili tiks dedublÄti no arhÄ«va. ProgrammÄÅ”ana nav nepiecieÅ”ama, visu var izdarÄ«t no vim un saglabÄt katrÄ dublÄjumkopijÄ. LÅ«dzu, Åemiet vÄrÄ, ka, pateicoties jaucÄjsummas pieejai, ja daži faili no pakotnes tiek mainÄ«ti lokÄli (piemÄram, tiek mainÄ«ts konfigurÄcijas fails), mainÄ«tie faili tiks saglabÄti arhÄ«vÄ ātÄdi, kÄdi irā un netiks saÄ«sinÄti.
Ja dažas no jÅ«su pakotnÄm tiek periodiski atjauninÄtas, bet izmaiÅas nav ļoti lielas, varat norÄdÄ«t tikai galvenÄs versijas. PiemÄram, 1.0 versijÄ viÅi sniedza mÄjienu, norÄdot uz mypackage-1.0.tar.gz, un tas tiks pilnÄ«bÄ dedublÄts, pÄc tam viÅi izlaida versiju 1.1, kas ir nedaudz atŔķirÄ«ga, bet mÄjiens netika atjauninÄts. Ir labi. Tiek noÅemti tikai tie faili, kas atbilst (var tikt atjaunoti) versijai 1.0.
Heiristika, kas apstrÄdÄ mÄjienu failu, ir labs piemÄrs, lai izprastu heiristikas darbÄ«bas iekÅ”Äjo mehÄnismu. Tas apstrÄdÄ tikai failus hashget-hint.json (vai .hashget-hint.json ar punktu) un ignorÄ visus pÄrÄjos. No Ŕī faila tas nosaka, kura pakotnes URL jÄindeksÄ, un hashget indeksÄ to (ja tas vÄl nav izdarÄ«ts).
HashServer
BÅ«tu diezgan darbietilpÄ«gi veikt pilnu indeksÄciju, veidojot dublÄjumus. Lai to izdarÄ«tu, jums ir jÄlejupielÄdÄ katra pakotne, jÄizpako un jÄindeksÄ. TÄpÄc hashget izmanto shÄmu ar
HashServer ir neobligÄts shÄmas elements, tas nav bÅ«tisks, tas kalpo tikai, lai paÄtrinÄtu un samazinÄtu repozitoriju slodzi. Viegli atspÄjojams (pÄc izvÄles --hashserver
bez parametriem). TurklÄt jÅ«s varat viegli
InkrementÄlÄs un diferenciÄlÄs dublÄjumkopijas, plÄnota novecoÅ”ana
--submit
un esat pabeidzis! NÄkamajÄ dublÄjumkopijÄ, ko izveido hashget, netiks iekļauti faili no Ŕī arhÄ«va.
Bet Ŕī nav ļoti laba pieeja, jo var izrÄdÄ«ties, ka, atjaunojot, mums bÅ«s jÄizvelk visi hashget dublÄjumkopijas visÄ vÄsturÄ (ja katrÄ ir vismaz viens unikÄls fails). Tam ir mehÄnisms --expires 2019-06-01
, un pÄc Ŕī datuma (no 00:00) tas netiks izmantots. PaÅ”u arhÄ«vu pÄc Ŕī datuma nevar dzÄst (lai gan hashget var Ärti parÄdÄ«t visu dublÄjumu URL, kas Å”obrÄ«d vai jebkurÄ datumÄ ir/bÅ«s sapuvuÅ”i).
PiemÄram, ja mÄs veiksim pilnu dublÄjumu 1. datumÄ un indeksÄsim to ar kalpoÅ”anas laiku lÄ«dz mÄneÅ”a beigÄm, mÄs iegÅ«sim diferenciÄlo dublÄÅ”anas shÄmu.
Ja mÄs indeksÄsim jaunas dublÄjumkopijas tÄdÄ paÅ”Ä veidÄ, tiks izveidota papildu dublÄjumu shÄma.
AtŔķirÄ«bÄ no tradicionÄlajÄm shÄmÄm, hashget ļauj izmantot vairÄkus pamatÄ esoÅ”os avotus. DublÄjums tiks samazinÄts gan samazinot failus no iepriekÅ”ÄjÄm dublÄjumkopijÄm (ja tÄdi ir), gan ar publiskiem failiem (ko var lejupielÄdÄt).
Ja kÄda iemesla dÄļ mÄs neuzticamies Debian resursu uzticamÄ«bai (
Hashget paļaujas tikai uz uzticamiem atkopÅ”anas avotiem pÄc JÅŖSU ieskatiem. Tiks izmantoti tie, kurus uzskatÄt par uzticamiem.
FilePool un Glacier
mehÄnisms
$ hashget -u . --pool /tmp/pool
vai
$ hashget -u . --pool http://myhashdb.example.com/
Lai izveidotu pÅ«lu vietÄjÄ direktorijÄ, jums vienkÄrÅ”i jÄizveido direktorijs un jÄiemet tajÄ faili, pats hashget atradÄ«s vajadzÄ«go, izmantojot jaucÄjfunkcijas. Lai pÅ«ls bÅ«tu pieejams, izmantojot HTTP, Ä«paÅ”Ä veidÄ ir jÄizveido simboliskÄs saites; tas tiek darÄ«ts ar vienu komandu (hashget-admin --build /var/www/html/hashdb/ --pool /tmp/pool
). HTTP FilePool pats par sevi ir statiski faili, tÄpÄc to var apkalpot jebkurÅ” vienkÄrÅ”s tÄ«mekļa serveris, servera slodze ir gandrÄ«z nulle.
Pateicoties FilePool, jÅ«s varat izmantot ne tikai http(s) resursus kÄ bÄzes resursus, bet arÄ«
PÄc dublÄjuma augÅ”upielÄdes ledÄjÄ mÄs iegÅ«stam tÄ augÅ”upielÄdes ID un izmantojam to kÄ URL. PiemÄram:
hashget --submit Glacier_Upload_ID --file /tmp/my-glacier-backup.tar.gz --project glacier --hashserver --expires 2019-09-01
Tagad jaunas (diferenciÄlÄs) dublÄjumkopijas tiks veidotas, pamatojoties uz Å”o dublÄjumu, un tÄs bÅ«s Ä«sÄkas. PÄc tam, kad darva ir izpakota diffbackup, mÄs varam redzÄt, uz kÄdiem resursiem tas balstÄs:
hashget --info /tmp/unpacked/ list
un vienkÄrÅ”i izmantojiet Äaulas skriptu, lai lejupielÄdÄtu visus Å”os failus no Glacier uz baseinu un palaistu parasto atkopÅ”anu: hashget -u /tmp/unpacked āpool /tmp/pool
Vai spÄle ir sveces vÄrta?
VienkÄrÅ”ÄkajÄ gadÄ«jumÄ par dublÄjumkopijÄm vienkÄrÅ”i maksÄsiet mazÄk (ja par naudu tÄs glabÄsiet kaut kur mÄkonÄ«). VarbÅ«t daudz, daudz mazÄk.
Bet tas nav vienÄ«gais. KvantitÄte pÄrvÄrÅ”as kvalitÄtÄ. Varat to izmantot, lai iegÅ«tu augstas kvalitÄtes dublÄÅ”anas shÄmas jauninÄjumu. PiemÄram, tÄ kÄ mÅ«su dublÄjumkopijas tagad ir Ä«sÄkas, mÄs varam izveidot nevis ikmÄneÅ”a, bet gan ikdienas dublÄjumus. UzglabÄjiet tos nevis seÅ”us mÄneÅ”us, kÄ iepriekÅ”, bet 5 gadus. IepriekÅ” jÅ«s to glabÄjÄt lÄnÄ, bet lÄtÄ āaukstÄā krÄtuvÄ (Glacier), tagad varat to uzglabÄt karstÄ krÄtuvÄ, no kurienes vienmÄr varat Ätri lejupielÄdÄt dublÄjumu un atjaunot to minÅ«tÄs, nevis dienÄ.
Varat palielinÄt rezerves krÄtuves uzticamÄ«bu. Ja Å”obrÄ«d tos glabÄsim vienÄ krÄtuvÄ, tad, samazinot rezerves kopiju apjomu, varÄsim glabÄt 2-3 krÄtuvÄs un nesÄpÄ«gi izdzÄ«vot, ja kÄda no tÄm tiks sabojÄta.
KÄ izmÄÄ£inÄt un sÄkt lietot?
Dodieties uz Gitlab lapu pip3 install hashget[plugins]
) un vienkÄrÅ”i izlasiet un izpildiet Ätro palaiÅ”anu. Es domÄju, ka visu vienkÄrÅ”o darbu veikÅ”ana prasÄ«s 10-15 minÅ«tes. PÄc tam varat mÄÄ£inÄt saspiest savas virtuÄlÄs maŔīnas, izveidot ieteikumu failus, ja nepiecieÅ”ams, lai padarÄ«tu saspieÅ”anu spÄcÄ«gÄku, spÄlÄt ar pÅ«liÅiem, lokÄlo hash datu bÄzi un jaucÄjserveri, ja jÅ«s interesÄ, un nÄkamajÄ dienÄ redzÄt, kÄds ir papildu dublÄjuma lielums. bÅ«s virs vakardienas.
Avots: www.habr.com