Toto je prehľadný článok, ktorý popisuje funkcie. Samotné použitie hashgetu (celkom jednoduché) je popísané v
Сравнение
Podľa zákona žánru začnem hneď s intrigami - porovnávaním výsledkov:
Vzorka údajov
rozbalená veľkosť
.tar.gz
hashget.tar.gz
WordPress-5.1.1
43 Mb
11 Mb (26 %)
155 kb ( 0.3% )
Linuxové jadro 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 o tom, aká by mala byť ideálna a efektívna záloha
Vždy, keď som si robil zálohu čerstvo vytvoreného virtuálneho stroja, prenasledoval ma pocit, že robím niečo zle. Prečo dostávam mohutnú zálohu zo systému, kde mojou neoceniteľnou, nehynúcou kreativitou je jednoriadkový index.html s textom „Ahoj svet“?
Prečo je v mojej zálohe 16 MB /usr/sbin/mysqld? Je naozaj možné, že v tomto svete mám tú česť uchovávať tento dôležitý spis a ak zlyhám, ľudstvo ho stratí? S najväčšou pravdepodobnosťou nie. Je uložený na vysoko spoľahlivých serveroch debianu (ktorých spoľahlivosť a dostupnosť nemožno porovnať s tým, čo môžem poskytnúť), ako aj v zálohách (ich milióny) iných správcov. Naozaj potrebujeme vytvoriť 10 000 000+ 1. kópiu tohto dôležitého súboru, aby sme zvýšili spoľahlivosť?
Vo všeobecnosti tar -c
/ tar -x
. (Inými slovami, toto je bezstratové balenie)
Ako funguje hashget
hashget má koncepty Package a HashPackage, s ich pomocou vykonáva deduplikáciu.
Balíček (plastový sáčok). Súbor (zvyčajne archív .deb alebo .tar.gz), ktorý možno bezpečne stiahnuť z internetu a z ktorého možno získať jeden alebo viac súborov.
HashPackage — malý súbor JSON predstavujúci balík vrátane adresy URL balíka a súčtu hash (sha256) súborov z neho. Napríklad pre 5 megabajtový balík mariadb-server-core je veľkosť hashpackage iba 6 kilobajtov. Asi tisíckrát menej.
Deduplikácia — vytvorenie archívu bez duplicitných súborov (ak deduplikátor vie, kde je možné stiahnuť pôvodný balík, zníži počet duplikátov z archívu).
Balenie
Pri balení sa skenujú všetky súbory z baleného adresára, vypočítajú sa ich hash sumy a ak sa suma nájde v niektorom zo známych HashPackage, tak sa uložia metadáta o súbore (názov, hash, prístupové práva atď.). v špeciálnom súbore .hashget-restore.json, ktorý bude tiež súčasťou archívu.
V najjednoduchšom prípade samotný obal nevyzerá komplikovanejšie ako decht:
hashget -zf /tmp/mybackup.tar.gz --pack /path/to/data
Vybalenie
Rozbalenie prebieha v dvoch fázach. Najprv zvyčajné vybalenie dechtu:
tar -xf mybackup.tar.gz -C /path/to/data
potom obnovte zo siete:
hashget -u /path/to/data
Pri obnove si hashget prečíta súbor .hashget-restore.json, stiahne potrebné balíčky, rozbalí ich a rozbalí potrebné súbory, nainštaluje ich do požadovaných ciest s požadovaným vlastníkom/skupinou/oprávneniami.
Ťažšie veci
To, čo je popísané vyššie, už stačí pre tých, ktorí to „chcú ako tar, ale zbaliť môj Debian do 4 megabajtov“. Pozrime sa na zložitejšie veci neskôr.
Indexovanie
Ak by hashget nemal vôbec jediný HashPackage, potom by jednoducho nemohol nič deduplikovať.
HashPackage môžete vytvoriť aj manuálne (jednoducho: hashget --submit https://wordpress.org/wordpress-5.1.1.zip -p my
), ale existuje pohodlnejší spôsob.
Na získanie potrebného hashpackage je tu fáza indexovanie (automaticky sa vykoná príkazom --pack
) A heuristiky. Pri indexovaní hashget „podáva“ každý nájdený súbor všetkým dostupným heuristikám, ktoré sa oň zaujímajú. Heuristika potom môže indexovať ľubovoľný balík a vytvoriť HashPackage.
Napríklad heuristika Debianu miluje súbor /var/lib/dpkg/status a zisťuje nainštalované balíky debianu, a ak nie sú indexované (nie je pre ne vytvorený žiadny HashPackage), stiahne ich a indexuje. Výsledkom je veľmi pekný efekt - hashget vždy efektívne deduplikuje OS Debian, aj keď majú najnovšie balíčky.
Súbory tipov
Ak vaša sieť používa niektoré z vašich proprietárnych balíkov alebo verejný balík, ktorý nie je zahrnutý v heuristike hashget, môžete doň pridať jednoduchý súbor s pokynmi hashget-hint.json takto:
{
"project": "wordpress.org",
"url": "https://ru.wordpress.org/wordpress-5.1.1-ru_RU.zip"
}
Ďalej, pri každom vytvorení archívu bude balík indexovaný (ak predtým nebol) a súbory balíka budú z archívu deduplikované. Nie je potrebné žiadne programovanie, všetko sa dá urobiť z vim a uložiť do každej zálohy. Upozorňujeme, že vďaka prístupu hash sum, ak sa niektoré súbory z balíka zmenia lokálne (napríklad sa zmení konfiguračný súbor), zmenené súbory sa uložia do archívu „tak, ako sú“ a nebudú skrátené.
Ak sa niektoré z vašich vlastných balíkov pravidelne aktualizujú, ale zmeny nie sú príliš veľké, môžete naznačiť iba hlavné verzie. Napríklad vo verzii 1.0 urobili nápovedu smerujúcu na mypackage-1.0.tar.gz a tá bude úplne deduplikovaná, potom vydali verziu 1.1, ktorá je trochu iná, ale nápoveda nebola aktualizovaná. Je to v poriadku. Odstránia sa iba súbory, ktoré zodpovedajú verzii 1.0 (je možné ju obnoviť).
Heuristika, ktorá spracováva súbor s nápovedou, je dobrým príkladom na pochopenie vnútorného mechanizmu fungovania heuristiky. Spracováva iba súbory hashget-hint.json (alebo .hashget-hint.json s bodkou) a všetky ostatné ignoruje. Z tohto súboru určí, ktorá adresa URL balíka sa má indexovať, a indexuje ju hashget (ak tak ešte neurobil)
HashServer
Vykonať úplnú indexáciu pri vytváraní záloh by bolo dosť náročné na prácu. Ak to chcete urobiť, musíte si stiahnuť každý balík, rozbaliť ho a indexovať. Preto hashget používa schému s
HashServer je voliteľný prvok schémy, nie je kritický, slúži výhradne na zrýchlenie a zníženie zaťaženia úložísk. Ľahko deaktivovateľné (voliteľné --hashserver
bez parametrov). Okrem toho môžete ľahko
Prírastkové a rozdielové zálohy, plánované zastarávanie
--submit
a hotovo! Ďalšia záloha, ktorú vytvorí hashget, nebude obsahovať súbory z tohto archívu.
Toto ale nie je veľmi dobrý prístup, pretože sa môže ukázať, že pri obnove budeme musieť stiahnuť všetky zálohy hashgetov v celej histórii (ak každá obsahuje aspoň jeden jedinečný súbor). Existuje na to mechanizmus --expires 2019-06-01
, a po tomto dátume (od 00:00) sa nebude používať. Samotný archív nie je možné po tomto dátume vymazať (hoci hashget môže pohodlne zobraziť adresy URL všetkých záloh, ktoré sú/budú momentálne alebo k akémukoľvek dátumu zhnité).
Ak napríklad vytvoríme plnú zálohu 1. a indexujeme ju s životnosťou do konca mesiaca, dostaneme schému rozdielovej zálohy.
Ak indexujeme nové zálohy rovnakým spôsobom, bude existovať schéma prírastkových záloh.
Na rozdiel od tradičných schém vám hashget umožňuje použiť viacero základných zdrojov. Záloha sa zredukuje zmenšením súborov z predchádzajúcich záloh (ak existujú), ako aj verejných súborov (čo je možné stiahnuť).
Ak z nejakého dôvodu nedôverujeme spoľahlivosti zdrojov Debianu (
Hashget sa spolieha iba na dôveryhodné zdroje obnovy podľa VÁŠHO uváženia. Použijú sa tie, ktoré považujete za spoľahlivé.
FilePool a ľadovec
mechanizmus
$ hashget -u . --pool /tmp/pool
alebo
$ hashget -u . --pool http://myhashdb.example.com/
Ak chcete vytvoriť fond v lokálnom adresári, stačí vytvoriť adresár a hodiť do neho súbory, hashget sám nájde to, čo potrebuje, pomocou hash. Ak chcete sprístupniť fond cez HTTP, musíte špeciálnym spôsobom vytvoriť symbolické odkazy, a to pomocou jedného príkazu (hashget-admin --build /var/www/html/hashdb/ --pool /tmp/pool
). Samotný HTTP FilePool sú statické súbory, takže ho môže obslúžiť každý jednoduchý webový server, zaťaženie servera je takmer nulové.
Vďaka FilePool môžete využívať nielen zdroje http(s) ako základné zdroje, ale aj
Po nahratí zálohy na ľadovec získame jeho 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-01
Teraz budú nové (rozdielové) zálohy založené na tejto zálohe a budú kratšie. Po rozbalení zálohy tar tar vidíme, na aké zdroje sa spolieha:
hashget --info /tmp/unpacked/ list
a pomocou shell skriptu stiahnite všetky tieto súbory z Glacier do fondu a spustite zvyčajnú obnovu: hashget -u /tmp/unpacked —pool /tmp/pool
Stojí hra za sviečku?
V tom najjednoduchšom prípade jednoducho zaplatíte menej za zálohy (ak si ich za peniaze uložíte niekde do cloudu). Možno oveľa, oveľa menej.
Ale to nie je to jediné. Kvantita sa mení na kvalitu. Môžete to použiť na získanie vysokokvalitnej inovácie vašej schémy zálohovania. Napríklad, keďže naše zálohy sú teraz kratšie, môžeme robiť nie mesačné, ale denné zálohy. Skladujte ich nie šesť mesiacov, ako predtým, ale 5 rokov. Predtým ste ho ukladali do pomalého, ale lacného „studeného“ úložiska (Glacier), teraz ho môžete uložiť do horúceho úložiska, odkiaľ si vždy rýchlo stiahnete zálohu a obnovíte ju za pár minút, nie za deň.
Môžete zvýšiť spoľahlivosť záložného úložiska. Ak ich momentálne uložíme do jedného úložiska, tak znížením objemu záloh ich budeme môcť uložiť na 2-3 úložiskách a bezbolestne prežiť, ak sa jeden z nich poškodí.
Ako vyskúšať a začať používať?
Prejdite na stránku gitlab pip3 install hashget[plugins]
) a stačí si prečítať a spustiť rýchly štart. Myslím, že vykonanie všetkých jednoduchých vecí bude trvať 10-15 minút. Potom sa môžete pokúsiť skomprimovať svoje virtuálne počítače, v prípade potreby vytvoriť súbory s nápovedou, aby bola kompresia silnejšia, pohrať sa s fondmi, lokálnou hašovacou databázou a hašovacím serverom, ak máte záujem, a nasledujúci deň zistiť, aká je veľkosť prírastkovej zálohy bude na vrchole včerajšieho.
Zdroj: hab.com