Murriztu babeskopiak % 99.5 hashget-ekin

hashget - Doakoa da, kode irekia deduplicator artxibatzaile baten antzeko erabilgarritasun bat da, babeskopien tamaina nabarmen murrizteko, baita babeskopien eskema inkrementalak eta diferentzialak eta gehiago antolatzeko ere.

Hau ezaugarriak deskribatzeko artikulu orokorra da. Hashget-en benetako erabilera (nahiko sinplea) atalean deskribatzen da README proiektua eta wiki dokumentazioa.

konparazio

Generoaren legearen arabera, berehala hasiko naiz intrigarekin - emaitzak alderatuz:

Datu-lagina
paketatu gabeko tamaina
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% )

Babeskopia ideal eta eraginkorra izan behar duen aurrekariak

Sortu berri den makina birtual baten babeskopia bat egiten nuen bakoitzean, zerbait gaizki egiten ari nintzela sentsazioarekin hunkitzen nintzen. Zergatik lortzen dut sistematik babeskopia handi bat, non nire sormen preziogabea eta hondagarria den lerro bakarreko index.html "Kaixo mundua" testuarekin?

Zergatik dago 16 MB /usr/sbin/mysqld nire babeskopian? Benetan posible al da mundu honetan fitxategi garrantzitsu hau gordetzeko ohorea izatea, eta huts egiten badut, gizadiarentzat galduko da? Seguruenik ezetz. Fidagarritasun handiko debian zerbitzarietan gordetzen da (horien fidagarritasuna eta jarraitutasuna ezin dira nik eman dezakedanarekin alderatu), baita beste administratzaile batzuen babeskopietan ere (milioika). Benetan behar al dugu 10+ fitxategi garrantzitsu honen 000. kopia sortu fidagarritasuna hobetzeko?

Orokorrean hashget eta arazo hau konpontzen du. Paketatuta dagoenean, babeskopia oso txikia sortzen du. Despaketatzean - guztiz deskonprimitutako sistema bat, balitz bezala tar -c / tar -x. (Bestela esanda, galerarik gabeko ontzi bat da)

Hashget-ek nola funtzionatzen duen

hashget-ek Package eta HashPackage kontzeptuak ditu, haien laguntzarekin deduplicazioa egiten du.

Package (plastikozko poltsa). Fitxategi bat (normalean .deb edo .tar.gz artxiboa) Internetetik modu seguruan deskargatu daitekeen, eta bertatik fitxategi bat edo gehiago lor daitezkeen.

HashPaketea β€” Pakete bat adierazten duen JSON fitxategi txiki bat, paketearen URLa eta fitxategien hash batuketak (sha256) barne. Adibidez, 5 megabyte mariadb-server-core pakete baterako, hashpackage tamaina 6 kilobyte baino ez da. Mila aldiz gutxiago.

Desduplikatzea β€” fitxategi bikoiztu gabeko artxibo bat sortzea (desbikoizleak badaki non deskargatu daitekeen jatorrizko paketea, artxibotik bikoiztuak murrizten ditu).

Enbalajea

Paketatzean, paketatzen ari den direktorioko fitxategi guztiak eskaneatzen dira, haien hash batuketak kalkulatzen dira eta batura HashPackage ezagunetako batean aurkitzen bada, fitxategiari buruzko metadatuak (izena, hash, sarbide-eskubideak, etab.) gordetzen dira. .hashget-restore.json fitxategi berezi batean, hori ere artxiboan sartuko dena.

Kasurik errazenean, bilgarriak berak ez du alkitrana baino konplikatuagoa:

hashget -zf /tmp/mybackup.tar.gz --pack /path/to/data

Enbalatzeko

Despaketatzea bi fasetan egiten da. Lehenik eta behin ohiko tar desekatzea:

tar -xf mybackup.tar.gz -C /path/to/data

gero leheneratu saretik:

hashget -u /path/to/data

Berrezartzean, hashget-ek .hashget-restore.json fitxategia irakurtzen du, beharrezko paketeak deskargatu, deskonpaktatu eta beharrezko fitxategiak erauzten ditu, beharrezko bideetan instalatuz, beharrezko jabe/talde/baimenekin.

Gauza zailagoak

Goian deskribatzen dena nahikoa da jada "tar bezalakoa nahi dutenentzat, baina nire Debian 4 megabytetan paketatzeko". Ikus ditzagun gero gauza konplexuagoak.

Indexazioa

Hashget-ek HashPackage bakarra izango ez balu, orduan ezingo luke ezer desbikoiztu.

