Samaziniet dublējumu skaitu par 99.5%, izmantojot hashget

hashget - tas ir bezmaksas, atvērtā koda dedublikators ir arhivētājam lÄ«dzÄ«ga utilÄ«ta, kas ļauj ievērojami samazināt dublējumu lielumu, kā arÄ« organizēt papildu un diferenciālās dublÄ“Å”anas shēmas un daudz ko citu.

Šis ir pārskata raksts, kurā aprakstītas funkcijas. Faktiskā hashget izmantoŔana (diezgan vienkārŔa) ir aprakstīta README projektu un wiki dokumentācija.

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 hashget un atrisina Å”o problēmu. Iepakojot, tas rada ļoti mazu dublējumu. Izpakojot - pilnÄ«bā izpakota sistēma, lÄ«dzÄ«ga kā bÅ«tu, ja 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. Kad tiek atklāta instalēta Debian pakotne, ja tā nav atrasta vietējā HashPackage, vispirms tiek mēģināts vienkārÅ”i lejupielādēt HashPackage no hash servera. Un tikai tad, ja tas nedarbojas, pats hashget lejupielādē un sajauc pakotni (un augÅ”upielādē to hashserverā, lai Å”is hashserveris to nodroÅ”inātu nākotnē).

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 izveidojiet savu hashserveri.

Inkrementālās un diferenciālās dublējumkopijas, plānota novecoÅ”ana

hashget ļauj ļoti viegli izveidot diagrammu inkrementālās un diferenciālās dublējumkopijas. Kāpēc mēs neindeksējam savu dublējumu (ar visiem mÅ«su unikālajiem failiem)? Viena komanda --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 plānotā dublējumu novecoÅ”ana. Veicot indeksāciju, varat norādÄ«t HashPackage derÄ«guma termiņu --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 (https://snapshot.debian.org/) vai izmanto citu izplatÄ«Å”anu, mēs varam vienreiz izveidot pilnu dublējumu ar visām pakotnēm un pēc tam paļauties uz to (atspējojot heiristiku). Tagad, ja izrādās, ka visi mÅ«su izplatÄ«Å”anas serveri mums nav pieejami (suvenÄ«ru internetā vai zombiju apokalipses laikā), bet mÅ«su dublējumkopijas ir kārtÄ«bā, mēs varam atgÅ«ties no jebkuras Ä«sas atŔķirÄ«bas dublējumkopijas, kas balstās tikai uz mÅ«su iepriekŔējām dublējumkopijām. .

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 FilePool ļauj pastāvīgi nesazināties ar ārējiem serveriem, lai lejupielādētu pakotnes, bet izmantot pakotnes no vietējā direktorija vai korporatīvā servera, piemēram:

$ 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ī piemēram, Amazones ledājs.

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 https://gitlab.com/yaroslaff/hashget, instalējiet ar vienu komandu (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

Pievieno komentāru