restic version
restic 0.9.6 (v0.9.6-0-gb723ca3d) compilé avec go1.10.4 sur linux/amd64
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.
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).
Le dossier $RECYCLE.BIN
est exclu de la sauvegarde lorsqu'il est ajouté à un fichier d'exclusion.
Le dossier $RECYCLE.BIN
est inclus dans la sauvegarde bien qu'ajouté à un fichier d'exclusion.
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.
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).
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.
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.
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.