{"id":86904,"date":"2020-07-01T07:42:30","date_gmt":"2020-07-01T05:42:30","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/kak-gitlab-pomogaet-delat-bekapy-bolshih-hranilishh-nextcloud"},"modified":"2020-07-01T07:42:30","modified_gmt":"2020-07-01T05:42:30","slug":"kak-gitlab-pomogaet-delat-bekapy-bolshih-hranilishh-nextcloud","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/kak-gitlab-pomogaet-delat-bekapy-bolshih-hranilishh-nextcloud","title":{"rendered":"Hur GitLab hj\u00e4lper till att g\u00f6ra s\u00e4kerhetskopior av stora NextCloud-lagringar","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hej, Habr!<\/p>\n<p><\/p>\n<p>Idag vill jag ber\u00e4tta om v\u00e5r erfarenhet av att automatisera s\u00e4kerhetskopiering av stora datalager i Nextcloud i olika konfigurationer. Jag arbetar som CTO p\u00e5 \"Molniya AK\", d\u00e4r vi sysslar med konfigurationshantering av IT-system, d\u00e4r Nextcloud anv\u00e4nds f\u00f6r datalagring. Detta inkluderar distribuerade strukturer med redundans.<\/p>\n<p><\/p>\n<p>Problemen som uppst\u00e5r fr\u00e5n installationsspecifika egenskaper \u00e4r att det finns mycket data. Versionshantering som Nextcloud erbjuder, s\u00e4kerhetskopiering, subjektiva orsaker och annat skapar m\u00e5nga dubbletter.<\/p>\n<p><\/p>\n<h2 id=\"predystoriya\">Bakgrund<\/h2>\n<p><\/p>\n<p>Vid administration av Nextcloud uppst\u00e5r snabbt problemet med att organisera en effektiv backup som absolut m\u00e5ste krypteras, eftersom data \u00e4r v\u00e4rdefulla.<\/p>\n<p><\/p>\n<p>Vi erbjuder alternativ f\u00f6r backup-lagring antingen hos oss eller hos kunden p\u00e5 separata maskiner fr\u00e5n Nextcloud, vilket kr\u00e4ver ett flexibelt automatiserat tillv\u00e4gag\u00e5ngss\u00e4tt f\u00f6r administration.<\/p>\n<p><\/p>\n<p>Det finns m\u00e5nga kunder, alla med olika konfigurationer, och alla p\u00e5 sina egna plattformar och med sina egna egenskaper. H\u00e4r passar den standardmetodik d\u00e4r hela plattformen tillh\u00f6r dig och backuper g\u00f6rs via cron d\u00e5ligt.<\/p>\n<p><\/p>\n<p>Vi b\u00f6rjar med att titta p\u00e5 f\u00f6ruts\u00e4ttningarna. Vi beh\u00f6ver:<\/p>\n<p><\/p>\n<ul>\n<li>Skalbarhet avseende en nod eller flera. F\u00f6r stora installationer anv\u00e4nder vi minio som lagringsl\u00f6sning.<\/li>\n<li>Att registrera problem med s\u00e4kerhetskopieringen.<\/li>\n<li>Backup m\u00e5ste lagras hos kunder och\/eller hos oss.<\/li>\n<li>Att snabbt och enkelt kunna l\u00f6sa problem.<\/li>\n<li>Kunder och installationer skiljer sig kraftigt \u00e5t \u2014 det g\u00e5r inte att \u00e5stadkomma enhetlighet.<\/li>\n<li>\u00c5terst\u00e4llningshastigheten m\u00e5ste vara minimal i tv\u00e5 scenarier: full \u00e5terst\u00e4llning (katastrof), en mapp \u2014 raderad av misstag.<\/li>\n<li>Funktionen f\u00f6r deduplering \u00e4r obligatorisk.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Hur GitLab hj\u00e4lper till att g\u00f6ra s\u00e4kerhetskopior av stora NextCloud-lagringar\" src=\"\/wp-content\/uploads\/2020\/07\/1a0048e3295fef94ddca28e50612e3cb.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>F\u00f6r att l\u00f6sa problemet med backup-hantering kopplade vi in GitLab. Mer info i avsnittet nedan. <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Naturligtvis \u00e4r vi inte de f\u00f6rsta som l\u00f6ser ett s\u00e5dant problem, men vi tycker att v\u00e5r praktiska, erfarna erfarenhet kan vara intressant och vi \u00e4r redo att dela med oss av den.<\/p>\n<p><\/p>\n<p>Eftersom v\u00e5rt f\u00f6retag har en open source-policy, letade vi efter en l\u00f6sning med \u00f6ppen k\u00e4llkod. \u00c5 sin sida delar vi v\u00e5ra utvecklingar och publicerar dem. Till exempel finns v\u00e5r <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/molnia-com\/nextcloud-safe-trash\">plugin f\u00f6r Nextcloud<\/a><\/noindex>, som vi installerar hos kunder, som st\u00e4rkt dataskydd i h\u00e4ndelse av oavsiktlig eller avsiktlig radering.<\/p>\n<p><\/p>\n<h2 id=\"sredstva-bekapirovaniya\">Backup-verktyg<\/h2>\n<p><\/p>\n<p>Vi b\u00f6rjade s\u00f6ka efter l\u00f6sningar genom att v\u00e4lja ett verktyg f\u00f6r att skapa s\u00e4kerhetskopior.<\/p>\n<p><\/p>\n<p>Vanlig tar + gzip fungerar d\u00e5ligt - data dupliceras. Inkremental inneh\u00e5ller ofta v\u00e4ldigt f\u00e5 f\u00f6r\u00e4ndringar i praktiken och st\u00f6rsta delen av datan inom en fil upprepas.<br \/>\nDet finns ytterligare ett problem - redundans i det distribuerade datalagringssystemet. Vi anv\u00e4nder minio och dess data \u00e4r i princip redundanta. Antingen beh\u00f6vde s\u00e4kerhetskopiering g\u00f6ras genom minio sj\u00e4lvt - vilket belastar det och anv\u00e4nder alla mellanliggande lager mellan filsystemet, och inte minst finns det en risk att gl\u00f6mma bort vissa bucketer och metainformation. Alternativt anv\u00e4nda deduplicering.<\/p>\n<p><\/p>\n<p>Det finns dedupliceringsverktyg i \u00f6ppen k\u00e4llkod (detta \u00e4mne har diskuterats p\u00e5 Habr\u00e9 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/449282\/\">artiklar<\/a><\/noindex> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/420055\/\">och v\u00e5ra finalister blev<\/a><\/noindex>) och vi valde <noindex><a rel=\"nofollow\" href=\"https:\/\/borgbackup.readthedocs.io\/en\/stable\/\">Borg<\/a><\/noindex> och <noindex><a rel=\"nofollow\" href=\"https:\/\/restic.net\/\">Restic<\/a><\/noindex>. Om v\u00e5r j\u00e4mf\u00f6relse av de tv\u00e5 applikationerna nedan, men f\u00f6rst ska vi ber\u00e4tta hur vi organiserade hela schemat.<\/p>\n<p><\/p>\n<h2 id=\"upravlenie-sozdaniem-rezervnyh-kopiy\">Hantera skapandet av s\u00e4kerhetskopior<\/h2>\n<p><\/p>\n<p>Borg och Restic \u00e4r bra, men ingen av produkterna har en centraliserad hanteringsmekanism. F\u00f6r hantering och kontroll valde vi ett verktyg som redan \u00e4r implementerat hos oss, utan vilket vi inte kan t\u00e4nka oss v\u00e5rt arbete, inklusive automatisering - det k\u00e4nda CI\/CD - GitLab.<\/p>\n<p><\/p>\n<p>Id\u00e9n \u00e4r f\u00f6ljande: P\u00e5 varje nod som lagrar data f\u00f6r Nextcloud installeras gitlab-runner. Runnern k\u00f6r ett skript enligt schema som \u00f6vervakar s\u00e4kerhetskopieringsprocessen, och det initierar Borg eller Restic.<\/p>\n<p><\/p>\n<p>Vad fick vi? Feedback fr\u00e5n utf\u00f6randet, bekv\u00e4m \u00f6vervakning av f\u00f6r\u00e4ndringar och detaljer vid fel.<\/p>\n<p><\/p>\n<p>H\u00e4r \u00e4r <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/molnia-com\/backup-by-runner\">h\u00e4r p\u00e5 GitHub<\/a><\/noindex> vi har lagt upp exempel p\u00e5 skript f\u00f6r olika uppgifter, och vi kopplade det i slut\u00e4ndan till s\u00e4kerhetskopieringen av inte bara Nextcloud utan ocks\u00e5 m\u00e5nga andra tj\u00e4nster. D\u00e4r finns ocks\u00e5 schemal\u00e4ggaren, om man inte vill st\u00e4lla in det manuellt (och vi vill inte) och .gitlab-ci.yml<\/p>\n<p><\/p>\n<p>Det finns fortfarande ingen m\u00f6jlighet att \u00e4ndra timeout f\u00f6r CI\/CD i GitLab API, och den \u00e4r ganska kort. Den m\u00e5ste \u00f6kas, l\u00e5t oss s\u00e4ga till <code>1d<\/code>.<\/p>\n<p><\/p>\n<p>Lyckligtvis kan GitLab k\u00f6ras inte bara vid commit utan ocks\u00e5 enligt schema, vilket \u00e4r precis vad vi beh\u00f6ver.<\/p>\n<p><\/p>\n<p>Nu om inlindande skript.<\/p>\n<p><\/p>\n<p>Vi satte upp f\u00f6ljande krav f\u00f6r detta skript:<\/p>\n<p><\/p>\n<ul>\n<li>Skriptet ska kunna k\u00f6ras b\u00e5de av runnern och manuellt fr\u00e5n konsolen med samma funktionalitet.<\/li>\n<li>Det m\u00e5ste finnas felhanterare:<\/li>\n<li>returkod.<\/li>\n<li>s\u00f6ka efter str\u00e4ngar i loggen. Till exempel kan ett fel f\u00f6r oss vara ett meddelande som programmet inte ser som fatalt.<\/li>\n<li>Hantera timeout. Utf\u00f6randetiden b\u00f6r vara rimlig.<\/li>\n<li>Vi beh\u00f6ver en detaljerad logg. Men bara i h\u00e4ndelse av ett fel.<\/li>\n<li>Ocks\u00e5 en rad tester utf\u00f6rs innan starten.<\/li>\n<li>Sm\u00e5 bekv\u00e4mligheter som vi har funnit anv\u00e4ndbara under supportprocessen:<\/li>\n<li>Start och slut registreras i systemloggen p\u00e5 den lokala maskinen. Detta hj\u00e4lper oss att koppla samman systemfel och backupens arbete.<\/li>\n<li>Delar av felloggen, n\u00e4r de finns, visas i stdout, hela loggen skrivs till en separat fil. Det \u00e4r praktiskt att snabbt kolla i CI och bed\u00f6ma felet om det \u00e4r trivialt.<\/li>\n<li>L\u00e4gen f\u00f6r debugging.<\/li>\n<\/ul>\n<p><\/p>\n<p>Den fullst\u00e4ndiga loggen sparas som en artifact i GitLab, om det inte finns n\u00e5gra fel, tas loggen bort. Skriptet skrivs i bash.<\/p>\n<p><\/p>\n<p>Vi ser g\u00e4rna eventuella f\u00f6rslag och kommentarer om \u00f6ppen k\u00e4llkod \u2014 v\u00e4lkommen.<\/p>\n<p><\/p>\n<h2 id=\"kak-eto-rabotaet\">Hur det fungerar<\/h2>\n<p><\/p>\n<p>P\u00e5 den noder som ska s\u00e4kerhetskopieras startas en runner med bash-exekverare. I schemal\u00e4ggaren startas ett job CI\/CD i ett speciellt repo. Runnern k\u00f6r ett skript, en universell wrapper f\u00f6r s\u00e5dana uppgifter, i vilket validering av backuprepo, monteringspunkter och allt vi vill kontrolleras, f\u00f6ljt av backup och rensning av gammal data. Den f\u00e4rdiga backupen skickas till S3.<\/p>\n<p><\/p>\n<p>Vi arbetar enligt detta schema \u2014 en extern leverant\u00f6r av AWS eller en rysk motsvarighet (detta \u00e4r snabbare och data l\u00e4mnar inte Ryssland). Alternativt installerar vi en separat minio-kluster hos kunden f\u00f6r dessa \u00e4ndam\u00e5l. Vi brukar g\u00f6ra s\u00e5 av s\u00e4kerhetssk\u00e4l n\u00e4r kunden verkligen inte vill att data ska l\u00e4mna deras kontur.<\/p>\n<p><\/p>\n<p>Vi har valt att inte anv\u00e4nda funktionen f\u00f6r att skicka backup via ssh. Det ger ingen extra s\u00e4kerhet, och n\u00e4tverksm\u00f6jligheterna hos S3-leverant\u00f6ren \u00e4r mycket h\u00f6gre \u00e4n med en enda ssh-maskin.<\/p>\n<p><\/p>\n<p>F\u00f6r att skydda mot hackers p\u00e5 den lokala maskinen \u2014 eftersom de kan radera data p\u00e5 S3, b\u00f6r versionering definitivt aktiveras.<br \/>\nBakup-programmet krypterar alltid backupen.<\/p>\n<p><\/p>\n<p>Borg har ett l\u00e4ge utan kryptering <code>none<\/code>, men vi rekommenderar starkt att inte aktivera det. I detta l\u00e4ge kommer det inte bara att saknas kryptering, utan \u00e4ven kontrollsumman f\u00f6r det som skrivs kommer inte att ber\u00e4knas, vilket inneb\u00e4r att integriteten endast kan kontrolleras indirekt genom index.<\/p>\n<p><\/p>\n<p>En separat schemal\u00e4ggare utf\u00f6r kontroll av backupens integritet f\u00f6r index och inneh\u00e5ll. Kontrollen sker l\u00e5ngsamt och tar tid, s\u00e5 vi k\u00f6r den separat en g\u00e5ng i m\u00e5naden. Den kan p\u00e5g\u00e5 i flera dagar.<\/p>\n<p><\/p>\n<h2 id=\"ridmi-na-russkom\">README p\u00e5 ryska<\/h2>\n<p><\/p>\n<h3 id=\"osnovnye-funkcii\">Huvudfunktioner<\/h3>\n<p><\/p>\n<ul>\n<li><code>converge<\/code> f\u00f6rberedelse<\/li>\n<li><code>testkolla<\/code> kontroll av beredskap<\/li>\n<li><code>huvudkommando<\/code> grundl\u00e4ggande kommando<\/li>\n<li><code>tv\u00e5ngsbakgrund<\/code> en funktion som k\u00f6rs i slutet eller vid fel. Anv\u00e4nds f\u00f6r att avmontera partitionen.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"service-functions\">Tj\u00e4nstefunktioner<\/h3>\n<p><\/p>\n<ul>\n<li><code>\u2014 borttagning av instansen.<\/code> vi registrerar fel eller raderar loggfilen.<\/li>\n<li><code>checklog<\/code> vi parsar loggen f\u00f6r att hitta str\u00e4ngen med felet.<\/li>\n<li><code>ret<\/code> exit-hanterare.<\/li>\n<li><code>checktimeout<\/code> timeoutkontroll.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"environment\">Environment<\/h3>\n<p><\/p>\n<ul>\n<li><code>VERBOSE=1<\/code> vi skriver ut fel direkt p\u00e5 sk\u00e4rmen (stdout).<\/li>\n<li><code>SAVELOGSONSUCCES=1<\/code> vi sparar loggen vid framg\u00e5ng.<\/li>\n<li><code>INIT_REPO_IF_NOT_EXIST=1<\/code> Vi skapar ett repository om det inte fanns. Som standard avst\u00e4ngt.<\/li>\n<li><code>TIMEOUT<\/code> maximal tid f\u00f6r huvudoperationen. Du kan st\u00e4lla in det som 'm', 'h' eller 'd' i slutet.<\/li>\n<\/ul>\n<p><\/p>\n<p>Lagringsl\u00e4ge f\u00f6r \u00e4ldre kopior. Som standard:<\/p>\n<p><\/p>\n<ul>\n<li><code>KEEP_DAILY=7<\/code><\/li>\n<li><code>KEEP_WEEKLY=4<\/code><\/li>\n<li><code>KEEP_MONTHLY=6<\/code><\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"peremennye-vnutri-skripta\">Variabler inom skriptet<\/h2>\n<p><\/p>\n<ul>\n<li><code>ERROR_STRING<\/code> \u2014 str\u00e4ng f\u00f6r att kontrollera loggen f\u00f6r fel.<\/li>\n<li><code>EXTRACT_ERROR_STRING<\/code> \u2014 uttryck f\u00f6r att visa str\u00e4ng om det finns ett fel.<\/li>\n<li><code>KILL_TIMEOUT_SIGNAL<\/code> \u2014 signal f\u00f6r att d\u00f6da om timeout.<\/li>\n<li><code>TAIL<\/code> \u2014 hur m\u00e5nga str\u00e4ngar med fel som visas p\u00e5 sk\u00e4rmen.<\/li>\n<li><code>COLORMSG<\/code> \u2014 f\u00e4rg p\u00e5 meddelandet (standard gul).<\/li>\n<\/ul>\n<p><\/p>\n<p>Det skript som kallas wordpress har som funktion att ocks\u00e5 ta s\u00e4kerhetskopior av mysql-databasen. Det kan allts\u00e5 anv\u00e4ndas f\u00f6r eng\u00e5ngsinstallationer av Nexcloud, d\u00e4r databasen ocks\u00e5 kan backas upp. Bekv\u00e4mligheten ligger inte bara i att allt \u00e4r p\u00e5 ett st\u00e4lle, utan att inneh\u00e5llet i databasen \u00e4r n\u00e4ra relaterat till inneh\u00e5llet i filerna, eftersom tidsskillnaden \u00e4r minimal.<\/p>\n<p><\/p>\n<h2 id=\"restic-vs-borg\">Restic vs Borg<\/h2>\n<p><\/p>\n<p>J\u00e4mf\u00f6relser mellan Borg och Restic finns bland annat <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/454734\/\">h\u00e4r p\u00e5 Habr\u00e9<\/a><\/noindex>, och v\u00e5rt m\u00e5l var inte bara att skapa ytterligare en, utan v\u00e5r egen. Vi ville f\u00f6rst\u00e5 hur det skulle se ut p\u00e5 v\u00e5ra data, med v\u00e5r specifikation. Vi tar med dem.<\/p>\n<p><\/p>\n<p>V\u00e5ra urvalskriterier, f\u00f6rutom de tidigare n\u00e4mnda (deduplicering, snabb \u00e5terst\u00e4llning osv.):<\/p>\n<p><\/p>\n<ul>\n<li>Motst\u00e5ndskraft mot ofullst\u00e4ndig drift. Kontroll f\u00f6r kill -9.<\/li>\n<li>Storlek p\u00e5 disken.<\/li>\n<li>Krav p\u00e5 resurser (CPU, minne).<\/li>\n<li>Storlek p\u00e5 de lagrade blobbarna.<\/li>\n<li>Arbete med S3.<\/li>\n<li>Integritetskontroll.<\/li>\n<\/ul>\n<p><\/p>\n<p>F\u00f6r testning tog vi en klient med verkliga data och en total storlek p\u00e5 1,6TB.<br \/>\nVillkor.<\/p>\n<p><\/p>\n<p>Borg kan inte direkt arbeta med S3, och vi monterade det som en fuse-disk genom <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kahing\/goofys\">goofys<\/a><\/noindex>. Restic skickade data till S3 sj\u00e4lv.<\/p>\n<p><\/p>\n<p>Goofys fungerar mycket snabbt och bra, och det finns <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kahing\/catfs\">diskcachemodul<\/a><\/noindex>, vilket ytterligare accelererar arbetet. Den \u00e4r i beta-stadiet, och vi m\u00e5ste erk\u00e4nna att vi f\u00f6rlorade data under tester (andra). Men f\u00f6rdelen \u00e4r att sj\u00e4lva backupproceduren inte kr\u00e4ver mycket l\u00e4sning, utan mest skrivning, s\u00e5 vi anv\u00e4nder cachen endast under integritetskontrollen.<\/p>\n<p><\/p>\n<p>F\u00f6r att minska n\u00e4tverksinflytandet anv\u00e4nde vi en lokal leverant\u00f6r \u2014 Yandex Cloud.<\/p>\n<p><\/p>\n<p>Resultat fr\u00e5n testningen av j\u00e4mf\u00f6relsen.<\/p>\n<p><\/p>\n<ul>\n<li>Kill -9 med efterf\u00f6ljande omstart gick b\u00e5da igenom framg\u00e5ngsrikt.<\/li>\n<li>Storlek p\u00e5 disken. Borg kan komprimera, s\u00e5 resultaten \u00e4r f\u00f6rv\u00e4ntade.<\/li>\n<\/ul>\n<p><\/p>\n<p>Backuper<br \/>\nDimensions<\/p>\n<p>Borg<br \/>\n562Gb<\/p>\n<p>Restic<br \/>\n628Gb<\/p>\n<p><\/p>\n<ul>\n<li>Enligt CPU<br \/>\nBorg sj\u00e4lv f\u00f6rbrukar lite med standardkomprimering, men man m\u00e5ste bed\u00f6ma det tillsammans med goofys-processen. Tillsammans \u00e4r de j\u00e4mf\u00f6rbara och anv\u00e4nder cirka 1,2 k\u00e4rnor p\u00e5 samma testvirtuella maskin.<\/li>\n<li>Minne. Restic cirka 0,5Gb, Borg cirka 200Mb. Men detta \u00e4r ganska obetydligt j\u00e4mf\u00f6rt med systemets filcache. S\u00e5 det \u00e4r \u00f6nskv\u00e4rt att allokera mer minne.<\/li>\n<li>Skillnaden i storlek p\u00e5 blobbar var sl\u00e5ende.<\/li>\n<\/ul>\n<p><\/p>\n<p>Backuper<br \/>\nDimensions<\/p>\n<p>Borg<br \/>\ncirka 500Mb<\/p>\n<p>Restic<br \/>\ncirka 5Mb<\/p>\n<p><\/p>\n<ul>\n<li>Arbetet med S3 fr\u00e5n Restic \u00e4r utm\u00e4rkt. Borgs arbete genom goofys verkar ok, men det har noterats att det \u00e4r b\u00e4ttre att utf\u00f6ra umount efter backupen f\u00f6r att helt rensa cachen. En egenskap hos S3 \u00e4r att ofullst\u00e4ndiga chunkar aldrig skickas till bucket, vilket inneb\u00e4r att inte helt uppladdade data leder till stora skador.<\/li>\n<li>Integritetskontrollen fungerar bra i b\u00e5da fallen, men hastigheten skiljer sig markant.<br \/>\nRestic \u2013 <strong>3,5 timmar<\/strong>.<br \/>\nBorg, med en filcache p\u00e5 100Gb SSD \u2013 <strong>5 timmar<\/strong>. Ungef\u00e4r samma resultat i hastighet om datan ligger p\u00e5 lokal disk.<br \/>\nBorg l\u00e4ser direkt fr\u00e5n S3 utan cache <strong>33 timmar<\/strong>. Fruktansv\u00e4rt l\u00e5ng tid.<\/li>\n<\/ul>\n<p><\/p>\n<p>I det stora hela kan Borg komprimera och har st\u00f6rre blobbar - vilket g\u00f6r lagringen och GET\/PUT-operationer i S3 billigare. Men det f\u00e5r man betala f\u00f6r med en mer komplex och l\u00e5ngsammare kontroll. N\u00e4r det g\u00e4ller \u00e5terst\u00e4llningshastigheten m\u00e4rkte vi ingen skillnad. Efterf\u00f6ljande backuper (efter den f\u00f6rsta) g\u00f6r restic n\u00e5gra minuter l\u00e4ngre, men inte avsev\u00e4rt.<\/p>\n<p><\/p>\n<p>Size community stod inte p\u00e5 sista plats i valet.<\/p>\n<p><\/p>\n<p>Och vi valde borg.<\/p>\n<p><\/p>\n<h2 id=\"paru-slov-o-szhatii\">Ett par ord om komprimering<\/h2>\n<p><\/p>\n<p>Borg har ett utm\u00e4rkt nytt komprimeringsalgoritm i sin arsenal - zstd. Komprimeringskvaliteten \u00e4r inte s\u00e4mre \u00e4n gzip, men betydligt snabbare. Och j\u00e4mf\u00f6rbar i hastighet med den standardm\u00e4ssiga lz4.<\/p>\n<p><\/p>\n<p>Till exempel komprimeras en MySQL-dump ungef\u00e4r tv\u00e5 g\u00e5nger b\u00e4ttre \u00e4n lz4 med samma hastighet. Men erfarenheten p\u00e5 verkliga data visar att det \u00e4r mycket liten skillnad i komprimeringseffektivitet f\u00f6r Nextcloud-noden.<\/p>\n<p><\/p>\n<p>Borg har ett ganska bonusl\u00e4ge f\u00f6r komprimering - om filen har h\u00f6g entropi till\u00e4mpas ingen komprimering alls, vilket \u00f6kar hastigheten. Det aktiveras med en parameter vid skapandet<br \/>\n<code>-C auto,zstd<\/code><br \/>\nf\u00f6r zstd-algoritmen<br \/>\nS\u00e5 med denna parameter i j\u00e4mf\u00f6relse med standardkomprimeringen uppn\u00e5dde vi<br \/>\n560 Gb och 562 Gb respektive. Data fr\u00e5n exemplet ovan, utan komprimering, ger 628 Gb. Resultatet med en skillnad p\u00e5 2 Gb \u00f6verraskade oss n\u00e5got, men vi kom fram till att vi v\u00e4ljer \u00e4nd\u00e5 <code>auto,zstd<\/code>.<\/p>\n<p><\/p>\n<h2 id=\"metodika-proverki-bekapa\">Metod f\u00f6r att verifiera backup<\/h2>\n<p><\/p>\n<p>Genom schemal\u00e4ggaren startas virtuella maskiner direkt hos leverant\u00f6ren eller hos kunden, vilket kraftigt minskar n\u00e4tverksbelastningen. \u00c5tminstone \u00e4r det billigare \u00e4n att k\u00f6ra det p\u00e5 plats hos oss och skicka trafik.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">goofys --cache \"--free:5%:\/mnt\/cache\" -o allow_other --endpoint https:\/\/storage.yandexcloud.net --file-mode=0666 --dir-mode=0777 xxxxxxx.com \/mnt\/goofys\nexport BORG_PASSCOMMAND=\"cat \/home\/borg\/.borg-passphrase\"\nborg list \/mnt\/goofys\/borg1\/\nborg check --debug -p --verify-data \/mnt\/goofys\/borg1\/<\/code><\/pre>\n<p><\/p>\n<p>Vi kontrollerar filer med antivirus p\u00e5 samma s\u00e4tt (efterhand). Anv\u00e4ndare laddar upp olika saker till Nextcloud och alla har inte antivirus. Att g\u00f6ra en kontroll vid uppladdning tar f\u00f6r mycket tid och st\u00f6r verksamheten.<\/p>\n<p><\/p>\n<p>Skalbarhet uppn\u00e5s genom att k\u00f6ra runners p\u00e5 olika noder med olika taggar.<br \/>\nI v\u00e5r \u00f6vervakning samlas statusar f\u00f6r backuper via GitLab API i ett f\u00f6nster, vilket g\u00f6r att problem l\u00e4tt kan identifieras och lokaliseras.<\/p>\n<p><\/p>\n<h2 id=\"zaklyuchenie\">Slutsats<\/h2>\n<p><\/p>\n<p>Som ett resultat vet vi med s\u00e4kerhet att vi g\u00f6r v\u00e5ra backuper, att v\u00e5ra backuper \u00e4r giltiga, och att de problem som uppst\u00e5r med dem tar lite tid och l\u00f6ses av den jourhavande administrat\u00f6ren. Backuper tar faktiskt v\u00e4ldigt lite plats i j\u00e4mf\u00f6relse med tar.gz eller Bacula.<\/p>\n<p>K\u00e4lla: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/508758\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u0445\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u043d\u0430\u0448\u0435\u043c \u043e\u043f\u044b\u0442\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449 Nextcloud \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u0445. \u042f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0421\u0422\u041e \u0432 \u00ab\u041c\u043e\u043b\u043d\u0438\u044f \u0410\u041a\u00bb, \u0433\u0434\u0435 \u043c\u044b \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u043c\u0441\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c IT \u0441\u0438\u0441\u0442\u0435\u043c, \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f Nextcloud. \u0412 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435, \u0441 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439, \u0441 \u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0432\u044b\u0442\u0435\u043a\u0430\u044e\u0449\u0438\u0435 \u0438\u0437 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 \u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0446\u0438\u0439 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u043d\u043e\u0433\u043e. [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":86905,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-86904","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u0445\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u043d\u0430\u0448\u0435\u043c \u043e\u043f\u044b\u0442\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449 Nextcloud \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u0445.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/kak-gitlab-pomogaet-delat-bekapy-bolshih-hranilishh-nextcloud\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u0430\u043a GitLab \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u0431\u044d\u043a\u0430\u043f\u044b \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449 NextCloud | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u0445\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u043d\u0430\u0448\u0435\u043c \u043e\u043f\u044b\u0442\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449 Nextcloud \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u0445.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/kak-gitlab-pomogaet-delat-bekapy-bolshih-hranilishh-nextcloud\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-07-01T05:42:30+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-07-01T05:42:30+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Hur GitLab hj\u00e4lper till att g\u00f6ra backuper av stora lagringssystem i NextCloud | ProHoster","description":"Hej, Habr! Idag vill jag ber\u00e4tta om v\u00e5r erfarenhet av att automatisera backupen av stora datalagringssystem i Nextcloud i olika konfigurationer.","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/kak-gitlab-pomogaet-delat-bekapy-bolshih-hranilishh-nextcloud","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u0430\u043a GitLab \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u0431\u044d\u043a\u0430\u043f\u044b \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449 NextCloud | ProHoster","og:description":"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u0445\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u043d\u0430\u0448\u0435\u043c \u043e\u043f\u044b\u0442\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449 Nextcloud \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u0445.","og:url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/kak-gitlab-pomogaet-delat-bekapy-bolshih-hranilishh-nextcloud","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-07-01T05:42:30+00:00","article:modified_time":"2020-07-01T05:42:30+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"86904","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 14:03:54","updated":"2022-10-06 09:05:46","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/86904","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=86904"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/86904\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/86905"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=86904"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=86904"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=86904"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}