Riduce i backup di 99.5% cù hashget

hashget - hè liberu, open source deduplicatore hè una utilità simile à un archiver chì permette di riduce significativamente a dimensione di backups, è ancu urganizà schemi di salvezza incrementali è differenziali è più.

Questu hè un articulu generale per descriverà e caratteristiche. L'usu attuale di hashget (abbastanza simplice) hè descrittu in README prughjettu è documentazione wiki.

Comparaison

Sicondu a lege di u generu, principiaraghju subitu cù l'intriga - paragunendu i risultati:

mostra di dati
taglia spaccata
.tar.gz
hashget.tar.gz

WordPress-5.1.1
43 Mb
11 Mb (26%)
155 Kb ( 0.3% )

Kernel Linux 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% )

Sfondate nantu à ciò chì deve esse una copia di salvezza ideale è efficace

Ogni volta chì aghju fattu una copia di salvezza di una macchina virtuale appena creata, era perseguitatu da a sensazione chì aghju fattu qualcosa di sbagliatu. Perchè aghju ottene una copia di salvezza robusta da u sistema, induve a mo creatività inestimabile è imperibule hè un index.html d'una sola linea cù u testu "Hello world"?

Perchè ci hè un 16 MB /usr/sbin/mysqld in a mo copia di salvezza? Hè veramente pussibule chì in stu mondu aghju l'onore di guardà stu schedariu impurtante, è s'ellu fallu, serà persu per l'umanità ? Probabilmente no. Hè guardatu in servitori debian altamente affidabili (a affidabilità è a continuità di quale ùn pò micca esse paragunatu à ciò chì possu furnisce), è ancu in backups (milioni di elli) di altri amministratori. Avemu veramente bisognu di creà 10+ 000st copia di stu schedariu impurtante per migliurà a affidabilità?

In generale hashget è risolve stu prublema. Quandu imballate, crea una copia di salvezza assai chjuca. Quandu unpacking - un sistema cumplitamenti unpacked, simile à ciò chì saria si tar -c / tar -x. (In altre parolle, questu hè un imballaggio senza perdita)

Cumu funziona l'hashget

hashget hà i cuncetti di Package è HashPackage, cù u so aiutu esegue a deduplicazione.

pacchettu (saccu di plastica). Un schedariu (di solitu un archiviu .deb o .tar.gz) chì pò esse scaricatu in modu sicuru da Internet, è da quale unu o più schedari ponu esse acquistati.

HashPackage - un picculu schedariu JSON chì rapprisenta un Pacchettu, cumpresu l'URL di u pacchettu è l'hash sums (sha256) di i schedari da ellu. Per esempiu, per un pacchettu mariadb-server-core di 5 megabyte, a dimensione di l'hashpackage hè solu 6 kilobyte. Circa mille volte menu.

