{"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\/es\/blog\/administrirovanie\/kak-gitlab-pomogaet-delat-bekapy-bolshih-hranilishh-nextcloud","title":{"rendered":"C\u00f3mo GitLab ayuda a hacer copias de seguridad de grandes almacenes NextCloud","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>\u00a1Hola, Habr!<\/p>\n<p><\/p>\n<p>Hoy quiero hablar sobre nuestra experiencia en la automatizaci\u00f3n de copias de seguridad de grandes vol\u00famenes de datos en las instalaciones de Nextcloud en diferentes configuraciones. Soy CTO en 'Molniya AK', donde nos dedicamos a la gesti\u00f3n de configuraciones de sistemas de TI, utilizando Nextcloud para el almacenamiento de datos. Esto incluye estructuras distribuidas con respaldo.<\/p>\n<p><\/p>\n<p>Los problemas que surgen de las particularidades de las instalaciones son que hay muchos datos. La versionado que ofrece Nextcloud, el respaldo, razones subjetivas y otras crean muchas duplicaciones.<\/p>\n<p><\/p>\n<h2 id=\"predystoriya\">Antecedentes<\/h2>\n<p><\/p>\n<p>Al administrar Nextcloud, surge una aguda problem\u00e1tica relacionada con la organizaci\u00f3n de un respaldo eficaz que debe ser cifrado, ya que los datos son valiosos.<\/p>\n<p><\/p>\n<p>Ofrecemos opciones para almacenar copias de seguridad en nuestras instalaciones o en las de los clientes en m\u00e1quinas separadas de Nextcloud, lo que requiere un enfoque automatizado y flexible para la administraci\u00f3n.<\/p>\n<p><\/p>\n<p>Hay muchos clientes, todos con diferentes configuraciones, y cada uno en sus propias plataformas con sus particularidades. Aqu\u00ed, la metodolog\u00eda est\u00e1ndar funciona mal cuando toda la plataforma te pertenece, y las copias de seguridad se realizan desde cron.<\/p>\n<p><\/p>\n<p>Para empezar, veamos los requisitos iniciales. Necesitamos:<\/p>\n<p><\/p>\n<ul>\n<li>Escalabilidad en t\u00e9rminos de una o varias nodos. Para instalaciones grandes, utilizamos minio como almacenamiento.<\/li>\n<li>Identificar problemas con la ejecuci\u00f3n de las copias de seguridad.<\/li>\n<li>Es necesario almacenar la copia de seguridad en los clientes y\/o en nuestras instalaciones.<\/li>\n<li>Resolver problemas de manera r\u00e1pida y sencilla.<\/li>\n<li>Los clientes y las instalaciones difieren mucho entre s\u00ed: no conseguimos alcanzar la uniformidad.<\/li>\n<li>La velocidad de recuperaci\u00f3n debe ser m\u00ednima en dos escenarios: recuperaci\u00f3n completa (desastre), una carpeta \u2014 borrada por error.<\/li>\n<li>Es obligatoria la funci\u00f3n de deduplicaci\u00f3n.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3mo GitLab ayuda a hacer copias de seguridad de grandes almacenes NextCloud\" src=\"\/wp-content\/uploads\/2020\/07\/1a0048e3295fef94ddca28e50612e3cb.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Para gestionar las copias de seguridad, hemos integrado GitLab. M\u00e1s detalles a continuaci\u00f3n. <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Sin duda, no somos los primeros en abordar este tipo de problema, pero creemos que nuestra experiencia pr\u00e1ctica, dura y probada puede ser interesante y estamos listos para compartirla.<\/p>\n<p><\/p>\n<p>Dado que en nuestra empresa se sigue una pol\u00edtica de c\u00f3digo abierto, buscamos una soluci\u00f3n espec\u00edficamente de c\u00f3digo abierto. A su vez, compartimos nuestros desarrollos y los publicamos. Por ejemplo, en GitHub hay <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/molnia-com\/nextcloud-safe-trash\">nuestro plugin para Nextcloud<\/a><\/noindex>, que instalamos a los clientes, mejorando la seguridad de los datos en caso de eliminaci\u00f3n accidental o intencionada.<\/p>\n<p><\/p>\n<h2 id=\"sredstva-bekapirovaniya\">Herramientas de copia de seguridad<\/h2>\n<p><\/p>\n<p>Comenzamos a buscar m\u00e9todos para soluciones eligiendo una herramienta para crear copias de seguridad.<\/p>\n<p><\/p>\n<p>El tar normal + gzip funciona mal: los datos se duplican. La copia incremental a menudo contiene muy pocos cambios en realidad, y gran parte de los datos dentro de un archivo se repite.<br \/>\nHay otro problema: la redundancia del almacenamiento distribuido de datos. Estamos utilizando minio y sus datos son redundantes en principio. O bien ten\u00edamos que hacer la copia de seguridad a trav\u00e9s del mismo minio, lo que lo carga y hace uso de todos los intermediarios entre el sistema de archivos, y lo que es igual de importante, hay riesgo de olvidar partes de los buckets y la metainformaci\u00f3n. O utilizar la deduplicaci\u00f3n.<\/p>\n<p><\/p>\n<p>Existen herramientas de copias de seguridad con deduplicaci\u00f3n en c\u00f3digo abierto (en Habr\u00e9 hubo <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/449282\/\">art\u00edculo<\/a><\/noindex> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/420055\/\">sobre este tema<\/a><\/noindex>) y nuestros finalistas fueron <noindex><a rel=\"nofollow\" href=\"https:\/\/borgbackup.readthedocs.io\/en\/stable\/\">Borg<\/a><\/noindex> y <noindex><a rel=\"nofollow\" href=\"https:\/\/restic.net\/\">Restic<\/a><\/noindex>. A continuaci\u00f3n, nuestra comparaci\u00f3n de dos aplicaciones, pero antes contaremos c\u00f3mo organizamos todo el esquema.<\/p>\n<p><\/p>\n<h2 id=\"upravlenie-sozdaniem-rezervnyh-kopiy\">Gesti\u00f3n de la creaci\u00f3n de copias de seguridad<\/h2>\n<p><\/p>\n<p>Borg y Restic son buenos, pero ninguno de los dos productos tiene un mecanismo de gesti\u00f3n centralizado. Para el objetivo de gesti\u00f3n y control, elegimos una herramienta que ya ten\u00edamos implementada, sin la cual no concebimos nuestro trabajo, incluyendo la automatizaci\u00f3n: el conocido CI\/CD \u2013 GitLab.<\/p>\n<p><\/p>\n<p>La idea es la siguiente: en cada nodo que almacena datos de Nextcloud se instala un gitlab-runner. El runner ejecuta program\u00e1ticamente un script que sigue el proceso de copia de seguridad, y este ejecuta Borg o Restic.<\/p>\n<p><\/p>\n<p>\u00bfQu\u00e9 obtuvimos? Retroalimentaci\u00f3n de la ejecuci\u00f3n, control conveniente de los cambios, detalles en caso de error.<\/p>\n<p><\/p>\n<p>Aqu\u00ed <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/molnia-com\/backup-by-runner\">aqu\u00ed en GitHub<\/a><\/noindex> hemos publicado ejemplos de scripts para diferentes tareas, y al final los conectamos a la copia de seguridad no solo de Nextcloud, sino tambi\u00e9n de muchos otros servicios. All\u00ed tambi\u00e9n se encuentra el programador, si no queremos configurarlo manualmente (y no queremos) y .gitlab-ci.yml.<\/p>\n<p><\/p>\n<p>En la API de GitLab todav\u00eda no hay posibilidad de cambiar el tiempo de espera del CI\/CD, y es peque\u00f1o. Debe aumentarse, digamos a <code>1d<\/code>.<\/p>\n<p><\/p>\n<p>Afortunadamente, GitLab puede ejecutarse no solo por commits, sino tambi\u00e9n por programaci\u00f3n, que es exactamente lo que necesitamos.<\/p>\n<p><\/p>\n<p>Ahora sobre el script envoltorio.<\/p>\n<p><\/p>\n<p>Hemos establecido las siguientes condiciones para este script:<\/p>\n<p><\/p>\n<ul>\n<li>Debe ejecutarse tanto como un runner como manualmente desde la consola con la misma funcionalidad.<\/li>\n<li>Debe haber controladores de errores obligatorios:<\/li>\n<li>c\u00f3digo de retorno.<\/li>\n<li>b\u00fasqueda de cadenas en el registro. Por ejemplo, para nosotros, un error puede ser un mensaje que el programa no considera fatal.<\/li>\n<li>Manejo de tiempo de espera. El tiempo de ejecuci\u00f3n debe ser razonable.<\/li>\n<li>Necesitamos un registro detallado. Pero solo en caso de error.<\/li>\n<li>Tambi\u00e9n se realiza una serie de pruebas antes del inicio.<\/li>\n<li>Peque\u00f1as ventajas para mayor comodidad que hemos encontrado \u00fatiles en el proceso de soporte:<\/li>\n<li>El inicio y el final se registran en el syslog de la m\u00e1quina local. Esto ayuda a vincular errores del sistema con el funcionamiento de la copia de seguridad.<\/li>\n<li>Parte del registro de errores, cuando los hay, se env\u00eda a stdout, y todo el registro se escribe en un archivo separado. Es conveniente revisar CI inmediatamente y evaluar el error si es trivial.<\/li>\n<li>Modos para depuraci\u00f3n.<\/li>\n<\/ul>\n<p><\/p>\n<p>El registro completo se guarda como un artefacto en GitLab; si no hay errores, se elimina el registro. El script se escribe en bash.<\/p>\n<p><\/p>\n<p>Cualquier sugerencia y comentario sobre el c\u00f3digo abierto ser\u00e1 bienvenido.<\/p>\n<p><\/p>\n<h2 id=\"kak-eto-rabotaet\">\u00bfC\u00f3mo funciona?<\/h2>\n<p><\/p>\n<p>En el nodo que se respalda, se ejecuta un runner con el ejecutor de bash. En el programador, se lanza un job CI\/CD en un repositorio especial. El runner ejecuta un script como envoltura universal para tales tareas; en \u00e9l se realizan verificaciones de validez del repositorio de la copia de seguridad, puntos de montaje y todo lo que queramos, luego se realiza la copia de seguridad y se limpia lo antiguo. La copia de seguridad final se env\u00eda a S3.<\/p>\n<p><\/p>\n<p>Trabajamos con este esquema: es un proveedor externo de AWS o su equivalente ruso (esto es m\u00e1s r\u00e1pido y los datos no salen de Rusia). O bien, instalamos un cl\u00faster minio separado en el sitio del cliente para estos fines. Normalmente hacemos esto por razones de seguridad, cuando el cliente no quiere que los datos salgan de su entorno.<\/p>\n<p><\/p>\n<p>No utilizamos la funci\u00f3n de env\u00edo de la copia de seguridad por ssh. Esto no agrega seguridad, y las capacidades de red del proveedor S3 son mucho m\u00e1s altas que las de nuestra \u00fanica m\u00e1quina ssh.<\/p>\n<p><\/p>\n<p>Para protegerse de un hacker en la m\u00e1quina local, ya que puede borrar los datos en S3, es necesario habilitar la versionado.<br \/>\nEl respaldador siempre cifra la copia de seguridad.<\/p>\n<p><\/p>\n<p>Borg tiene un modo sin cifrado <code>ninguno<\/code>, pero no recomendamos encarecidamente activarlo. En este modo no solo no habr\u00e1 cifrado, sino que no se calcular\u00e1 la suma de verificaci\u00f3n de lo que se escribe, por lo que la integridad solo se puede verificar de forma indirecta, mediante los \u00edndices.<\/p>\n<p><\/p>\n<p>Se realiza una verificaci\u00f3n de las copias de seguridad para la integridad de los \u00edndices y contenido mediante un programador separado. La verificaci\u00f3n es lenta y prolongada, por lo que la ejecutamos por separado una vez al mes. Puede tardar varios d\u00edas.<\/p>\n<p><\/p>\n<h2 id=\"ridmi-na-russkom\">Readme en ruso<\/h2>\n<p><\/p>\n<h3 id=\"osnovnye-funkcii\">Funciones principales<\/h3>\n<p><\/p>\n<ul>\n<li><code>prepare<\/code> preparaci\u00f3n<\/li>\n<li><code>testcheck<\/code> verificaci\u00f3n de disponibilidad<\/li>\n<li><code>maincommand<\/code> comando principal<\/li>\n<li><code>forcepostscript<\/code> una funci\u00f3n que se ejecuta al final o en caso de error. Se utiliza para desmontar la partici\u00f3n.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"service-functions\">Funciones del servicio<\/h3>\n<p><\/p>\n<ul>\n<li><code>cleanup<\/code> registramos errores o borramos el archivo de registro.<\/li>\n<li><code>checklog<\/code> analizamos el registro para encontrar la cadena de error.<\/li>\n<li><code>ret<\/code> controlador de salida.<\/li>\n<li><code>checktimeout<\/code> verificaci\u00f3n de tiempo de espera.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"environment\">Entorno<\/h3>\n<p><\/p>\n<ul>\n<li><code>VERBOSE=1<\/code> mostramos errores en la pantalla de inmediato (stdout).<\/li>\n<li><code>SAVELOGSONSUCCES=1<\/code> guardamos el registro en caso de \u00e9xito.<\/li>\n<li><code>INIT_REPO_IF_NOT_EXIST=1<\/code> Creamos el repositorio si no exist\u00eda. Por defecto, est\u00e1 desactivado.<\/li>\n<li><code>TIMEOUT<\/code> tiempo m\u00e1ximo para la operaci\u00f3n principal. Puedes establecerlo como &#8216;m&#8217;, &#8216;h&#8217; o &#8216;d&#8217; al final.<\/li>\n<\/ul>\n<p><\/p>\n<p>Modo de almacenamiento de copias antiguas. Por defecto:<\/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\">Variables dentro del script<\/h2>\n<p><\/p>\n<ul>\n<li><code>ERROR_STRING<\/code> \u2014 cadena para la verificaci\u00f3n en el registro por error.<\/li>\n<li><code>EXTRACT_ERROR_STRING<\/code> \u2014 expresi\u00f3n para mostrar la cadena si hay error.<\/li>\n<li><code>KILL_TIMEOUT_SIGNAL<\/code> \u2014 se\u00f1al para matar si hay tiempo de espera.<\/li>\n<li><code>TAIL<\/code> \u2014 cu\u00e1ntas cadenas con errores mostrar en pantalla.<\/li>\n<li><code>COLORMSG<\/code> \u2014 color del mensaje (por defecto amarillo).<\/li>\n<\/ul>\n<p><\/p>\n<p>El script que se llama wordpress lleva este nombre de manera condicional, su caracter\u00edstica es que tambi\u00e9n hace copias de seguridad de la base de datos mysql. Por lo tanto, puede aplicarse a instalaciones temporales de Nexcloud, donde tambi\u00e9n se puede hacer una copia de seguridad de la base de datos. La comodidad radica no solo en tener todo en un solo lugar, sino que el contenido de la base de datos est\u00e1 cerca del contenido de los archivos, ya que la diferencia de tiempo es m\u00ednima.<\/p>\n<p><\/p>\n<h2 id=\"restic-vs-borg\">Restic vs Borg<\/h2>\n<p><\/p>\n<p>Las comparaciones entre Borg y Restic est\u00e1n disponibles, entre otras cosas, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/454734\/\">aqu\u00ed en Habr<\/a><\/noindex>, y no ten\u00edamos la tarea de hacer simplemente otra m\u00e1s, sino la nuestra. Lo que nos importaba era c\u00f3mo se ver\u00eda con nuestros datos, con nuestra especificidad. Las llevamos.<\/p>\n<p><\/p>\n<p>Nuestros criterios de selecci\u00f3n, adem\u00e1s de los ya mencionados (deduplicaci\u00f3n, recuperaci\u00f3n r\u00e1pida, etc.):<\/p>\n<p><\/p>\n<ul>\n<li>Resistencia al trabajo interrumpido. Verificaci\u00f3n en kill -9.<\/li>\n<li>Tama\u00f1o en disco.<\/li>\n<li>Exigencia de recursos (CPU, memoria).<\/li>\n<li>Tama\u00f1o de los blobs almacenados.<\/li>\n<li>Trabajo con S3.<\/li>\n<li>Verificaci\u00f3n de integridad.<\/li>\n<\/ul>\n<p><\/p>\n<p>Para la prueba, tomamos un cliente con datos reales y un tama\u00f1o total de 1,6 Tbyte.<br \/>\nCondiciones.<\/p>\n<p><\/p>\n<p>Borg no puede trabajar directamente con S3, y lo montamos como un disco fuse, a trav\u00e9s de <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kahing\/goofys\">goofys<\/a><\/noindex>. Restic enviaba directamente a S3.<\/p>\n<p><\/p>\n<p>Goofys funciona muy r\u00e1pido y bien, y tiene un <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kahing\/catfs\">m\u00f3dulo de cach\u00e9 de disco<\/a><\/noindex>, que acelera a\u00fan m\u00e1s la operaci\u00f3n. Est\u00e1 en fase beta, y, para ser sincero, se nos cay\u00f3 con p\u00e9rdida de datos en las pruebas (otras). Pero la comodidad radica en que el procedimiento de copia de seguridad no requiere mucha lectura, principalmente escritura, por lo que usamos la cach\u00e9 solo durante la verificaci\u00f3n de integridad.<\/p>\n<p><\/p>\n<p>Para reducir la influencia de la red, usamos un proveedor local: Yandex Cloud.<\/p>\n<p><\/p>\n<p>Resultados de la prueba de comparaci\u00f3n.<\/p>\n<p><\/p>\n<ul>\n<li>Kill -9 con posterior reinicio ambos pasaron con \u00e9xito.<\/li>\n<li>Tama\u00f1o en disco. Borg puede comprimir, as\u00ed que los resultados son esperados.<\/li>\n<\/ul>\n<p><\/p>\n<p>Backuper<br \/>\nTama\u00f1o<\/p>\n<p>Borg<br \/>\n562Gb<\/p>\n<p>Restic<br \/>\n628Gb<\/p>\n<p><\/p>\n<ul>\n<li>Por CPU<br \/>\nBorg consume poco por s\u00ed mismo, con compresi\u00f3n por defecto, pero debe evaluarse junto con el proceso goofys. En conjunto son comparables y utilizan alrededor de 1,2 n\u00facleos en la misma m\u00e1quina virtual de prueba.<\/li>\n<li>Memoria. Restic aproximadamente 0,5Gb, Borg alrededor de 200Mb. Pero esto es insignificante en comparaci\u00f3n con la cach\u00e9 de archivos del sistema. As\u00ed que es recomendable asignar m\u00e1s memoria.<\/li>\n<li>La diferencia en el tama\u00f1o de los blobs result\u00f3 ser sorprendente.<\/li>\n<\/ul>\n<p><\/p>\n<p>Backuper<br \/>\nTama\u00f1o<\/p>\n<p>Borg<br \/>\nalrededor de 500Mb<\/p>\n<p>Restic<br \/>\nalrededor de 5Mb<\/p>\n<p><\/p>\n<ul>\n<li>El trabajo con S3 de Restic es excelente. El trabajo de Borg a trav\u00e9s de goofys no plantea problemas, pero se ha observado que es recomendable hacer umount al finalizar la copia de seguridad para vaciar completamente la cach\u00e9. Una particularidad del trabajo con S3 es que los bloques no cargados nunca se enviar\u00e1n al bucket, lo que significa que los datos no completamente cargados provocan grandes da\u00f1os.<\/li>\n<li>La verificaci\u00f3n de integridad funciona bien en ambos casos, pero la velocidad difiere significativamente.<br \/>\nRestic - <strong>3,5 horas<\/strong>.<br \/>\nBorg, con cach\u00e9 de archivos de 100Gb SSD - <strong>5 horas<\/strong>. Resultado aproximadamente igual en velocidad si los datos est\u00e1n en un disco local.<br \/>\nBorg lee directamente de S3 sin cach\u00e9 <strong>33 horas<\/strong>. Terriblemente largo.<\/li>\n<\/ul>\n<p><\/p>\n<p>En resumen, Borg puede comprimir y tiene blobs m\u00e1s grandes \u2014 lo que hace que el almacenamiento y las operaciones GET\/PUT en S3 sean m\u00e1s baratos. Pero esto se compensa con una verificaci\u00f3n m\u00e1s compleja y lenta. En cuanto a la velocidad de recuperaci\u00f3n, no notamos diferencias. Las copias de seguridad posteriores (despu\u00e9s de la primera) restic tarda un poco m\u00e1s, pero no significativamente.<\/p>\n<p><\/p>\n<p>El tama\u00f1o de la comunidad no fue un aspecto menor en la elecci\u00f3n.<\/p>\n<p><\/p>\n<p>Y elegimos borg.<\/p>\n<p><\/p>\n<h2 id=\"paru-slov-o-szhatii\">Un par de palabras sobre la compresi\u00f3n<\/h2>\n<p><\/p>\n<p>Borg tiene en su arsenal un excelente nuevo algoritmo de compresi\u00f3n \u2014 zstd. En calidad de compresi\u00f3n no es peor que gzip, pero es significativamente m\u00e1s r\u00e1pido. Y es comparable en velocidad al lz4 por defecto.<\/p>\n<p><\/p>\n<p>Por ejemplo, el volcado de una base de datos MySQL se comprime dos veces mejor que lz4 a la misma velocidad. Sin embargo, la experiencia con datos reales muestra una diferencia muy peque\u00f1a en la tasa de compresi\u00f3n de los nodos de Nextcloud.<\/p>\n<p><\/p>\n<p>Borg tiene un modo bastante adicional de compresi\u00f3n \u2014 si el archivo tiene alta entrop\u00eda, no se aplica compresi\u00f3n en absoluto, lo que aumenta la velocidad de funcionamiento. Se activa con una opci\u00f3n al crear<br \/>\n<code>-C auto,zstd<\/code><br \/>\npara el algoritmo zstd<br \/>\nCon esta opci\u00f3n en comparaci\u00f3n con la compresi\u00f3n por defecto obtuvimos<br \/>\n560Gb y 562Gb respectivamente. Los datos del ejemplo anterior, recordemos, sin compresi\u00f3n, dan como resultado 628Gb. El resultado de 2Gb de diferencia nos sorprendi\u00f3 un poco, pero decidimos que elegiremos aun as\u00ed. <code>auto,zstd<\/code>.<\/p>\n<p><\/p>\n<h2 id=\"metodika-proverki-bekapa\">M\u00e9todo de verificaci\u00f3n de copias de seguridad<\/h2>\n<p><\/p>\n<p>La m\u00e1quina virtual se inicia directamente en el proveedor o en el cliente mediante el programador, lo que reduce considerablemente la carga de red. Al menos, esto es m\u00e1s barato que configurar en casa y manejar el tr\u00e1fico.<\/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>De la misma manera, verificamos los archivos con un antivirus (post facto). Los usuarios suben diferentes archivos a Nextcloud y no todos tienen antivirus. Realizar la verificaci\u00f3n en el momento de la carga demora demasiado tiempo y dificulta el negocio.<\/p>\n<p><\/p>\n<p>La escalabilidad se logra ejecutando runners en diferentes nodos con diferentes etiquetas.<br \/>\nEn nuestro monitoreo, recopilamos los estados de las copias de seguridad a trav\u00e9s de la API de GitLab en una sola ventana, y si es necesario, los problemas se detectan f\u00e1cilmente y tambi\u00e9n se localizan f\u00e1cilmente.<\/p>\n<p><\/p>\n<h2 id=\"zaklyuchenie\">Conclusi\u00f3n<\/h2>\n<p><\/p>\n<p>Como resultado, sabemos con certeza que hacemos copias de seguridad, que nuestras copias de seguridad son v\u00e1lidas, y los problemas que surgen con ellas requieren poco tiempo y se resuelven a nivel de administrador de guardia. Las copias de seguridad realmente ocupan poco espacio en comparaci\u00f3n con tar.gz o Bacula.<\/p>\n<p>Fuente: <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.2 - 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\/es\/blog\/administrirovanie\/kak-gitlab-pomogaet-delat-bekapy-bolshih-hranilishh-nextcloud\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"es_ES\" \/>\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\/es\/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\udd47C\u00f3mo GitLab ayuda a hacer copias de seguridad de grandes almacenaciones NextCloud | ProHoster","description":"\u00a1Hola, Habr! Hoy quiero contarles sobre nuestra experiencia en la automatizaci\u00f3n de copias de seguridad de grandes datos en las almacenaciones de Nextcloud en diferentes configuraciones.","canonical_url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/kak-gitlab-pomogaet-delat-bekapy-bolshih-hranilishh-nextcloud","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"es_ES","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\/es\/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\/es\/wp-json\/wp\/v2\/posts\/86904","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=86904"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/86904\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/86905"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=86904"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=86904"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=86904"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}