Restic: excluir $ RECYCLE.BIN con un archivo de exclusión no funciona

Creado en 31 may. 2020  ·  4Comentarios  ·  Fuente: restic/restic

Salida de restic version

restic 0.9.6 (v0.9.6-0-gb723ca3d) compilado con go1.10.4 en linux / amd64

¿Cómo corriste restic exactamente?

Tengo una partición NTFS compartida entre Windows 10 de arranque dual y Ubuntu 18.04, que hago una copia de seguridad con restic de Ubuntu. Como probablemente sepa, Windows 10 crea un directorio $RECYCLE.BIN en el directorio raíz de la partición para contener los archivos que se mueven a la papelera de reciclaje. Quiero hacer una copia de seguridad de la partición compartida, pero no del directorio $RECYCLE.BIN .

Más abajo, he proporcionado una descripción detallada sobre cómo reproducir lo que estoy observando. En pocas palabras: el uso de --exclude="\$RECYCLE.BIN" con el comando de copia de seguridad excluye el directorio, poniendo "$ RECYCLE.BIN" (o cualquier otra variante que se me ocurra, ver más abajo) en un --exclude-file no excluir el directorio.

¿Qué backend / servidor / servicio usaste para almacenar el repositorio?

Observo el comportamiento tanto con un repositorio local (en Ubuntu 18.04) como con un repositorio remoto a través de SFTP (la copia de seguridad también se ejecuta en Ubuntu 18.04).

Comportamiento esperado

La carpeta $RECYCLE.BIN se excluye de la copia de seguridad cuando se agrega a un archivo de exclusión.

Comportamiento real

La carpeta $RECYCLE.BIN se incluye en la copia de seguridad, aunque se agrega a un archivo de exclusión.

Pasos para reproducir el comportamiento

Dentro de un directorio de prueba temporal, ejecute los siguientes comandos en un bash:

# prepare the directory to be backed up
mkdir "data";
mkdir "data/\$RECYCLE.BIN";
touch "data/backup_this";
touch "data/\$RECYCLE.BIN"/ignore_this";

# init repo
mkdir "repo";
restic init --repo=repo/

# prepare exclude file
echo "\$RECYCLE.BIN" > exclude.file

Ahora emitiendo rendimientos de restic --repo=repo/ backup --verbose --verbose data/ :

open repository
enter password for repository: 
repository 837fc3f7 opened successfully, password is correct
lock repository
load index files
start scan on [data/]
start backup on [data/]
scan finished in 0.257s: 2 files, 0 B
new       /data/$RECYCLE.BIN/ignore_this, saved in 0.004s (0 B added)
new       /data/backup_this, saved in 0.000s (0 B added)

Files:           2 new,     0 changed,     0 unmodified
Dirs:            0 new,     0 changed,     0 unmodified
Data Blobs:      0 new
Tree Blobs:      1 new
Added to the repo: 372 B

processed 2 files, 0 B in 0:00
snapshot 27c00c6b saved

como se esperaba.

Emitir rendimientos de restic --repo=repo/ backup --verbose --verbose --exclude="\$RECYCLE.BIN" data/

open repository
enter password for repository: 
repository 837fc3f7 opened successfully, password is correct
lock repository
load index files
using parent snapshot 27c00c6b
start scan on [data/]
start backup on [data/]
scan finished in 0.257s: 1 files, 0 B
unchanged /data/backup_this

Files:           0 new,     0 changed,     1 unmodified
Dirs:            0 new,     0 changed,     0 unmodified
Data Blobs:      0 new
Tree Blobs:      1 new
Added to the repo: 372 B

processed 1 files, 0 B in 0:00
snapshot 61c27a16 saved

que también se espera.

Sin embargo, emitiendo restic --repo=repo/ backup --verbose --verbose --exclude-file=exclude.file data/ , donde

 $ cat exclude.file 
$RECYCLE.BIN

resultados en

open repository
enter password for repository: 
repository 837fc3f7 opened successfully, password is correct
lock repository
load index files
using parent snapshot 61c27a16
start scan on [data/]
start backup on [data/]
scan finished in 0.211s: 2 files, 0 B
unchanged /data/backup_this
new       /data/$RECYCLE.BIN/ignore_this, saved in 0.003s (0 B added)

