— je to bezplatný, opensource deduplikačný nástroj — utilita podobná archívu, ktorá umožňuje výrazne zmenšiť veľkosť záloh, organizovať schémy inkrementálnej a diferenciálnej zálohy a nielen to.
Toto je prehľadný článok na opísanie možností. Samotné používanie hashget (dosť jednoduché) je popísané v projekte a .
Porovnanie
Podľa žánrových pravidiel začnem hneď zaujímavou časťou — porovnaním výsledkov:
Vzorové dáta
rozbalená veľkosť
.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% )
Pozadie, aký by mal byť ideálny a efektívny záloh
Každý raz, keď som robil zálohu čerstvo vytvorenej virtuálnej mašiny, mal som pocit, že niečo robím zle. Prečo mám objemnú zálohu zo systému, kde sa môj neoceniteľný majetok nachádza — jednoradkový index.html s textom „Hello world“?
Prečo je v mojej zálohe 16-megabajtový /usr/sbin/mysqld? Skutočne mám tú česť uchovávať tento dôležitý súbor, a ak sa mi to nepodarí — stratí sa pre ľudstvo? Pravdepodobne nie. Je uložený na veľmi spoľahlivých serveroch debian (spoľahlivosť a bezporuchovosť ktorých sa nedá porovnať s tým, čo môžem zabezpečiť ja), ako aj v zálohách (miliónoch) iných adminov. Je naozaj nutné vytvárať ďalšiu kópiu tohto dôležitého súboru pre zvýšenie spoľahlivosti 10 000 000 + 1?
V podstate a rieši tento problém. Pri balení — vytvára veľmi malú zálohu. Pri rozbalení — plne rozbalený systém, podobný tomu, ktorý by sa vytvoril pri tar -c / tar -x. (Inými slovami, ide o bezstratové balenie)
Ako funguje hashget
V hashget existujú pojmy Package a HashPackage, pomocou ktorých vykonáva deduplikačnú činnosť.
Balíček (balík). Súbor (zvyčajne archív .deb alebo .tar.gz), ktorý je možné bezpečne stiahnuť z internetu, a z ktorého je možné získať jeden alebo viac súborov.
HashPackage — malý JSON súbor predstavujúci Package, vrátane URL balíka a hash súm (sha256) súborov z neho. Napríklad pre balík mariadb-server-core s veľkosťou 5 megabajtov má hashpackage iba 6 kilobajtov. Približne tisíckrát menej.
Deduplicitácia — vytváranie archívu bez duplicitných súborov (ak deduplikačný nástroj vie, kde možno stiahnuť pôvodný balík, skracuje duplikáty v archíve).
Balenie
Pri balení sa prezerajú všetky súbory z baleného adresára, počítajú sa ich hash súčty, a ak je súčet nájdený v jednom z známých HashPackage, tak metadata o súbore (meno, hash, práva prístupu atď.) sa uložia do osobitného súboru .hashget-restore.json, ktorý taktiež bude zahrnutý do archívu.
Samotné balenie v najjednoduchšom prípade vyzerá nie zložitejšie než tar:
hashget -zf /tmp/mybackup.tar.gz --pack /path/to/dataRozbalenie
Rozbaľovanie sa robí v dvoch krokoch. Najprv bežné tar rozbaľovanie:
tar -xf mybackup.tar.gz -C /path/to/datapotom obnova zo siete:
hashget -u /path/to/dataPri obnove hashget číta súbor .hashget-restore.json, sťahuje potrebné balíčky, rozbaľuje ich a extrahuje potrebné súbory, pričom ich umiestňuje na správne cesty, s požadovanými owner/group/permissions.
Zložitejšie veci
To, čo je popísané vyššie — už stačí pre tých, ktorým "chcem ako tar, ale aby zabalil môj Debian do 4 megabajtov". Ďalej sa pozrieme na zložitejšie veci.
Indexovanie
Ak by hashget nemal ani jeden HashPackage, jednoducho by nemohol nič deduplikovať.
Vytvoriť HashPackage možno aj manuálne (jednoducho: hashget --submit https://wordpress.org/wordpress-5.1.1.zip -p my), ale existuje pohodlnejší spôsob.
Aby ste získali potrebné hashpackage, je tu etapa indexovania (tá sa vykonáva automaticky pri príkaze --pack) a heuristiky. Pri indexovaní hashget "hrá každému nájdenému súboru všetkým existujúcim heuristikám, pre ktoré je zaujímavý. Heuristiky potom môžu indexovať nejaký Package, aby vytvorili HashPackage.
Napríklad, debianová heuristika má rada súbor /var/lib/dpkg/status a objavuje nainštalované debian balíčky, a ak neboli indexované (pre nich neboli vytvorené HashPackage), sťahuje a indexuje ich. Vzniká veľmi príjemný efekt — hashget vždy efektívne deduplikuje debianové OS, aj keď na nich sú najnovšie balíčky.
Súbory-nápovedy (hints)
Ak vo vašej sieti používate nejaký vlastný balík alebo verejný balík, ktorý nie je zahrnutý v heuristikách hashget, môžete pridať doňho jednoduchý hint-súbor hashget-hint.json na vzor:
{
"project": "wordpress.org",
"url": "https://ru.wordpress.org/wordpress-5.1.1-ru_RU.zip"
}Pri každom vytvorení archívu bude balík indexovaný (ak nebol predtým) a súbory balíka budú deduplikované z archívu. Nie je potrebné žiadne programovanie, všetko sa dá urobiť z vim a ušetriť pri každom zálohovaní. Všimnite si, že vďaka prístupu prostredníctvom hashovacích súčtov, ak sa niektoré súbory z balíka zmenia lokálne (napríklad sa zmení konfiguračný súbor) — tak sa zmenené súbory uložia do archívu „tak ako sú“ a nebudú skrátené.
Ak sa váš vlastný balík pravidelne aktualizuje, ale zmeny nie sú veľmi veľké, môžete robiť hovor len pre hlavné verzie. Napríklad, v verzii 1.0 ste urobili hovor s odkazom na mypackage-1.0.tar.gz, a ten sa úplne deduplikovať, potom vydali verziu 1.1, ktorá je len trochu odlišná, a hovor nebol aktualizovaný. Nebojte sa. Deduplikujú sa len súbory, ktoré sa zhodujú (ktoré možno obnoviť) s verziou 1.0.
Heuristika, ktorá spracováva súbor hint, je dobrým príkladom na pochopenie vnútorného mechanizmu fungovania heuristík. Spracováva len súbory hashget-hint.json (alebo .hashget-hint.json s bodkou) a ignoruje všetky ostatné. Podľa tohto súboru určuje, ktorý URL balíka by mal byť indexovaný, a hashget ho indexuje (ak to nebolo urobené predtým).
HashServer
Bolo by dosť prácne pri vytváraní záloh úplne vykonávať indexovanie. Na to by bolo potrebné stiahnuť každý balík, rozbaliť ho, indexovať. Preto hashget používa schému s . Pri zistení nainštalovaného debian balíka, ak sa nenájde v lokálnych HashPackage, najprv sa pokúsi len stiahnuť HashPackage z hashservera. A len ak sa to nepodarí — hashget sám stiahne a hashuje balík (a nahrá na hashserver, aby ho v budúcnosti hashserver mohol poskytnúť).
HashServer nie je povinnou súčasťou schémy, nie je kritický, slúži výlučne na urýchlenie a zníženie záťaže na repozitároch. Ľahko sa vypína (možnosťou --hashserver bez parametrov). Okrem toho je ľahké .
Inkrementálne a diferenciálne zálohy, plánované zastaranie
umožňuje veľmi jednoducho vytvoriť schému Prečo by sme nemali indexovať zálohu (so všetkými našimi unikátnymi súbormi)? Jeden príkaz --submit a všetko je pripravené! Ďalšia záloha, ktorú vytvorí hashget, nebude obsahovať súbory z tohto archívu.
Ale to nie je veľmi dobrý prístup, pretože sa môže stať, že pri obnove budeme musieť vyhľadávať všetky hashget-zálohy za celú históriu (ak v každej bude aspoň jeden jedinečný súbor). Na to existuje mechanizmus . Pri indexovaní je možné uviesť dátum zastarania HashPackage --expires 2019-06-01, a po uplynutí tohto dátumu (od 00:00) sa nebude používať. Samotný archív je možné po tomto dátume nezmazať (aj keď hashget môže pohodlne zobraziť URL všetkých záloh, ktoré nám prepadli/prehrajú sa v danom momente alebo na akýkoľvek dátum).
Napríklad, ak 1. dňa vytvoríme úplnú zálohu a indexujeme ju s dobou životnosti do konca mesiaca — získame schému diferencovanej zálohy.
Ak takto budeme indexovať aj nové zálohy — bude to schéma inkrementálnych záloh.
Na rozdiel od tradičných schém, hashget umožňuje používať viacero základných zdrojov. Záloha bude skrátená aj vďaka skráteniu súborov z predchádzajúcich záloh (ak existujú), ako aj vďaka verejným súborom (to, čo je možné stiahnuť).
Ak z nejakého dôvodu neveríme spoľahlivosti debiánskych zdrojov () alebo používame iný distribučný systém, jednoducho môžeme raz urobiť úplnú zálohu so všetkými balíčkami a ďalej sa už naň spoľahnúť (). Teraz, ak budú všetky servery našich distribúcií nedostupné (v suvenírovom internete alebo počas zombie apokalypsy), ale naše zálohy budú v poriadku — môžeme sa obnoviť z akejkoľvek krátkej diff-zálohy, ktorá sa opiera iba o naše skoršie zálohy.
Hashget sa opiera iba o spoľahlivé zdroje obnovenia podľa VAŠEJ vlastnej voľby. Čo považujete za spoľahlivé — to bude použité.
FilePool a Glacier
Mechanizmus umožňuje neobrácať sa stále na externé servery na sťahovanie balíčkov, ale používať balíčky z lokálneho adresára alebo korporátneho servera, napríklad:
$ hashget -u . --pool /tmp/poolalebo
$ hashget -u . --pool http://myhashdb.example.com/Aby ste vytvorili pool v lokálnom adresári, stačí jednoducho vytvoriť adresár a nakopírovať do neho súbory, hashget ich nájde podľa hashov, ktoré potrebuje. Ak chcete sprístupniť pool cez HTTP, musíte špeciálne vytvoriť symbolické odkazy, čo sa dá urobiť jedným príkazom (hashget-admin --build /var/www/html/hashdb/ --pool /tmp/pool). Samotný HTTP FilePool sú statické súbory, takže ich môže obsluhovať akýkoľvek jednoduchý webový server, záťaž na server je takmer nulová.
Vďaka FilePool môžete ako základné zdroje použiť nielen zdroje na http(s), ale aj, , Amazon Glacier.
Po nahratí zálohy na glacier dostaneme jej Upload ID a použijeme ho ako URL. Napríklad:
hashget --submit Glacier_Upload_ID --file /tmp/my-glacier-backup.tar.gz --project glacier --hashserver --expires 2019-09-01Teraz nové (diferenčné) zálohy budú vychádzať z tejto zálohy a budú kratšie. Po rozbalení dif-zálohy môžeme skontrolovať, na ktoré zdroje sa odvoláva:
hashget --info /tmp/unpacked/ lista jednoducho shell skriptu stiahnuť všetky tieto súbory z glacier do poolu a spustiť bežné obnovenie: hashget -u /tmp/unpacked --pool /tmp/pool
Stojí to za to?
V najjednoduchšom prípade — jednoducho zaplatíte menej za zálohy (ak ich uchovávate niekde v oblaku za peniaze). Možno — oveľa oveľa menej.
Ale to nie je jediná výhoda. Množstvo sa mení na kvalitu. Môžete to využiť na získanie kvalitného vylepšenia schémy záloh. Napríklad, keď sú zálohy teraz kratšie — môžete robiť nie mesačné zálohy, ale denný. Uchovávať ich nie pol roka, ako predtým, ale 5 rokov. Predtým ste ich uchovávali v pomalom, ale lacnom „chladnom“ úložisku (Glacier), teraz môžete uchovávať v horúcom, odkiaľ môžete rýchlo stiahnuť zálohu a obnoviť sa za minúty, a nie za deň.
Môžete zvýšiť spoľahlivosť uchovávania záloh. Ak ich teraz uchovávame v jednom úložisku, tak zmenšením objemu záloh — môžeme uchovávať v 2-3 úložiskách a bez problémov prežiť, ak sa niektoré z nich poškodí.
Ako to vyskúšať a začať používať?
Choďte na stránku GitLab , nainštalujte jedným príkazom (pip3 install hashget[plugins]) a jednoducho si prečítame a vykonáme quick-start. Myslím, že všetky jednoduché úkony zabernú len 10-15 minút. Potom môžeme skúsiť skomprimovať svoje virtuálne stroje, vytvoriť, ak je potrebné, hint súbory, aby sme dosiahli lepšiu kompresiu, pohrať sa s poolmi, miestnou databázou hashov a hash serverom, ak bude záujem, a na ďalší deň si pozrieť, aká bude veľkosť inkrementálnej zálohy na včera.
Zdroj: habr.com
