To jest artykuł przeglądowy opisujący funkcje. Rzeczywiste użycie hashgetu (całkiem proste) opisano w
Porównanie
Zgodnie z prawem gatunku zacznę od razu od intrygi – porównania wyników:
Próbka danych
rozmiar po rozpakowaniu
.tar.gz
hashget.tar.gz
WordPress-5.1.1
43 Mb
11 Mb (26%)
155 KB ( 0.3% )
Jądro Linux 5.0.4
934 Mb
161 Mb (20%)
4.7 Mb ( 0.5% )
Debian 9 (LAMPA) LXC maszyna wirtualna
724 Mb
165 Mb (23%)
4.1 Mb ( 0.5% )
Podstawowe informacje na temat tego, czym powinna być idealna i skuteczna kopia zapasowa
Za każdym razem, gdy tworzyłem kopię zapasową świeżo utworzonej maszyny wirtualnej, prześladowało mnie poczucie, że robię coś złego. Dlaczego otrzymuję pokaźną kopię zapasową systemu, gdzie moją bezcenną, niezniszczalną twórczością jest jednowierszowy plik Index.html z tekstem „Witaj, świecie”?
Dlaczego w mojej kopii zapasowej znajduje się plik /usr/sbin/mysqld o rozmiarze 16 MB? Czy to naprawdę możliwe, że na tym świecie mam zaszczyt przechowywać te ważne akta, a jeśli mi się nie uda, zostaną one utracone dla ludzkości? Najprawdopodobniej nie. Jest przechowywany na wysoce niezawodnych serwerach Debiana (których niezawodność i czas pracy nie może być porównywalny z tym, co mogę zapewnić), a także w kopiach zapasowych (milionów takich serwerów) innych administratorów. Czy naprawdę musimy utworzyć ponad 10 000 000 pierwszej kopii tego ważnego pliku, aby poprawić niezawodność?
Ogólnie tar -c
/ tar -x
. (Innymi słowy, jest to opakowanie bezstratne)
Jak działa hashget
hashget ma koncepcje Package i HashPackage, za ich pomocą wykonuje deduplikację.
Pakiet (plastikowa torba). Plik (zwykle archiwum .deb lub .tar.gz), który można bezpiecznie pobrać z Internetu i z którego można uzyskać jeden lub więcej plików.
Pakiet Hash — mały plik JSON reprezentujący pakiet, zawierający adres URL pakietu i sumę skrótów (sha256) znajdujących się w nim plików. Na przykład dla 5-megabajtowego pakietu mariadb-server-core rozmiar pakietu hash wynosi tylko 6 kilobajtów. Około tysiąc razy mniej.
Deduplikacja — utworzenie archiwum bez duplikatów plików (jeżeli deduplikator wie, gdzie można pobrać oryginalny pakiet, redukuje duplikaty z archiwum).
Opakowanie
Podczas pakowania skanowane są wszystkie pliki z pakowanego katalogu, obliczana jest ich suma skrótów, a jeśli suma zostanie znaleziona w jednym ze znanych HashPackages, to zapisywane są metadane dotyczące pliku (nazwa, skrót, prawa dostępu itp.) w specjalnym pliku .hashget-restore.json, który również zostanie uwzględniony w archiwum.
W najprostszym przypadku samo opakowanie nie wygląda na bardziej skomplikowane niż smoła:
hashget -zf /tmp/mybackup.tar.gz --pack /path/to/data
Rozpakowanie
Rozpakowywanie odbywa się w dwóch etapach. Najpierw zwykłe rozpakowywanie tar:
tar -xf mybackup.tar.gz -C /path/to/data
następnie przywróć z sieci:
hashget -u /path/to/data
Podczas przywracania hashget odczytuje plik .hashget-restore.json, pobiera niezbędne pakiety, rozpakowuje je i wyodrębnia niezbędne pliki, instalując je w wymaganych ścieżkach, z wymaganymi właścicielami/grupami/uprawnieniami.
Trudniejsze rzeczy
To, co opisano powyżej, wystarczy już tym, którzy „chcą tego jak tar, ale spakować mojego Debiana do 4 megabajtów”. Przyjrzyjmy się bardziej złożonym sprawom później.
Indeksowanie
Gdyby hashget w ogóle nie miał ani jednego HashPackage, to po prostu nie byłby w stanie niczego deduplikować.
Możesz także utworzyć HashPackage ręcznie (po prostu: hashget --submit https://wordpress.org/wordpress-5.1.1.zip -p my
), ale jest wygodniejszy sposób.
Aby uzyskać niezbędny pakiet hash, następuje etap indeksowanie (jest to automatycznie wykonywane za pomocą polecenia --pack
) I heurystyka. Podczas indeksowania hashget „zasila” każdy znaleziony plik wszystkimi dostępnymi heurystykami, które są nim zainteresowane. Heurystyka może następnie zindeksować dowolny pakiet, aby utworzyć HashPackage.
Na przykład heurystyka Debiana uwielbia plik /var/lib/dpkg/status i wykrywa zainstalowane pakiety Debiana, a jeśli nie są one indeksowane (nie utworzono dla nich żadnego pakietu HashPackage), pobiera je i indeksuje. Rezultatem jest bardzo fajny efekt - hashget zawsze skutecznie deduplikuje systemy operacyjne Debiana, nawet jeśli mają one najnowsze pakiety.
Pliki podpowiedzi
Jeśli Twoja sieć korzysta z niektórych pakietów zastrzeżonych lub pakietu publicznego, który nie jest uwzględniony w heurystyce hashget, możesz dodać do niej prosty plik podpowiedzi hashget-hint.json w następujący sposób:
{
"project": "wordpress.org",
"url": "https://ru.wordpress.org/wordpress-5.1.1-ru_RU.zip"
}
Następnie za każdym razem, gdy tworzone jest archiwum, pakiet zostanie zindeksowany (jeśli nie był wcześniej) i pliki pakietu zostaną usunięte z archiwum. Nie jest potrzebne żadne programowanie, wszystko można zrobić z vima i zapisać w każdej kopii zapasowej. Należy pamiętać, że dzięki podejściu sumy skrótów, jeśli niektóre pliki z pakietu zostaną zmienione lokalnie (na przykład plik konfiguracyjny zostanie zmieniony), zmienione pliki zostaną zapisane w archiwum „tak jak są” i nie zostaną obcięte.
Jeśli niektóre z Twoich pakietów są okresowo aktualizowane, ale zmiany nie są zbyt duże, możesz podpowiedzieć tylko dla wersji głównych. Na przykład w wersji 1.0 dodali podpowiedź wskazującą na mypackage-1.0.tar.gz i zostanie ona całkowicie zdeduplikowana, następnie wypuścili wersję 1.1, która jest nieco inna, ale wskazówka nie została zaktualizowana. W porządku. Deduplikowane są tylko pliki zgodne z wersją 1.0 (można je przywrócić).
Heurystyka przetwarzająca plik podpowiedzi jest dobrym przykładem zrozumienia wewnętrznego mechanizmu działania heurystyki. Przetwarza tylko pliki hashget-hint.json (lub .hashget-hint.json z kropką) i ignoruje wszystkie inne. Na podstawie tego pliku określa, który adres URL pakietu powinien zostać zaindeksowany i hashget go indeksuje (jeśli jeszcze tego nie zrobił)
Serwer Hash
Pełne indeksowanie podczas tworzenia kopii zapasowych byłoby dość pracochłonne. Aby to zrobić, musisz pobrać każdy pakiet, rozpakować go i zaindeksować. Dlatego hashget używa schematu z
HashServer jest opcjonalnym elementem schematu, nie krytycznym, służy jedynie do przyspieszenia i zmniejszenia obciążenia repozytoriów. Łatwo wyłączone (opcjonalnie --hashserver
bez parametrów). Ponadto możesz łatwo
Przyrostowe i różnicowe kopie zapasowe, planowane starzenie się
--submit
i jesteś skończony! Następna kopia zapasowa utworzona przez hashget nie będzie zawierać plików z tego archiwum.
Nie jest to jednak zbyt dobre podejście, gdyż może się okazać, że przy przywracaniu będziemy musieli wyciągnąć wszystkie kopie zapasowe hashgetów z całej historii (o ile każda zawiera przynajmniej jeden unikalny plik). Istnieje na to mechanizm --expires 2019-06-01
, a po tym terminie (od godz. 00:00) nie będzie już wykorzystywany. Samo archiwum nie może zostać usunięte po tej dacie (chociaż hashget może wygodnie wyświetlać adresy URL wszystkich kopii zapasowych, które są/będą zepsute w danej chwili lub w dowolnym dniu).
Na przykład, jeśli pierwszego dnia wykonamy pełną kopię zapasową i zaindeksujemy ją z czasem życia do końca miesiąca, otrzymamy różnicowy schemat tworzenia kopii zapasowych.
Jeżeli w ten sam sposób indeksujemy nowe kopie zapasowe, powstanie schemat przyrostowych kopii zapasowych.
W przeciwieństwie do tradycyjnych schematów, hashget umożliwia korzystanie z wielu źródeł. Kopia zapasowa zostanie zmniejszona zarówno poprzez redukcję plików z poprzednich kopii zapasowych (jeśli istnieją), jak i plików publicznych (które można pobrać).
Jeśli z jakiegoś powodu nie ufamy niezawodności zasobów Debiana (
Hashget opiera się wyłącznie na zaufanych źródłach odzyskiwania według TWOJEGO uznania. Wykorzystane zostaną te, które uznasz za wiarygodne.
FilePool i lodowiec
mechanizm
$ hashget -u . --pool /tmp/pool
lub
$ hashget -u . --pool http://myhashdb.example.com/
Aby utworzyć pulę w katalogu lokalnym, wystarczy utworzyć katalog i wrzucić do niego pliki, sam hashget znajdzie to, czego potrzebuje, korzystając z skrótów. Aby pula była dostępna poprzez HTTP należy w specjalny sposób utworzyć dowiązania symboliczne; robi się to za pomocą jednego polecenia (hashget-admin --build /var/www/html/hashdb/ --pool /tmp/pool
). Sam HTTP FilePool to pliki statyczne, więc każdy prosty serwer WWW może go obsłużyć, obciążenie serwera jest prawie zerowe.
Dzięki FilePool możesz używać nie tylko zasobów http(s) jako zasobów bazowych, ale także
Po przesłaniu kopii zapasowej na lodowiec otrzymujemy jej identyfikator przesyłania i używamy go jako adresu URL. Na przykład:
hashget --submit Glacier_Upload_ID --file /tmp/my-glacier-backup.tar.gz --project glacier --hashserver --expires 2019-09-01
Teraz nowe (różnicowe) kopie zapasowe będą oparte na tej kopii zapasowej i będą krótsze. Po rozpakowaniu pliku diffbackup za pomocą programu tar możemy zobaczyć, z jakich zasobów korzysta:
hashget --info /tmp/unpacked/ list
i po prostu użyj skryptu powłoki, aby pobrać wszystkie te pliki z Glacier do puli i uruchom zwykłe odzyskiwanie: hashget -u /tmp/unpacked —pool /tmp/pool
Czy gra jest warta świeczki?
W najprostszym przypadku za kopie zapasowe zapłacisz po prostu mniej (jeśli za pieniądze będziesz je przechowywać gdzieś w chmurze). Może dużo, dużo mniej.
Ale to nie jedyna rzecz. Ilość zamienia się w jakość. Możesz to wykorzystać, aby uzyskać wysokiej jakości aktualizację schematu tworzenia kopii zapasowych. Na przykład, ponieważ nasze kopie zapasowe są teraz krótsze, możemy tworzyć kopie zapasowe nie co miesiąc, ale codziennie. Przechowuj je nie przez sześć miesięcy, jak poprzednio, ale przez 5 lat. Wcześniej przechowywałeś je w powolnym, ale tanim „zimnym” magazynie (Lodowiec), teraz możesz przechowywać go w gorącym magazynie, skąd zawsze możesz szybko pobrać kopię zapasową i przywrócić ją w ciągu kilku minut, a nie jednego dnia.
Możesz zwiększyć niezawodność przechowywania kopii zapasowych. Jeśli obecnie przechowujemy je w jednym magazynie, to zmniejszając wolumen kopii zapasowych, będziemy mogli przechowywać je w 2-3 magazynach i bezboleśnie przetrwać w przypadku uszkodzenia jednego z nich.
Jak spróbować i zacząć używać?
Przejdź do strony gitlab pip3 install hashget[plugins]
) i po prostu przeczytaj i wykonaj szybki start. Myślę, że wykonanie wszystkich prostych rzeczy zajmie 10-15 minut. Następnie możesz spróbować skompresować swoje maszyny wirtualne, w razie potrzeby utworzyć pliki podpowiedzi, aby wzmocnić kompresję, pobawić się pulami, lokalną bazą danych mieszających i serwerem mieszającym, jeśli jesteś zainteresowany, a następnego dnia zobaczyć, jaki jest rozmiar przyrostowej kopii zapasowej będzie na szczycie wczoraj.
Źródło: www.habr.com