HashPackage bat eskuz ere sor dezakezu (besterik gabe: hashget --submit https://wordpress.org/wordpress-5.1.1.zip -p my), baina badago modu erosoago bat.

Beharrezko hashpackea lortzeko, etapa bat dago indexatzea (automatikoki exekutatzen da komandoarekin --pack) Eta heuristika. Indizea egitean, hashget-ek aurkitutako fitxategi bakoitza interesatzen zaien heuristika erabilgarri guztiei "elikatzen" die. Ondoren, heuristikoak edozein pakete indexatu dezake HashPackage bat sortzeko.

Adibidez, Debian heuristikoak /var/lib/dpkg/status fitxategia maite du eta instalatutako debian paketeak detektatzen ditu, eta indexatzen ez badira (ez dago haientzako HashPackagerik sortu), deskargatu eta indexatzen ditu. Emaitza oso efektu polita da - hashget-ek beti eraginkortasunez desbikoiztuko ditu Debian OSak, nahiz eta azken paketeak izan.

Aholku fitxategiak

Zure sareak zure jabedun pakete batzuk edo hashget heuristiketan sartzen ez den pakete publiko bat erabiltzen baditu, hashget-hint.json iradokizun fitxategi soil bat gehi diezaiokezu honela:

{
    "project": "wordpress.org",
    "url": "https://ru.wordpress.org/wordpress-5.1.1-ru_RU.zip"
}

Jarraian, artxibo bat sortzen den bakoitzean, paketea indexatuko da (aurretik izan ez bada), eta pakete-fitxategiak artxibotik kenduko dira. Ez da programaziorik behar, dena vim-etik egin daiteke eta babeskopia guztietan gorde. Kontuan izan hash sum ikuspegiari esker, paketearen fitxategi batzuk lokalean aldatzen badira (adibidez, konfigurazio-fitxategi bat aldatzen bada), aldatutako fitxategiak artxiboan gordeko dira "denean" eta ez dira moztuko.

Zure pakete batzuk aldian-aldian eguneratzen badira, baina aldaketak ez badira oso handiak, bertsio nagusietarako bakarrik iradoki dezakezu. Adibidez, 1.0 bertsioan mypackage-1.0.tar.gz-ra seinalatzen duen iradokizun bat egin zuten, eta guztiz desduplikatuta egongo da, gero 1.1 bertsioa kaleratu zuten, zertxobait ezberdina dena, baina aholkua ez zen eguneratu. Ondo da. 1.0 bertsiora (berrezarri daitezke) bat datozen fitxategiak baino ez dira bikoiztu.

Iradokizun fitxategia prozesatzen duen heuristikoa adibide ona da heuristikoak nola funtzionatzen duen barne-mekanismoa ulertzeko. Hashget-hint.json fitxategiak soilik prozesatzen ditu (edo .hashget-hint.json puntu batekin) eta beste guztiak alde batera uzten ditu. Fitxategi honetatik, zein pakete URL indexatu behar den zehazten du, eta hashget-ek indexatzen du (oraindik egin ez badu)

HashServer

Babeskopia sortzean indexazio osoa egitea nahiko lan handia izango litzateke. Horretarako, pakete bakoitza deskargatu, deskonprimitu eta indexatu behar duzu. Beraz, hashget-ek eskema bat erabiltzen du HashServer. Instalatutako Debian pakete bat detektatzen denean, tokiko HashPackage-an aurkitzen ez bada, lehenik eta behin HashPackage hash zerbitzaritik deskargatzeko saiakera egiten da. Eta honek funtzionatzen ez badu bakarrik, hashget-ek berak paketea deskargatu eta hash egiten du (eta hashserver-era igotzen du, hashserver-ek etorkizunean hornitzeko).

HashServer eskemaren aukerako elementu bat da, ez da kritikoa, biltegietako karga azkartzeko eta murrizteko soilik balio du. Erraz desgaitu (aukerakoa --hashserver parametrorik gabe). Horrez gain, erraz egin dezakezu egin zure hashserver.

Babeskopia gehigarriak eta diferentzialak, zaharkitze planifikatua

hashget diagrama bat egitea oso erraza da babeskopia inkrementalak eta diferentzialak. Zergatik ez dugu gure babeskopia bera indexatzen (gure fitxategi esklusibo guztiekin)? Talde bat --submit eta listo! Hashget-ek sortzen duen hurrengo babeskopiak ez ditu artxibo honetako fitxategiak jasoko.

Baina hau ez da oso hurbilketa ona, gerta daitekeelako leheneratzean historia osoko hashget babeskopi guztiak atera beharko ditugula (bakoitzak gutxienez fitxategi bakarra badu). Badago horretarako mekanismo bat babeskopien zaharkitze planifikatua. Indizatzerakoan, HashPackage-ren iraungitze-data zehaztu dezakezu --expires 2019-06-01, eta data horretatik aurrera (00:00etatik aurrera), ez da erabiliko. Artxiboa bera ezin da ezabatu data honen ondoren (nahiz eta hashget-ek momentuan edo edozein datatan ustel dauden/egingo diren babeskopia guztien URLak erakuts ditzake).

Esaterako, 1ean babeskopia osoa egiten badugu eta hilabete amaierara arte bizitza osoan indexatzen badugu, babeskopia eskema diferentziala lortuko dugu.

Babeskopia berriak modu berean indexatzen baditugu, babeskopia gehigarrien eskema bat egongo da.

Eskema tradizionalak ez bezala, hashget-ek azpiko iturri anitz erabiltzeko aukera ematen du. Babeskopia murriztuko da bai aurreko babeskopien fitxategiak murriztuz (baldin bada), bai fitxategi publikoen bidez (deskargatu daitekeena).

Arrazoiren batengatik Debian baliabideen fidagarritasunaz ez bagara fidatzen (https://snapshot.debian.org/) edo beste banaketa bat erabiltzen du, pakete guztiekin behin babeskopia osoa egin dezakegu eta gero horretan fidatu (heuristikoak desgaituz). Orain, gure banaketen zerbitzari guztiak erabilgarri ez badigute (Internet oroigarrietan edo zonbi apokalipsi batean), baina gure babeskopiak ordenatuta badaude, gure aurreko babeskopietan soilik oinarritzen den edozein desberdinen babeskopi labur batetik berreskuratu ahal izango dugu. .

Hashget-ek berreskuratze-iturri fidagarrietan bakarrik oinarritzen da ZURE erabakiz. Fidagarritzat jotzen dituzunak erabiliko dira.

FilePool eta Glacier

mekanismo File Pool paketeak deskargatzeko kanpoko zerbitzariekin etengabe ez harremanetan jartzeko aukera ematen du, baina tokiko direktorio edo zerbitzari korporatibo bateko paketeak erabili, adibidez:

$ hashget -u . --pool /tmp/pool

edo

$ hashget -u . --pool http://myhashdb.example.com/

Direktorio lokal batean igerileku bat egiteko, direktorio bat sortu eta bertan fitxategiak bota behar dituzu, hashget-ek berak aurkituko du hash-ak erabiliz behar duena. Igerilekua HTTP bidez eskuragarri izateko, esteka sinbolikoak era berezi batean sortu behar dituzu; hori komando batekin egiten da (hashget-admin --build /var/www/html/hashdb/ --pool /tmp/pool). HTTP FilePool bera fitxategi estatikoak dira, beraz, edozein web zerbitzari soilek zerbitza dezakete, zerbitzariaren karga ia zero da.

FilePool-i esker, http(s) baliabideak ez ezik oinarrizko baliabide gisa ere erabil ditzakezu Adibidez,Amazon Glaziarra.

Babeskopia glaziarrera igo ondoren, bere Karga IDa lortuko dugu eta URL gisa erabiltzen dugu. Adibidez:

hashget --submit Glacier_Upload_ID --file /tmp/my-glacier-backup.tar.gz --project glacier --hashserver --expires 2019-09-01

Orain segurtasun kopia berriak (diferentzialak) babeskopia honetan oinarrituko dira eta laburragoak izango dira. Diffbackup deskonprimitu ondoren, zer baliabidetan oinarritzen den ikus dezakegu:

hashget --info /tmp/unpacked/ list

eta erabili shell script bat Glacier-etik igerilekura fitxategi hauek guztiak deskargatzeko eta ohiko berreskurapena exekutatu: hashget -u /tmp/unpacked β€”pool /tmp/pool

Jokoak merezi du kandelak?

Kasurik errazenean, babeskopiengatik gutxiago ordainduko duzu (hodeian nonbait gordetzen badituzu dirua lortzeko). Agian askoz, askoz gutxiago.

Baina hori ez da gauza bakarra. Kantitatea kalitate bihurtzen da. Hau erabil dezakezu zure babeskopia-eskema kalitate handiko bertsio berritzeko. Adibidez, gure babeskopiak orain laburragoak direnez, ez hileroko babeskopiak egin ditzakegu, egunerokoak baizik. Ez gorde sei hilabetez, lehen bezala, 5 urtez baizik. Lehen, biltegiratze motelean baina merke "hotzean" gordetzen zenuten (Glaziarra), orain biltegiratze beroan gorde dezakezu, eta hortik beti azkar deskargatu dezakezu segurtasun kopia bat eta berrezartu minututan, ez egun batean.

Babeskopia biltegiratzeko fidagarritasuna areagotu dezakezu. Gaur egun biltegiratze-instalazio batean gordetzen baditugu, babeskopien bolumena murriztuz gero, 2-3 biltegiratze-instalazioetan gorde ahal izango ditugu eta horietako bat hondatzen bada minik gabe iraungo dugu.

Nola saiatu eta erabiltzen hasi?

Joan gitlab orrialdera https://gitlab.com/yaroslaff/hashget, instalatu komando batekin (pip3 install hashget[plugins]) eta irakurri eta exekutatu abiarazte azkarra. Uste dut 10-15 minutu beharko direla gauza sinple guztiak egiteko. Ondoren, zure makina birtualak konprimitzen saia zaitezke, aholku fitxategiak egin behar izanez gero konpresioa indartsuagoa izan dadin, igerilekuekin jolastu, hash datu-base lokal batekin eta hash zerbitzari batekin interesa baduzu, eta hurrengo egunean ikusi segurtasun-kopia inkrementalaren tamaina zein den. atzokoaren gainean egongo da.

Iturria: www.habr.com

Gehitu iruzkin berria