Restic: Permitir mezclar, incluir y excluir patrones para copia de seguridad y restauración

Creado en 18 jul. 2015  ·  17Comentarios  ·  Fuente: restic/restic

Este es un problema de seguimiento para # 226. Hasta ahora, solo es posible especificar patrones de exclusión para la copia de seguridad y la restauración.

Hay casos de uso que no están cubiertos, por ejemplo: a un usuario le gustaría hacer una copia de seguridad de su directorio de inicio en /home/user , excluyendo cualquier cosa del directorio work excepto los archivos fuente C.

¿Hay otros usos en los que no haya pensado?

Implementación / Interfaz de usuario: Permita especificar los patrones --include y --exclude en la línea de comando, que llenan una lista común (el orden sí importa aquí). Para cada directorio / archivo, verifique todos los patrones en la lista. La acción (excluir o incluir) del último patrón de mate gana. La acción predeterminada (que también se utilizará si no se especifican patrones de inclusión ni exclusión) es "incluir".

Esto ya contiene un caso de esquina: ¿Debería caminar restic /home/user/work en absoluto?

Creo que no debería. En cambio, si este es un comportamiento deseable, solicite al usuario que agregue un patrón más específico para indicar que también se debe recorrer el directorio excluido, por ejemplo, restic backup --exclude /home/user/work --include /home/user/work/**/*c. /home/user .

Una mejor interfaz de usuario sería permitir especificar un archivo para leer los patrones ( --pattern-file o algo así). En este archivo, todas las líneas que comienzan con # son comentarios, las líneas vacías se ignoran, todas las demás líneas deben comenzar con + (incluir) o - (excluir) después de un espacio personaje y un patrón. Para el caso de uso anterior, un archivo de filtro se vería así:

# filter out everything from work, but include c source code files
- /home/user/work
+ /home/user/work/**/*.c

Este problema se puede resolver una vez que se implemente una solución definitiva para tener patrones de inclusión y exclusión.

backup restore feature enhancement

Comentario más útil

¿Por qué no usar el formato estándar de ignorar que usa .gitignore ? p.ej.

# ignore everything
*
# include $HOME/.local
!$HOME/.local

Todos 17 comentarios

Otra posibilidad sería leer una lista exacta de archivos para respaldar desde un archivo (o desde stdin). Entonces la gente podría usar las herramientas que quisieran (buscar, grep, etc.) para construir su lista y "canalizar" esa lista a restic.

Debería leer el texto completo antes de publicar una respuesta. Perdón.

Este es un problema diferente, tomando la lista de archivos / directorios para respaldar desde stdin en lugar de los argumentos de la línea de comandos. ¿Crees que es valioso tener eso? Si es así, ¿podría agregar un problema?

Solo un recordatorio para mí: este problema se trata de incluir filtros para la copia de seguridad, la restauración ya los tiene.

Tal vez debería simplemente copiar la sintaxis de rsync --exclude / - include / - exclude-from, tienen 20 años de experiencia :-)
(al menos, agregue algunos ejemplos de la sintaxis actual a la guía del usuario, ya que no está claro si "/ foo" y "foo" son lo mismo o si "* .c" es compatible.

Ah, gracias por el comentario, agregué un problema para los ejemplos que faltan en el manual: https://github.com/restic/restic/issues/396

Para ser honesto, no me gusta la sintaxis de filtro de rsync en absoluto, porque las reglas son demasiado complejas. Pero veremos qué se nos ocurre.

¿Alguna actualización? Definitivamente es una opción imprescindible. Actualmente ni siquiera es posible leer la lista de archivos para realizar una copia de seguridad desde stdin:

$ find -name '*.go' | restic backup --files-from -
open -: no such file or directory

mientras que podría escribirse como

restic backup --exclude '*' --include '*.go'

Uhm, leer la lista de archivos de stdin se puede lograr llamando a restic de la siguiente manera:

$ find -name '*.go' | restic backup --files-from /dev/stdin

Si lo desea, acepto un PR que agregue el manejo de - por --files-from . :)

@opennota, ¿le importaría describir su caso de uso? Sería interesante para nosotros.

El problema del guión ( - ) se registra como # 769.

@ fd0
No es un gran caso de uso. Solo quiero hacer una copia de seguridad solo de los archivos con ciertas extensiones sin usar un archivo temporal para la lista.

Si lo desea, acepto un PR que agregue manejo - para --files-from. :)

Veré lo que puedo hacer.

Puede emular este comportamiento usando sed y canalizaciones con nombre:

restic --exclude-file <(sed -n 's/^- \(.*\)/\1/p' files.list) --files-from <(sed -n 's/^+ \(.*\)/\1/p' files.list)

Las líneas que comienzan con - están excluidas y las que tienen + están incluidas.

Creo que un buen modelo es lo que borg implementó recientemente para --pattern y --patterns-from
https://borgbackup.readthedocs.io/en/stable/usage/help.html#borg -help-patterns
No tanto los diferentes selectores de estilo, sino las opciones para especificar rutas raíz, incluir reglas, reglas de exclusión y reglas de exclusión no recurrentes en un archivo.

¿Por qué no usar el formato estándar de ignorar que usa .gitignore ? p.ej.

# ignore everything
*
# include $HOME/.local
!$HOME/.local

El --include está programado para ser implementado?

Suena como que --include y --exclude no se pueden implementar juntos, o al menos sería una jerarquía de precedencia uno sobre otro ...

Proporcionar una lista de archivos con --files-from no resuelve totalmente el problema ya que el subcomando snapshots mostrará una lista gigantesca de archivos y el subcomando forget no funciona como se esperaba.

Mi caso de uso es hacer una copia de seguridad de mi hogar y tengo una lista de rutas con algunas exclusiones y algunas excepciones para la exclusión. La lista básica de rutas contiene ya un centenar de elementos. Como todo está por debajo de $HOME , esperaría poder decir algo como --exclude=** --include=~/path1 --include=~/path2 --exclude=~/path2/something --exclude=*~ . Por lo tanto, para determinar si se debe incluir una ruta, debe coincidir con cada --exclude y --include en el orden correcto y la última coincidencia gana.

Creo que las relaciones públicas de @vincentbernat son una solución eficaz a este requisito.

_Resumen: Permita que los patrones negativos de estilo gitignore especifiquen reglas de exclusión tanto para la copia de seguridad como para la restauración.

Lo he estado usando de manera efectiva durante varias semanas.

En particular, esto me permite simplificar mi lista de instantáneas, que anteriormente era bastante detallada:

b951f6a2  2019-06-15 11:30:18  elvandar    manual      /Users/daniel/Desktop
                                                       /Users/daniel/Documents
                                                       <lots more...>

para:

d0c0bed1  2019-06-18 08:20:57  elvandar                /Users/daniel

Además, he implementado una solución eficaz (no perfecta pero que funciona) que proporciona una copia de seguridad continua con esta función (compartiremos los detalles en breve).

¿Fue útil esta página
0 / 5 - 0 calificaciones