web-dev-qa-db-fra.com

Comment empêcher Duplicity de regarder chaque fichier dans les dossiers parents?

Lors de l'exécution de la commande suivante, j'obtiens des erreurs d'accès à certains fichiers ou répertoires (comme /root) Pour lesquels Duplicity n'a pas les autorisations suffisantes:

duplicity --dry-run --include="/home/user" --include="/other/dir" \
    --exclude='/' / file:///tmp/backup-test/

J'ai commencé à me demander pourquoi cela se produisait et j'ai couru un strace pour voir quels fichiers sont accessibles:

strace -o /tmp/duplicity-traced -e trace=file !!

À ma grande surprise, tous les fichiers du répertoire / Et /home Sont accessibles via stat(). Cela ne semble pas bon, en termes de performances. La duplicité n'est-elle tout simplement pas optimisée pour cette requête ou manque-t-il quelque chose?

3
Lekensteyn

Après avoir creusé dans le code source tel que récupéré par apt-get source duplicity, Je conclus que ce n'est pas possible sans modifier le code source et son algorithme.

Le fonctionnement de la duplicité:

  1. Analyser le * répertoire_source * pour l'entrée
  2. Pour chaque entrée trouvée, effectuez un appel lstat(). Ceci est utilisé pour déterminer le type d'inode (par exemple, un fichier ou un répertoire normal). Le résultat sera mis en cache pour cette entrée
  3. Si l'entrée existe ...

    1. et est un lien symbolique, la destination sera lue en utilisant readlink
    2. et est un fichier ou un répertoire normal, access() sera appelé pour détecter si l'entrée est lisible ou non
    3. si l'entrée est lisible, elle sera testée par chaque fonction de sélection (définie par des options comme --include et --exclude)

Cela semble très raisonnable et à moins que l'accès au disque ne soit très lent (NFS?), Il n'est pas nécessaire de modifier cet algorithme pour effectuer la vérification du chemin d'accès avant les appels stat.

3
Lekensteyn