Hashget ilə ehtiyat nüsxələri 99.5% azaldın

hashget - pulsuz, açıq mənbədir deduplikator ehtiyat nüsxələrin ölçüsünü əhəmiyyətli dərəcədə azaltmağa, həmçinin artımlı və diferensial ehtiyat sxemlərini və s. təşkil etməyə imkan verən arxivatora bənzər bir yardım proqramıdır.

Bu xüsusiyyətləri təsvir etmək üçün ümumi məqalədir. Hashget-in faktiki istifadəsi (olduqca sadə) -də təsvir edilmişdir README layihə və wiki sənədləri.

Müqayisə

Janrın qanununa görə, mən dərhal intriqa ilə başlayacağam - nəticələri müqayisə edərək:

Məlumat nümunəsi
qablaşdırılmamış ölçü
.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% )

İdeal və effektiv ehtiyat nüsxəsinin nə olması barədə məlumat

Hər dəfə yeni yaradılmış virtual maşının ehtiyat nüsxəsini çıxaranda, səhv bir şey etdiyimi hiss etdim. Nə üçün mənim qiymətsiz, tükənməz yaradıcılığımın “Salam dünya” mətni ilə bir sətirlik index.html olduğu sistemdən böyük ehtiyat nüsxəsi alıram?

Niyə ehtiyat nüsxəmdə 16 MB /usr/sbin/mysqld var? Doğrudanmı, bu dünyada bu mühüm faylı saxlamaq şərəfinə nail ola bilərəm və əgər uğursuz olsam, o, insanlıq üçün itiriləcək? Çox güman ki, yox. O, yüksək etibarlı debian serverlərində (etibarlılığı və işləmə müddətini mənim təmin edə bildiklərimlə müqayisə etmək mümkün deyil), eləcə də digər adminlərin ehtiyat nüsxələrində (milyonlarla) saxlanılır. Etibarlılığı artırmaq üçün həqiqətən bu vacib faylın 10+ 000-ci nüsxəsini yaratmalıyıq?

Ümumiyyətlə hashget və bu problemi həll edir. Qablaşdırıldıqda, çox kiçik bir ehtiyat yaradır. Paketi açarkən - tamamilə açılmış bir sistem, əgər olacağına bənzər tar -c / tar -x. (Başqa sözlə, bu itkisiz qablaşdırmadır)

Hashget necə işləyir

hashget Paket və HashPackage anlayışlarına malikdir, onların köməyi ilə təkmilləşdirməni həyata keçirir.

Paketi (plastik torba). İnternetdən təhlükəsiz endirilə bilən və bir və ya bir neçə faylın əldə oluna biləcəyi fayl (adətən .deb və ya .tar.gz arxivi).

HashPackage — paket URL-i və ondan olan faylların hash məbləğləri (sha256) daxil olmaqla Paketi təmsil edən kiçik JSON faylı. Məsələn, 5 meqabaytlıq mariadb-server-core paketi üçün hashpaketin ölçüsü cəmi 6 kilobaytdır. Təxminən min dəfə azdır.

Təkmilləşdirmə — dublikat faylları olmayan arxiv yaratmaq (deuplikator orijinal paketin harada yüklənə biləcəyini bilirsə, arxivdən dublikatları azaldır).

Qablaşdırma

Qablaşdırma zamanı qablaşdırılan kataloqdakı bütün fayllar skan edilir, onların hash məbləğləri hesablanır və əgər məbləğ məlum HashPackages-dan birində tapılarsa, o zaman fayl haqqında metadata (ad, hash, giriş hüquqları və s.) saxlanılır. xüsusi faylda .hashget-restore.json, o da arxivə daxil ediləcək.

Ən sadə halda, qablaşdırmanın özü tardan daha mürəkkəb görünmür:

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

Paketdən çıxarılır

Qablaşdırma iki mərhələdə aparılır. Əvvəlcə adi tarın açılması:

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

sonra şəbəkədən bərpa edin:

hashget -u /path/to/data

