{"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\/da\/blog\/administrirovanie\/kak-gitlab-pomogaet-delat-bekapy-bolshih-hranilishh-nextcloud","title":{"rendered":"Hvordan GitLab hj\u00e6lper med at tage backup af store NextCloud-lagringspladser","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hello, Habr!<\/p>\n<p><\/p>\n<p>I dag vil jeg gerne fort\u00e6lle om vores erfaring med automatisering af backup af store datalagre i Nextcloud i forskellige konfigurationer. Jeg arbejder som CTO hos \"Molniya AK\", hvor vi besk\u00e6ftiger os med konfigurationsstyring af IT-systemer, og vi bruger Nextcloud til datalagring. Det inkluderer ogs\u00e5 en distribueret struktur med redundans.<\/p>\n<p><\/p>\n<p>Problemerne opst\u00e5r p\u00e5 grund af de s\u00e6rlige kendetegn ved installationerne, da der er mange data. Versionsstyringen, som Nextcloud tilbyder, backup, subjektive \u00e5rsager og andet skaber mange dubletter.<\/p>\n<p><\/p>\n<h2 id=\"predystoriya\">Background<\/h2>\n<p><\/p>\n<p>Ved administration af Nextcloud opst\u00e5r der skarpt behov for at organisere en effektiv backup, som absolut skal krypteres, da dataene er v\u00e6rdifulde.<\/p>\n<p><\/p>\n<p>Vi tilbyder muligheder for at opbevare backup enten hos os eller hos kunden p\u00e5 deres separate maskiner uden for Nextcloud, hvilket kr\u00e6ver en fleksibel og automatiseret tilgang til administration.<\/p>\n<p><\/p>\n<p>Der er mange kunder, og de har alle forskellige konfigurationer, og alle har deres egne platforme og s\u00e6rlige forhold. Her fungerer den standardmetode, hvor hele platformen tilh\u00f8rer dig, og backups foretages fra cron, d\u00e5rligt.<\/p>\n<p><\/p>\n<p>Lad os f\u00f8rst se p\u00e5 de indledende data. Vi har brug for:<\/p>\n<p><\/p>\n<ul>\n<li>Skalerbarhed med hensyn til \u00e9n node eller flere. For st\u00f8rre installationer bruger vi minio som lagringsl\u00f8sning.<\/li>\n<li>At f\u00e5 information om problemer med udf\u00f8relsen af backup.<\/li>\n<li>Backup skal opbevares hos kunderne og\/eller hos os.<\/li>\n<li>At kunne h\u00e5ndtere problemer hurtigt og nemt.<\/li>\n<li>Kunder og installationer adskiller sig meget fra hinanden - det er umuligt at opn\u00e5 ensartethed.<\/li>\n<li>Gendannelseshastigheden skal v\u00e6re minimal i to scenarier: fuld gendannelse (katastrofe) og en mappe - slettet ved en fejl.<\/li>\n<li>Funktionen til deduplication er obligatorisk.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Hvordan GitLab hj\u00e6lper med at tage backup af store NextCloud-lagringspladser\" src=\"\/wp-content\/uploads\/2020\/07\/1a0048e3295fef94ddca28e50612e3cb.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>For at tackle opgaven med backupstyring har vi integreret GitLab. Mere om det senere. <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Vi er selvf\u00f8lgelig ikke de f\u00f8rste, der l\u00f8ser en s\u00e5dan opgave, men vi mener, at vores praktiske og erfarne tilgang kan v\u00e6re interessant, og vi er klar til at dele den.<\/p>\n<p><\/p>\n<p>Da vores virksomhed praktiserer en open source-politik, s\u00f8gte vi netop efter en l\u00f8sning med \u00e5ben kildekode. Vi deler ogs\u00e5 vores udviklinger og offentligg\u00f8r dem. P\u00e5 GitHub findes der for eksempel <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/molnia-com\/nextcloud-safe-trash\">vores plugin til Nextcloud<\/a><\/noindex>, som vi installerer hos kunderne, og som forbedrer databeskyttelsen i tilf\u00e6lde af utilsigtet eller bevidst sletning.<\/p>\n<p><\/p>\n<h2 id=\"sredstva-bekapirovaniya\">Backupv\u00e6rkt\u00f8jer<\/h2>\n<p><\/p>\n<p>Vi begyndte at lede efter l\u00f8sninger med valg af et backup-v\u00e6rkt\u00f8j.<\/p>\n<p><\/p>\n<p>Normalt fungerer tar + gzip d\u00e5rligt - data duplikeres. Inkrementet indeholder ofte meget f\u00e5 \u00e6ndringer, og en stor del af dataene i \u00e9n fil gentages.<br \/>\nDer er et andet problem - redundans i det distribuerede datalager. Vi bruger minio, og dens data er principielt redundante. Enten skal backup laves via selve minio - hvilket belaster det og kr\u00e6ver brug af alle lag mellem filsystemet, og ikke mindre vigtigt, der er en risiko for at glemme en del af buckets og metadata. Eller ogs\u00e5 skal vi bruge deduplikation.<\/p>\n<p><\/p>\n<p>Der findes deduplikeringsbackup-v\u00e6rkt\u00f8jer i open source (der var artikel <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/449282\/\">artikler<\/a><\/noindex> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/420055\/\">om emnet p\u00e5 Habr,<\/a><\/noindex>) og vores finalister blev <noindex><a rel=\"nofollow\" href=\"https:\/\/borgbackup.readthedocs.io\/en\/stable\/\">Borg<\/a><\/noindex> og <noindex><a rel=\"nofollow\" href=\"https:\/\/restic.net\/\">Restic<\/a><\/noindex>. Om vores sammenligning af de to applikationer nedenfor, men lad os f\u00f8rst beskrive, hvordan vi organiserede hele ordningen.<\/p>\n<p><\/p>\n<h2 id=\"upravlenie-sozdaniem-rezervnyh-kopiy\">Styring af oprettelse af sikkerhedskopier<\/h2>\n<p><\/p>\n<p>Borg og Restic er gode, men ingen af produkterne har et centraliseret styringssystem. Til styrings- og kontrolform\u00e5l valgte vi et v\u00e6rkt\u00f8j, som allerede er implementeret hos os, uden hvilket vi ikke forestiller os vores arbejde, inklusive automatisering - det er den velkendte CI\/CD - GitLab.<\/p>\n<p><\/p>\n<p>Id\u00e9en er som f\u00f8lger: P\u00e5 hver node, der gemmer data i Nextcloud, installeres gitlab-runner. Runneren k\u00f8rer et script efter tidsplanen, der overv\u00e5ger backup-processen, og det starter Borg eller Restic.<\/p>\n<p><\/p>\n<p>Hvad fik vi? Feedback fra udf\u00f8relsen, praktisk kontrol med \u00e6ndringer, detaljer i tilf\u00e6lde af fejl.<\/p>\n<p><\/p>\n<p>Her er <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/molnia-com\/backup-by-runner\">her p\u00e5 GitHub<\/a><\/noindex> har vi lagt eksempler p\u00e5 scriptet til forskellige opgaver, og vi har til sidst tilpasset det til backup af ikke kun Nextcloud, men ogs\u00e5 mange andre tjenester. Der ligger ogs\u00e5 planl\u00e6ggeren, hvis man ikke gider at konfigurere det manuelt (og det gider vi ikke), samt .gitlab-ci.yml.<\/p>\n<p><\/p>\n<p>I GitLab API'et er der endnu ikke mulighed for at \u00e6ndre CI\/CD timeout, og den er ret kort. Den skal \u00f8ges, lad os sige til <code>1d<\/code>.<\/p>\n<p><\/p>\n<p>Heldigvis kan GitLab starte ikke kun ved commit, men ogs\u00e5 efter tidsplan, det er pr\u00e6cis det, vi har brug for.<\/p>\n<p><\/p>\n<p>Nu om wrapper-scriptet.<\/p>\n<p><\/p>\n<p>Vi satte f\u00f8lgende krav til dette script:<\/p>\n<p><\/p>\n<ul>\n<li>Det skal kunne k\u00f8re b\u00e5de som runner og manuelt fra konsollen med samme funktionalitet.<\/li>\n<li>Der skal v\u00e6re fejlbehandlere:<\/li>\n<li>returkode.<\/li>\n<li>s\u00f8ge efter en streng i loggen. For eksempel kan en fejl for os v\u00e6re en meddelelse, som programmet ikke anser for fatal.<\/li>\n<li>Timeout-h\u00e5ndtering. Udf\u00f8relsestiden skal v\u00e6re rimelig.<\/li>\n<li>Vi har brug for en meget detaljeret log. Men kun i tilf\u00e6lde af fejl.<\/li>\n<li>Der udf\u00f8res ogs\u00e5 en r\u00e6kke tests inden starten.<\/li>\n<li>Sm\u00e5 forbedringer for bekvemmelighed, som vi fandt nyttige i supportprocessen:<\/li>\n<li>Start og afslutning logges i systemloggen p\u00e5 den lokale maskine. Det hj\u00e6lper med at knytte systemfejl til backupens arbejde.<\/li>\n<li>En del af fejlloggen, n\u00e5r der er nogen, udskriver til stdout, hele loggen skrives til en separat fil. Det er praktisk at kigge direkte i CI og vurdere fejlen, hvis den er triviel.<\/li>\n<li>Tilstande for debugging.<\/li>\n<\/ul>\n<p><\/p>\n<p>Den fulde log gemmes som artefakt i GitLab, hvis der ikke er nogen fejl, s\u00e5 slettes loggen. Vi skriver scriptet i bash.<\/p>\n<p><\/p>\n<p>Vi er glade for at overveje eventuelle forslag og kommentarer til open source \u2014 velkommen.<\/p>\n<p><\/p>\n<h2 id=\"kak-eto-rabotaet\">Hvordan fungerer det<\/h2>\n<p><\/p>\n<p>P\u00e5 den backupede node startes en runner med bash-executoren. I planl\u00e6ggeren startes en job CI\/CD i et s\u00e6rligt repository. Runneren k\u00f8rer et script som en universel wrapper til s\u00e5danne opgaver, hvor der foretages valideringskontroller af backup-repositoriets gyldighed, monteringspunkter og alt hvad vi \u00f8nsker, hvorefter backup udf\u00f8res og gammelt renses. Den f\u00e6rdige backup sendes til S3.<\/p>\n<p><\/p>\n<p>Vi arbejder efter denne ordning \u2014 det er en ekstern udbyder AWS eller en russisk analog (det er hurtigere, og data forbliver i Rusland). Eller vi ops\u00e6tter en separat minio-klynge for kunden p\u00e5 deres plads til disse form\u00e5l. Vi g\u00f8r det normalt af sikkerhedsm\u00e6ssige \u00e5rsager, n\u00e5r kunden helt ikke \u00f8nsker, at data forlader deres domaine.<\/p>\n<p><\/p>\n<p>Vi valgte ikke at bruge funktionen til at sende backup via ssh. Det \u00f8ger ikke sikkerheden, og netv\u00e6rksmulighederne for S3-udbyderen er meget h\u00f8jere end vores ssh-maskine.<\/p>\n<p><\/p>\n<p>For at beskytte mod hackere p\u00e5 den lokale maskine \u2014 da de kan slette data p\u00e5 S3, er det absolut n\u00f8dvendigt at aktivere versionering.<br \/>\nBackup-l\u00f8sningen krypterer altid backupen.<\/p>\n<p><\/p>\n<p>Borg har en tilstand uden kryptering <code>ingen<\/code>, men vi anbefaler kraftigt ikke at aktivere det. I denne tilstand vil der ikke v\u00e6re kryptering, og der beregnes ikke checksum for dataene, der skrives, hvilket betyder, at integritet kun kan kontrolleres indirekte, via indeks.<\/p>\n<p><\/p>\n<p>Ved et separat scheduler udf\u00f8res kontrol af backuper for integritet af indekser og indhold. Kontrollen foreg\u00e5r langsomt og l\u00e6nge, derfor k\u00f8rer vi den separat en gang om m\u00e5neden. Den kan tage flere dage.<\/p>\n<p><\/p>\n<h2 id=\"ridmi-na-russkom\">Readme p\u00e5 russisk<\/h2>\n<p><\/p>\n<h3 id=\"osnovnye-funkcii\">Vigtigste funktioner<\/h3>\n<p><\/p>\n<ul>\n<li><code>forbered<\/code> forberedelse<\/li>\n<li><code>testcheck<\/code> kontrol af klarhed<\/li>\n<li><code>hovedkommando<\/code> hoved kommando<\/li>\n<li><code>forcepostscript<\/code> en funktion, der udf\u00f8res ved afslutningen eller ved fejl. Bruges til at afmontere partitionen.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"service-functions\">Service funktioner<\/h3>\n<p><\/p>\n<ul>\n<li><code>cleanup<\/code> vi registrerer fejl eller sletter logfilen.<\/li>\n<li><code>checklog<\/code> vi parser loggen for indholdet af fejlsiden.<\/li>\n<li><code>ret<\/code> exit handler.<\/li>\n<li><code>checktimeout<\/code> tjek for timeout.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"environment\">Milj\u00f8<\/h3>\n<p><\/p>\n<ul>\n<li><code>VERBOSE=1<\/code> udskriver fejl til sk\u00e6rmen med det samme (stdout).<\/li>\n<li><code>SAVELOGSONSUCCES=1<\/code> gemmer log ved succes.<\/li>\n<li><code>INIT_REPO_IF_NOT_EXIST=1<\/code> Opretter et repository, hvis det ikke eksisterer. Som standard er det deaktiveret.<\/li>\n<li><code>TIMEOUT<\/code> maksimal tid for hovedoperationen. Du kan angive det som &#8216;m&#8217;, &#8216;h&#8217; eller &#8216;d&#8217; til sidst.<\/li>\n<\/ul>\n<p><\/p>\n<p>Tilstand for opbevaring af gamle kopier. 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 i scriptet<\/h2>\n<p><\/p>\n<ul>\n<li><code>ERROR_STRING<\/code> \u2014 streng til kontrol i loggen for fejl.<\/li>\n<li><code>EXTRACT_ERROR_STRING<\/code> \u2014 udtryk for at vise strengen, hvis der er en fejl.<\/li>\n<li><code>KILL_TIMEOUT_SIGNAL<\/code> \u2014 signal for at dr\u00e6be, hvis der er timeout.<\/li>\n<li><code>TAIL<\/code> \u2014 hvor mange strenge med fejl der vises p\u00e5 sk\u00e6rmen.<\/li>\n<li><code>COLORMSG<\/code> \u2014 farven p\u00e5 meddelelserne (standard gul).<\/li>\n<\/ul>\n<p><\/p>\n<p>Det script, der kaldes wordpress, har noget betinget navngivning; dens funktion er, at den ogs\u00e5 tager backup af mysql-databasen. Det betyder, at det kan bruges til engangsinstallationer af Nexcloud, hvor man ogs\u00e5 kan tage backup af databasen. Bekvemmeligheden ligger ikke kun i, at alt er samlet \u00e9t sted, men ogs\u00e5 at indholdet i databasen er t\u00e6t p\u00e5 indholdet af filerne, da tidsforskellen er minimal.<\/p>\n<p><\/p>\n<h2 id=\"restic-vs-borg\">Restic vs Borg<\/h2>\n<p><\/p>\n<p>Sammenligninger mellem Borg og Restic findes blandt andet <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/454734\/\">her p\u00e5 Habr\u00e9<\/a><\/noindex>, og vi havde ikke til hensigt at lave bare endnu en, men vores egen. Det var vigtigt for os, hvordan det ville se ud med vores data, med vores specifikationer. Vi pr\u00e6senterer dem.<\/p>\n<p><\/p>\n<p>Vores valgkriterier, udover de allerede n\u00e6vnte (deduplisering, hurtig gendannelse osv.):<\/p>\n<p><\/p>\n<ul>\n<li>Modstandsdygtighed over for ufuldst\u00e6ndigt arbejde. Tjek for kill -9.<\/li>\n<li>St\u00f8rrelse p\u00e5 disken.<\/li>\n<li>Krav til ressourcer (CPU, hukommelse).<\/li>\n<li>St\u00f8rrelse p\u00e5 de gemte blobs.<\/li>\n<li>Arbejder med S3.<\/li>\n<li>Integritetstjek.<\/li>\n<\/ul>\n<p><\/p>\n<p>Til test brugte vi en klient med rigtige data og en samlet st\u00f8rrelse p\u00e5 1,6TB.<br \/>\nBetingelser.<\/p>\n<p><\/p>\n<p>Borg kan ikke direkte arbejde med S3, og vi monterede den som en fuse-disk gennem <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kahing\/goofys\">goofys<\/a><\/noindex>. Restic sendte til S3 selv.<\/p>\n<p><\/p>\n<p>Goofys fungerer meget hurtigt og godt, og der er et <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kahing\/catfs\">disk cache-modul<\/a><\/noindex>, som yderligere fremskynder arbejdet. Den er i beta-stadiet, og vi m\u00e5 indr\u00f8mme, at den faldt med datatab under testene (andre). Men bekvemmeligheden ligger i, at selve backupproceduren ikke kr\u00e6ver meget l\u00e6sning, men hovedsageligt skrivning, derfor bruger vi cachen kun under integritetstjek.<\/p>\n<p><\/p>\n<p>For at reducere netv\u00e6rksindflydelsen benyttede vi den lokale udbyder \u2014 Yandex Cloud.<\/p>\n<p><\/p>\n<p>Resultaterne af testningen af sammenligningen.<\/p>\n<p><\/p>\n<ul>\n<li>Kill -9 med efterf\u00f8lgende genstart, begge er gennemf\u00f8rt med succes.<\/li>\n<li>Plads p\u00e5 disken. Borg kan komprimere, s\u00e5 resultaterne er forventede.<\/li>\n<\/ul>\n<p><\/p>\n<p>Backuper<br \/>\nSt\u00f8rrelse<\/p>\n<p>Borg<br \/>\n562Gb<\/p>\n<p>Restic<br \/>\n628Gb<\/p>\n<p><\/p>\n<ul>\n<li>Ved CPU<br \/>\nBorg bruger lidt ressourcer alene, med standardkomprimering, men det skal vurderes sammen med goofys-processen. Sammenlignet bruger de omkring 1,2 kerner p\u00e5 den samme test-virtuelle maskine.<\/li>\n<li>Hukommelse. Restic bruger cirka 0,5Gb, Borg omkring 200Mb. Men det er alt sammen ubetydeligt sammenlignet med systemets filcache. S\u00e5 det er \u00f8nskeligt at tildele mere hukommelse.<\/li>\n<li>Forskellen i st\u00f8rrelsen p\u00e5 blobberne viste sig at v\u00e6re markant.<\/li>\n<\/ul>\n<p><\/p>\n<p>Backuper<br \/>\nSt\u00f8rrelse<\/p>\n<p>Borg<br \/>\nomkring 500Mb<\/p>\n<p>Restic<br \/>\nomkring 5Mb<\/p>\n<p><\/p>\n<ul>\n<li>Samarbejdet med S3 fra Restic fungerer glimrende. Borgs arbejde gennem goofys rejser ingen sp\u00f8rgsm\u00e5l, men det er bem\u00e6rket, at det er \u00f8nskeligt at udf\u00f8re umount efter backupen for at nulstille cachen fuldst\u00e6ndigt. S3's funktion er, at ufuldst\u00e6ndigt downloadede chunks aldrig vil blive sendt til bucket, og derfor f\u00f8rer ufuldst\u00e6ndigt uploadede data til store skader.<\/li>\n<li>Integritetskontrollen fungerer godt i begge tilf\u00e6lde, men hastigheden adskiller sig betydeligt.<br \/>\nRestic \u2013 <strong>3,5 timer<\/strong>.<br \/>\nBorg, med en filcache p\u00e5 100Gb SSD \u2013 <strong>5 timer<\/strong>. Omtrent det samme resultat i hastighed, hvis dataene ligger p\u00e5 en lokal disk.<br \/>\nBorg l\u00e6ser direkte fra S3 uden cache <strong>33 timer<\/strong>. Uhyre lang tid.<\/li>\n<\/ul>\n<p><\/p>\n<p>I det store og hele kan Borg komprimere og har st\u00f8rre blobs \u2014 hvilket g\u00f8r opbevaring og GET\/PUT-operationer i S3 billigere. Men man m\u00e5 betale for en mere kompleks og langsom kontrol. Hvad ang\u00e5r gendannelseshastigheden, s\u00e5 bem\u00e6rkede vi ikke forskel. Efterf\u00f8lgende backuper (efter den f\u00f8rste) tager lidt l\u00e6ngere tid for Restic, men ikke m\u00e6rkbart.<\/p>\n<p><\/p>\n<p>St\u00f8rrelsen p\u00e5 f\u00e6llesskabet spillede ogs\u00e5 en rolle i valget.<\/p>\n<p><\/p>\n<p>Og vi valgte Borg.<\/p>\n<p><\/p>\n<h2 id=\"paru-slov-o-szhatii\">Et par ord om komprimering<\/h2>\n<p><\/p>\n<p>Borg har en fremragende ny komprimeringsalgoritme i sit arsenal \u2014 zstd. Komprimeringskvaliteten er ikke d\u00e5rligere end gzip, men betydeligt hurtigere. Og den er sammenlignelig i hastighed med standard lz4.<\/p>\n<p><\/p>\n<p>For eksempel komprimeres en dump af MySQL-databasen cirka to gange bedre end lz4 ved samme hastighed. Men erfaringer med reelle data viser, at der er en meget lille forskel i komprimeringsgraden for Nextcloud-noder.<\/p>\n<p><\/p>\n<p>Borg har en bonuskomprimeringsfunktion \u2014 hvis en fil har h\u00f8j entropi, anvendes komprimering slet ikke, hvilket \u00f8ger hastigheden. Det aktiveres med en indstilling ved oprettelse af<br \/>\n<code>-C auto,zstd<\/code><br \/>\nfor zstd-algoritmen<br \/>\nS\u00e5 med denne indstilling har vi i sammenligning med standardkomprimering opn\u00e5et<br \/>\n560Gb og 562Gb henholdsvis. Data fra eksemplet ovenfor, husk, uden komprimering giver 628Gb. Resultatet med 2Gb forskel overraskede os lidt, men vi besluttede at v\u00e6lge alligevel <code>auto,zstd<\/code>.<\/p>\n<p><\/p>\n<h2 id=\"metodika-proverki-bekapa\">Metode til kontrol af backup<\/h2>\n<p><\/p>\n<p>Via planl\u00e6ggeren startes en virtuel maskine direkte hos udbyderen eller hos kunden, hvilket markant reducerer netv\u00e6rksbelastningen. I det mindste er det billigere end at starte det op selv og sende 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>P\u00e5 samme m\u00e5de tjekker vi filer med antivirus (post factum). Brugerne uploader forskellige filer til Nextcloud, og ikke alle har antivirus. At checke ved upload tager for meget tid og h\u00e6mmer forretningen.<\/p>\n<p><\/p>\n<p>Skal\u00e9rbarhed opn\u00e5s ved at k\u00f8re runners p\u00e5 forskellige noder med forskellige tags.<br \/>\nI vores overv\u00e5gning samles statusser for back-ups gennem GitLab API i \u00e9t vindue, og ved behov opdages problemer let og kan ogs\u00e5 let lokaliseres.<\/p>\n<p><\/p>\n<h2 id=\"zaklyuchenie\">Konklusion<\/h2>\n<p><\/p>\n<p>Som resultat ved vi med sikkerhed, at vi laver back-ups, at vores back-ups er valide, og at problemer, der opst\u00e5r med dem, tager lidt tid at l\u00f8se p\u00e5 niveauet for vagthavende administrator. Back-ups optager virkelig lidt plads sammenlignet med tar.gz eller Bacula.<\/p>\n<p>Kilde: <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.3 - 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\/da\/blog\/administrirovanie\/kak-gitlab-pomogaet-delat-bekapy-bolshih-hranilishh-nextcloud\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\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\/da\/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\udd47Hvordan GitLab hj\u00e6lper med at lave back-ups af store Nextcloud-lagringer | ProHoster","description":"Hej, Habr! I dag vil jeg fort\u00e6lle om vores erfaring med at automatisere backup af store Nextcloud-lagringsdata i forskellige konfigurationer.","canonical_url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/kak-gitlab-pomogaet-delat-bekapy-bolshih-hranilishh-nextcloud","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","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\/da\/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\/da\/wp-json\/wp\/v2\/posts\/86904","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=86904"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/86904\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/86905"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=86904"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=86904"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=86904"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}