Questu hè un articulu generale per descriverà e caratteristiche. L'usu attuale di hashget (abbastanza simplice) hè descrittu in
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 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 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
Backup incrementali è differenziali, obsolescenza pianificata
--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 --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 (
Hashget si basa solu in fonti di ricuperazione di fiducia à a vostra discrezione. Quelli chì cunsiderà affidabili seranu utilizati.
File Pool è Glacier
Mechanismu
$ 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
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 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