Bərpa edərkən, hashget .hashget-restore.json faylını oxuyur, lazımi paketləri yükləyir, onları paketdən çıxarır və tələb olunan sahib/qrup/icazələrlə lazımi yollarda quraşdıraraq lazımi faylları çıxarır.

Daha çətin şeylər

Yuxarıda təsvir olunanlar artıq “tar kimi istəyənlər, ancaq Debian-ı 4 meqabayta yığmaq” üçün kifayətdir. Daha sonra daha mürəkkəb şeylərə baxaq.

İndeksləmə

Əgər hashget-də ümumiyyətlə bir HashPackage olmasaydı, o, sadəcə olaraq heç nəyi təkmilləşdirə bilməzdi.

Siz həmçinin əl ilə HashPackage yarada bilərsiniz (sadəcə: hashget --submit https://wordpress.org/wordpress-5.1.1.zip -p my), lakin daha rahat bir yol var.

Lazımi hashpaketi əldə etmək üçün bir mərhələ var indeksləşdirmə (bu, avtomatik olaraq əmrlə yerinə yetirilir --pack) Və evristika. İndeksləşdirərkən, hashget tapılan hər bir faylı onunla maraqlanan bütün mövcud evristikalara “yedirir”. Heuristics sonra HashPackage yaratmaq üçün istənilən Paketi indeksləşdirə bilər.

Məsələn, Debian evristikası /var/lib/dpkg/status faylını sevir və quraşdırılmış debian paketlərini aşkarlayır və əgər onlar indeksləşdirilməyibsə (onlar üçün HashPackage yaradılmayıb), onları endirir və indeksləşdirir. Nəticə çox gözəl effektdir – hashget həmişə Debian ƏS-lərini ən son paketlərə malik olsa belə, effektiv şəkildə təkmilləşdirəcək.

İpucu faylları

Şəbəkəniz bəzi mülkiyyət paketlərinizdən və ya hashget evristikaya daxil olmayan ictimai paketdən istifadə edirsə, ona bu şəkildə sadə hashget-hint.json göstəriş faylı əlavə edə bilərsiniz:

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

Bundan sonra, hər dəfə arxiv yaradılanda paket indeksləşdiriləcək (əgər o, əvvəllər olmayıbsa) və paket faylları arxivdən təkmilləşdiriləcək. Proqramlaşdırmaya ehtiyac yoxdur, hər şey vim-dən edilə bilər və hər bir ehtiyat nüsxədə saxlanıla bilər. Nəzərə alın ki, hash sum yanaşması sayəsində paketdəki bəzi fayllar lokal olaraq dəyişdirilərsə (məsələn, konfiqurasiya faylı dəyişdirilərsə), dəyişdirilmiş fayllar arxivdə “olduğu kimi” saxlanılacaq və kəsilməyəcək.

Öz paketlərinizdən bəziləri vaxtaşırı yenilənirsə, lakin dəyişikliklər çox böyük deyilsə, yalnız əsas versiyalar üçün işarə edə bilərsiniz. Məsələn, 1.0 versiyasında mypackage-1.0.tar.gz-ə işarə edən bir ipucu verdilər və o, tamamilə təkmilləşdiriləcək, sonra bir qədər fərqli olan 1.1 versiyasını buraxdılar, lakin ipucu yenilənmədi. Hər şey qaydasındadır. Yalnız 1.0 versiyasına uyğun gələn (bərpa edilə bilən) fayllar təkrarlanır.

İpucu faylını emal edən evristik heuristikanın necə işlədiyinin daxili mexanizmini başa düşmək üçün yaxşı nümunədir. O, yalnız hashget-hint.json fayllarını (və ya nöqtə ilə .hashget-hint.json) emal edir və digərlərinə məhəl qoymur. Bu fayldan o, hansı paket URL-nin indeksləşdirilməli olduğunu müəyyən edir və hashget onu indeksləşdirir (əgər o, artıq bunu etməyibsə)

HashServer

Ehtiyat nüsxələri yaratarkən tam indeksləşdirməni yerinə yetirmək kifayət qədər əmək tutumlu olardı. Bunu etmək üçün hər bir paketi yükləməli, paketdən çıxarmalı və indeksləşdirməlisiniz. Buna görə hashget ilə bir sxem istifadə edir HashServer. Quraşdırılmış Debian paketi aşkar edildikdə, əgər o, yerli HashPackage-də tapılmırsa, əvvəlcə HashPackage-i hash serverindən yükləməyə cəhd edilir. Və yalnız bu işləmirsə, hashget özü paketi yükləyir və hash edir (və onu hashserverə yükləyir ki, hashserver gələcəkdə onu təmin etsin).

HashServer sxemin isteğe bağlı elementidir, kritik deyil, o, yalnız depolara yükü sürətləndirməyə və azaltmağa xidmət edir. Asanlıqla söndürülür (istəyə görə --hashserver parametrlər olmadan). Bundan əlavə, asanlıqla edə bilərsiniz öz hashserverinizi yaradın.

Artan və diferensial ehtiyat nüsxələri, planlaşdırılan köhnəlmə

hashget diaqram yaratmağı çox asanlaşdırır artımlı və diferensial ehtiyat nüsxələri. Niyə biz öz ehtiyat nüsxəmizi (bütün unikal fayllarımızla) indeksləmirik? Bir komanda --submit və bitirdiniz! Hashget-in yaratdığı növbəti ehtiyat nüsxəsinə bu arxivdəki fayllar daxil olmayacaq.

Ancaq bu çox yaxşı bir yanaşma deyil, çünki belə ola bilər ki, bərpa edərkən bütün tarixdəki bütün hashget ehtiyat nüsxələrini çəkməli olacağıq (hər birində ən azı bir unikal fayl varsa). Bunun mexanizmi var ehtiyat nüsxələrin planlaşdırılmış köhnəlməsi. İndeksləşdirərkən HashPackage-in son istifadə tarixini təyin edə bilərsiniz --expires 2019-06-01, və bu tarixdən sonra (saat 00:00-dan) istifadə edilməyəcək. Arxivin özü bu tarixdən sonra silinə bilməz (baxmayaraq ki, hashget hazırda və ya hər hansı bir tarixdə çürümüş/çürüləcək bütün ehtiyat nüsxələrin URL-lərini rahatlıqla göstərə bilər).

Məsələn, 1-də tam ehtiyat nüsxəsini çıxarsaq və ayın sonuna qədər onu ömürlük indeksləsək, diferensial ehtiyat sxemi əldə edəcəyik.

Yeni ehtiyat nüsxələrini eyni şəkildə indeksləsək, artımlı ehtiyat nüsxələrinin sxemi olacaq.

Ənənəvi sxemlərdən fərqli olaraq, hashget çoxlu əsas mənbələrdən istifadə etməyə imkan verir. Yedəkləmə həm əvvəlki ehtiyat nüsxələrindən (əgər varsa), həm də ictimai fayllardan (nə yükləmək olar) faylları azaltmaqla azalacaq.

Əgər nədənsə Debian resurslarının etibarlılığına inanmırıqsa (https://snapshot.debian.org/) və ya başqa bir paylamadan istifadə edərsə, biz sadəcə olaraq bütün paketlərlə bir dəfə tam ehtiyat nüsxəsini çıxara və sonra ona etibar edə bilərik (evristikanı söndürməklə). İndi paylamalarımızın bütün serverləri bizim üçün əlçatmaz olsa (suvenir İnternetdə və ya zombi apokalipsisi zamanı), lakin ehtiyat nüsxələrimiz qaydasındadırsa, biz yalnız əvvəlki ehtiyat nüsxələrimizə əsaslanan istənilən qısa diff ehtiyat nüsxəsindən bərpa edə bilərik. .

Hashget yalnız SİZİN mülahizənizlə etibarlı bərpa mənbələrinə etibar edir. Etibarlı hesab etdiyinizlərdən istifadə olunacaq.

FilePool və Glacier

Mexanizm FilePool paketləri yükləmək üçün daim xarici serverlərlə əlaqə saxlamamağa, yerli kataloqdan və ya korporativ serverdən paketlərdən istifadə etməyə imkan verir, məsələn:

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

və ya

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

Yerli kataloqda hovuz yaratmaq üçün sadəcə bir kataloq yaratmaq və ona faylları atmaq lazımdır, hashget özü hashlərdən istifadə edərək lazım olanı tapacaq. Hovuzu HTTP vasitəsilə əlçatan etmək üçün xüsusi bir şəkildə simvolik əlaqələr yaratmalısınız; bu bir əmrlə edilir (hashget-admin --build /var/www/html/hashdb/ --pool /tmp/pool). HTTP FilePool özü statik fayllardır, ona görə də istənilən sadə veb server ona xidmət edə bilər, serverə yük demək olar ki, sıfırdır.

FilePool sayəsində siz yalnız http(lər) resurslarını əsas resurslar kimi deyil, həm də istifadə edə bilərsiniz misal üçün, Amazon buzlaqı.

Ehtiyat nüsxəni buzlağa yüklədikdən sonra onun Yükləmə ID-sini alırıq və onu URL kimi istifadə edirik. Misal üçün:

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

İndi yeni (diferensial) ehtiyat nüsxələri bu ehtiyata əsaslanacaq və daha qısa olacaq. Diffbackup-ı tardan çıxardıqdan sonra onun hansı resurslara əsaslandığını görə bilərik:

hashget --info /tmp/unpacked/ list

və bütün bu faylları Glacier-dən hovuza yükləmək və adi bərpa prosesini həyata keçirmək üçün sadəcə qabıq skriptindən istifadə edin: hashget -u /tmp/unpacked —pool /tmp/pool

Oyun şama dəyərmi?

Ən sadə halda, ehtiyat nüsxələri üçün sadəcə daha az ödəyəcəksiniz (onları pul üçün buludda bir yerdə saxlasanız). Bəlkə çox, çox az.

Ancaq tək bu deyil. Kəmiyyət keyfiyyətə çevrilir. Yedəkləmə sxeminizə yüksək keyfiyyətli təkmilləşdirmə əldə etmək üçün bundan istifadə edə bilərsiniz. Məsələn, ehtiyat nüsxələrimiz indi daha qısa olduğundan, biz aylıq deyil, gündəlik ehtiyat nüsxələri edə bilərik. Onları əvvəlki kimi altı ay deyil, 5 il saxlayın. Əvvəllər siz onu yavaş, lakin ucuz “soyuq” anbarda (Buzlaq) saxlayırdınız, indi onu isti anbarda saxlaya bilərsiniz, oradan həmişə ehtiyat nüsxəsini tez yükləyə və bir gündə deyil, bir neçə dəqiqə ərzində bərpa edə bilərsiniz.

Siz ehtiyat yaddaşın etibarlılığını artıra bilərsiniz. Əgər biz onları hazırda bir anbarda saxlayırıqsa, o zaman ehtiyat nüsxələrin həcmini azaltmaqla 2-3 anbarda saxlaya və onlardan biri zədələnərsə, ağrısız yaşaya bilərik.

Necə cəhd etmək və istifadə etməyə başlamaq lazımdır?

Gitlab səhifəsinə keçin https://gitlab.com/yaroslaff/hashget, bir əmrlə quraşdırın (pip3 install hashget[plugins]) və sadəcə oxuyun və sürətli başlanğıcı yerinə yetirin. Düşünürəm ki, bütün sadə işləri görmək 10-15 dəqiqə çəkəcək. Sonra virtual maşınlarınızı sıxmağa cəhd edə bilərsiniz, sıxılmanı gücləndirmək üçün lazım olduqda işarə faylları yarada, hovuzlar, yerli hash verilənlər bazası və hash server ilə oynaya bilərsiniz və ertəsi gün artan ehtiyat nüsxəsinin ölçüsünü görə bilərsiniz. dünənkilərin üstündə olacaq.

Mənbə: www.habr.com

Добавить комментарий