Restic: exclure $RECYCLE.BIN avec un fichier d'exclusion ne fonctionne pas

Créé le 31 mai 2020  ·  4Commentaires  ·  Source: restic/restic

Sortie de restic version

restic 0.9.6 (v0.9.6-0-gb723ca3d) compilé avec go1.10.4 sur linux/amd64

Comment avez-vous exécuté restic exactement?

J'ai une partition NTFS partagée entre un Windows 10 à double démarrage et Ubuntu 18.04, que je sauvegarde avec restic d'Ubuntu. Comme vous le savez probablement, Windows 10 crée un répertoire $RECYCLE.BIN dans le répertoire racine de la partition pour contenir les fichiers qui sont déplacés vers la corbeille. Je souhaite sauvegarder la partition partagée, mais pas le répertoire $RECYCLE.BIN .

Plus loin, j'ai fourni une description détaillée sur la façon de reproduire ce que j'observe. Pour faire court : l'utilisation de --exclude="\$RECYCLE.BIN" avec la commande de sauvegarde exclut le répertoire, en mettant "$RECYCLE.BIN" (ou toute autre variante que je pourrais proposer, voir ci-dessous) dans un --exclude-file fait pas exclure le répertoire.

Quel backend/serveur/service avez-vous utilisé pour stocker le référentiel ?

J'observe le comportement à la fois avec un référentiel local (sous Ubuntu 18.04) et avec un référentiel distant via SFTP (sauvegarde également exécutée sur Ubuntu 18.04).

Comportement prévisible

Le dossier $RECYCLE.BIN est exclu de la sauvegarde lorsqu'il est ajouté à un fichier d'exclusion.

Comportement réel

Le dossier $RECYCLE.BIN est inclus dans la sauvegarde bien qu'ajouté à un fichier d'exclusion.

Étapes pour reproduire le comportement

Dans un répertoire de test temporaire, exécutez les commandes suivantes dans 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

Maintenant, l'émission de restic --repo=repo/ backup --verbose --verbose data/ donne :

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

comme prévu.

Émettre des rendements 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

ce qui est également attendu.

Cependant, en émettant restic --repo=repo/ backup --verbose --verbose --exclude-file=exclude.file data/ , où

 $ cat exclude.file 
$RECYCLE.BIN

résulte 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

C'est-à-dire que le répertoire n'est pas exclu de la sauvegarde bien qu'il soit présent dans le fichier d'exclusion.

J'ai également essayé différentes variantes du fichier d'exclusion (échapper au signe dollar, ajouter des guillemets, ajouter une nouvelle ligne à la fin du fichier), mais rien n'a rendu difficile l'exclusion du répertoire.

Avez-vous une idée de ce qui a pu causer cela ?

Je suppose qu'il doit y avoir une erreur lors du traitement des noms de fichiers d'un fichier d'exclusion qui impliquent des caractères désagréables (comme le signe dollar).

Avez-vous une idée de comment résoudre le problème?

Malheureusement, je n'ai aucune idée de go (je ne parle couramment que C++), mais il doit y avoir quelque chose qui ne va pas dans l'interaction avec le système d'exploitation et/ou le système de fichiers lorsqu'il s'agit de noms de fichiers contenant des caractères étranges.

Restic vous a-t-il aidé aujourd'hui ? Cela vous a-t-il rendu heureux d'une manière ou d'une autre ?

J'utilise beaucoup restic à la fois pour les sauvegardes locales et distantes. Continuez votre bon travail!
Si je peux être d'une aide supplémentaire pour résoudre ce problème, faites-le moi savoir.

backup need feedback questioproblem

Tous les 4 commentaires

Pas sûr de --exclude , mais dans les fichiers d'exclusion, restic étend les variables d'environnement. Utilisez $$RECYCLE.BIN pour éviter cela.

Voir : https://restic.readthedocs.io/en/latest/040_backup.html#excluant -files

Eh bien, merci, il semble que j'aie oublié exactement ce seul paragraphe de la documentation.

Ca a l'air de marcher :

 $ cat exclude.file 
$$RECYCLE.BIN

et l'émission de restic --repo=repo/ backup --verbose --verbose --exclude-file=exclude.file data/ donne à nouveau

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

comme prévu.

Cependant, en maintenant plus de 10 ans d'expérience avec Linux, je n'ai jamais eu à échapper à un $ par $$ au lieu de \$ , mais comme l'indique la documentation, cela semble être la norme pour os.ExpandEnv , ce n'est donc pas spécifique à restic.

Cependant, restic --repo=repo/ backup --verbose --verbose --exclude="$$RECYCLE.BIN" data/ donne

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

ce qui semble être assez incohérent et contre-intuitif.

Les guillemets doubles dans --exclude="$$RECYCLE.BIN" signifient que le shell étend $$ au PID actuel. Essayez-le avec des guillemets simples : --exclude='$$RECYCLE.BIN'

(Par exemple, regardez echo "$$RECYCLE.BIN" vs echo '$$RECYCLE.BIN' )

@kontakm Le problème semble être résolu pour moi. Veuillez le fermer si c'est le cas.

Cette page vous a été utile?
0 / 5 - 0 notes