Files:           1 new,     0 changed,     1 unmodified
Dirs:            0 new,     0 changed,     0 unmodified
Data Blobs:      0 new
Tree Blobs:      0 new
Added to the repo: 0 B  

processed 2 files, 0 B in 0:00
snapshot 9a62470f saved

Es decir, el directorio no se excluye de la copia de seguridad aunque está presente en el archivo de exclusión.

También probé diferentes variantes del archivo de exclusión (escapando del signo de dólar, agregando comillas, agregando una nueva línea al final del archivo), pero nada se resiste a excluir el directorio.

¿Tiene alguna idea de qué pudo haber causado esto?

Supongo que debe haber algún error al tratar con nombres de archivo de un archivo de exclusión que involucran caracteres desagradables (como el signo de dólar).

¿Tiene una idea de cómo solucionar el problema?

Desafortunadamente, no tengo ni idea de ir (solo hablo C ++ con fluidez), pero debe haber algo mal en la interacción con el sistema operativo y / o el sistema de archivos cuando se trata de nombres de archivos que incluyen caracteres extraños.

¿Restic te ayudó hoy? ¿Te hizo feliz de alguna manera?

Utilizo restic ampliamente tanto para copias de seguridad locales como remotas. ¡Sigan con el buen trabajo!
Si puedo ser de ayuda adicional para resolver este problema, hágamelo saber.

backup need feedback questioproblem

Todos 4 comentarios

No estoy seguro acerca de --exclude , pero en los archivos de exclusión restic expande las variables de entorno. Utilice $$RECYCLE.BIN para evitar esto.

Ver: https://restic.readthedocs.io/en/latest/040_backup.html#excluyendo -files

Bueno, gracias, parece que pasé por alto exactamente este párrafo en la documentación.

Parece funcionar:

 $ cat exclude.file 
$$RECYCLE.BIN

y emitir restic --repo=repo/ backup --verbose --verbose --exclude-file=exclude.file data/ nuevamente rinde

open repository
enter password for repository: 
repository 837fc3f7 opened successfully, password is correct
lock repository
load index files
using parent snapshot 96bdd658
start scan on [data/]
start backup on [data/]
scan finished in 0.211s: 1 files, 0 B
unchanged /data/backup_this

Files:           0 new,     0 changed,     1 unmodified
Dirs:            0 new,     0 changed,     0 unmodified
Data Blobs:      0 new
Tree Blobs:      0 new
Added to the repo: 0 B  

processed 1 files, 0 B in 0:00
snapshot 5c475b96 saved

como se esperaba.

Sin embargo, en ahora más de 10 años de experiencia en Linux, nunca tuve que escapar de un $ por $$ lugar de \$ , pero como dice la documentación, esto parece ser estándar. por os.ExpandEnv , por lo que esto no es específico de restic.

Sin embargo, restic --repo=repo/ backup --verbose --verbose --exclude="$$RECYCLE.BIN" data/ rinde

open repository
enter password for repository: 
repository 837fc3f7 opened successfully, password is correct
lock repository
load index files
using parent snapshot 5c475b96
start scan on [data/]
start backup on [data/]
scan finished in 0.204s: 2 files, 0 B
new       /data/$RECYCLE.BIN/ignore_this, saved in 0.002s (0 B added)
unchanged /data/backup_this

Files:           1 new,     0 changed,     1 unmodified
Dirs:            0 new,     0 changed,     0 unmodified
Data Blobs:      0 new
Tree Blobs:      0 new
Added to the repo: 0 B  

processed 2 files, 0 B in 0:00
snapshot ed44b219 saved

que parece ser bastante inconsistente y contrario a la intuición.

Las comillas dobles en --exclude="$$RECYCLE.BIN" significan que el shell expande $$ al PID actual. Pruébelo con comillas simples: --exclude='$$RECYCLE.BIN'

(Por ejemplo, mire echo "$$RECYCLE.BIN" vs echo '$$RECYCLE.BIN' )

@kontakm Parece que el problema está resuelto. Ciérrelo si ese es el caso.

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