Deduplicazione - creà un archiviu senza schedari duplicati (se u deduplicatore sapi induve u pacchettu uriginale pò esse scaricatu, riduce i duplicati da l'archiviu).

Imballaggio

Quandu u pacchettu, tutti i fugliali da u repertoriu chì hè imballatu sò scansati, i so sume di hash sò calculati, è se a somma si trova in unu di i HashPackages cunnisciuti, allora metadata nantu à u schedariu (nome, hash, diritti d'accessu, etc.) hè salvatu. in un schedariu speciale .hashget-restore.json, chì serà ancu inclusu in l'archiviu.

In u casu più simplice, l'imballu stessu ùn pare micca più complicatu di u tar:

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

Sballà

Unpacking hè fattu in duie tappe. Prima u solitu tar unpacking:

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

poi restaurà da a reta:

hashget -u /path/to/data

Quandu restaurà, hashget leghjite u schedariu .hashget-restore.json, scaricate i pacchetti necessarii, sbulicà, è estrae i schedarii necessarii, installendu in i percorsi necessarii, cù u pruprietariu / gruppu / permessi necessarii.

Cose più difficili

Ciò chì hè descrittu sopra hè digià abbastanza per quelli chì "vuleranu cum'è tar, ma per imballà a mo Debian in 4 megabyte". Fighjemu più tardi e cose più cumplesse.

Indexazione

Se hashget ùn hà micca avutu un solu HashPackage in tuttu, allora solu ùn puderia micca deduplicate nunda.

Pudete ancu creà un HashPackage manualmente (semplicemente: hashget --submit https://wordpress.org/wordpress-5.1.1.zip -p my), ma ci hè un modu più còmuda.

Per uttene u hashpackage necessariu, ci hè una tappa indexazione (Hè eseguitu automaticamente cù u cumandimu --pack) è euristica. Quandu l'indexazione, l'hashget "alimenta" ogni schedariu truvatu à tutti l'euristiche dispunibili chì sò interessate in questu. Euristiche ponu allora indexà qualsiasi Package per creà un HashPackage.

Per esempiu, l'heuristicu di Debian ama u schedariu /var/lib/dpkg/status è detecta i pacchetti debian installati, è s'ellu ùn sò micca indiziati (ùn ci hè micca HashPackage creatu per elli), scaricate è indici. U risultatu hè un effettu assai bellu - hashget sempre deduplicate efficacemente i SO Debian, ancu s'ellu anu l'ultimi pacchetti.

I schedarii di suggerimenti

Se a vostra reta usa alcuni di i vostri pacchetti privati ​​o un pacchettu publicu chì ùn hè micca inclusu in l'heuristiche di hashget, pudete aghjunghje un semplice file di suggerimenti hashget-hint.json cum'è questu:

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

Dopu, ogni volta chì un archiviu hè creatu, u pacchettu serà indexatu (se ùn hè micca statu prima), è i schedarii di u pacchettu seranu deduplicati da l'archiviu. Nisuna prugrammazione hè necessariu, tuttu pò esse fattu da vim è salvà in ogni copia di salvezza. Per piacè nutate chì grazia à l'approcciu di sum hash, se alcuni schedarii di u pacchettu sò cambiati in u locu (per esempiu, un schedariu di cunfigurazione hè cambiatu), i schedarii cambiati seranu salvati in l'archiviu "cum'è" è ùn saranu micca truncati.

Se alcuni di i vostri pacchetti sò aghjurnati periodicamente, ma i cambiamenti ùn sò micca assai grande, pudete suggerisce solu per versioni maiò. Per esempiu, in a versione 1.0 anu fattu un suggerimentu chì punta à mypackage-1.0.tar.gz, è serà completamente deduplicatu, dopu anu liberatu a versione 1.1, chì hè un pocu sfarente, ma u suggerimentu ùn hè micca aghjurnatu. Va bè. Solu i fugliali chì currispondenu (pò esse restaurati à) a versione 1.0 sò deduplicati.

L'euristicu chì processa u schedariu di suggerimentu hè un bon esempiu per capiscenu u mecanismu internu di u funziunamentu di l'euristiche. Prucessa solu i schedari hashget-hint.json (o .hashget-hint.json cù un puntu) è ignora tutti l'altri. Da stu schedariu, determina quale URL di u pacchettu deve esse indexatu, è l'hashget l'indici (se ùn l'hà micca digià fattu)

HashServer

Saria assai laboriosu per fà un indexamentu cumpletu quandu creanu backups. Per fà questu, avete bisognu di scaricà ogni pacchettu, unpack it, and index it. Dunque hashget usa un schema cun HashServer. Quandu un pacchettu Debian installatu hè rilevatu, s'ellu ùn hè micca truvatu in u HashPackage lucale, un tentativu hè prima fattu per scaricà solu l'HashPackage da u servitore hash. È solu s'ellu ùn funziona micca, l'hashget si scarica è hash u pacchettu (è u carica à l'hashserver, cusì chì l'hashserver li furnisce in u futuru).

HashServer hè un elementu facultativu di u schema, micca criticu, serve solu per accelerà è riduce a carica nantu à i repositori. Facilmente disabilitatu (opzionale --hashserver senza parametri). Inoltre, pudete facilmente fate u vostru propiu hashserver.

Backup incrementali è differenziali, obsolescenza pianificata

hashget rende assai faciule fà un diagramma backups incrementali è differenziali. Perchè ùn avemu micca indexatu a nostra copia di salvezza stessu (cù tutti i nostri schedari unichi)? Una squadra --submit è avete finitu ! A prossima copia di salvezza chì hashget crea ùn includerà micca i fugliali da questu archiviu.

Ma questu ùn hè micca un accostu assai bonu, perchè pò esce chì quandu restaurà avemu da tirà tutte e copie di salvezza di hashget in tutta a storia (se ognunu cuntene almenu un schedariu unicu). Ci hè un mecanismu per questu obsolescenza pianificata di backups. Quandu indexate, pudete specificà a data di scadenza di HashPackage --expires 2019-06-01, è dopu à sta data (da 00:00), ùn serà micca usatu. L'archiviu stessu ùn pò micca esse sguassatu dopu à sta data (Ancu se l'hashget pò mustrà convenientemente l'URL di tutte e copie di salvezza chì sò / seranu rotte in u mumentu o in ogni data).

Per esempiu, se facemu una copia di salvezza completa in u 1u è l'indici cù una vita finu à a fine di u mese, averemu un schema di salvezza differenziale.

Sè avemu indici novi backups in u listessu modu, ci sarà un schema di salvezza incrementali.

A cuntrariu di i schemi tradiziunali, hashget permette di utilizà parechje fonti sottostanti. A copia di salvezza serà ridutta sia riducendu i fugliali da e copie di salvezza precedente (se ci hè) sia da i schedarii publichi (ciò chì pò esse scaricatu).

Se per una certa ragione ùn avemu micca fiducia in l'affidabilità di e risorse Debian (https://snapshot.debian.org/) o aduprate una altra distribuzione, pudemu simpricimenti fà una copia di salvezza completa una volta cù tutti i pacchetti, è poi cunfidendu nantu à questu (disattivendu l'euristica). Avà, se tutti i servitori di e nostre distribuzioni ùn sò micca dispunibuli per noi (nantu à l'Internet di souvenir o durante una apocalisse zombie), ma i nostri backups sò in ordine, pudemu ricuperà da qualsiasi copia di salvezza di diffarenza corta chì si basa solu in i nostri backups prima. .

Hashget si basa solu in fonti di ricuperazione di fiducia à a vostra discrezione. Quelli chì cunsiderà affidabili seranu utilizati.

File Pool è Glacier

Mechanismu File Pool permette micca di cuntattà constantemente i servitori esterni per scaricà pacchetti, ma aduprà pacchetti da un annuariu locale o un servitore corporativu, per esempiu:

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

o

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

Per fà una piscina in un repertoriu lucale, basta à creà un repertoriu è scaccià i fugliali in questu, hashget stessu truverà ciò chì hà bisognu cù l'hash. Per fà a piscina accessibile via HTTP, avete bisognu di creà ligami simbolichi in modu speciale; questu hè fattu cù un cumandamentu (hashget-admin --build /var/www/html/hashdb/ --pool /tmp/pool). HTTP FilePool stessu hè schedarii statici, cusì ogni servitore web simplice pò serve, a carica nantu à u servitore hè quasi zero.

Grazie à FilePool, pudete aduprà micca solu risorse http (s) cum'è risorse di basa, ma ancu Per esempiu, Glacier Amazon.

Dopu avè caricatu a copia di salvezza in u glacier, avemu u so Upload ID è l'utilizanu cum'è URL. Per esempiu:

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

Avà novi backups (differenziali) seranu basati nantu à sta copia di salvezza è seranu più brevi. Dopu à u tar unpacking u diffbackup, pudemu vede ciò chì risorse si basa:

hashget --info /tmp/unpacked/ list

è solu aduprà un script di shell per scaricà tutti questi fugliali da Glacier à a piscina è eseguite a solita ricuperazione: hashget -u /tmp/unpacked -pool /tmp/pool

U ghjocu vale a pena a candela?

In u casu più simplice, pagherete solu menu per i backups (se li guardate in un locu in u nuvulu per soldi). Forse assai, assai menu.

Ma questu ùn hè micca solu. A quantità si trasforma in qualità. Pudete aduprà questu per uttene un aghjurnamentu d'alta qualità à u vostru schema di salvezza. Per esempiu, postu chì i nostri backups sò avà più brevi, pudemu fà micca backups mensili, ma ogni ghjornu. Mantene micca per sei mesi, cum'è prima, ma per 5 anni. Prima, l'avete guardatu in l'almacenamiento "frodu" lento ma economicu (Glacier), avà pudete almacenà in un almacenamentu caldu, da induve pudete sempre scaricà rapidamente una copia di salvezza è restaurà in minuti, micca in un ghjornu.

Pudete aumentà l'affidabilità di l'almacenamiento di salvezza. Se l'avemu attualmente almacenatu in una facilità di almacenamento, allora riducendu u voluminu di backups, seremu capaci di almacenà in 2-3 strutture di almacenamento è sopravvive senza dolore se unu di elli hè dannatu.

Cumu pruvà è cumincià à aduprà?

Andà à a pagina di gitlab https://gitlab.com/yaroslaff/hashget, installate cù un cumandamentu (pip3 install hashget[plugins]) è basta à leghje è eseguisce un avviu rapidu. Pensu chì piglià 10-15 minuti per fà tutte e cose simplici. Allora pudete pruvà à cumpressà e vostre macchine virtuali, fate i fugliali di suggerimenti se ne necessariu per fà a cumpressione più forte, ghjucate cù piscine, una basa di dati di hash locale è un servitore di hash se site interessatu, è u ghjornu dopu vede quale hè a dimensione di a copia di salvezza incrementale. sarà in cima à quelli di ieri.

Source: www.habr.com

Add a comment