如何防止 Duplicity 查看父文件夹中的每个文件?

如何防止 Duplicity 查看父文件夹中的每个文件?

当运行下一个命令时,我收到有关访问某些文件或目录(如/root)的错误,因为 Duplicity 没有足够的权限:

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

我开始想知道为什么会发生这种情况,并运行 strace 来查看访问了哪些文件:

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

令我惊讶的是,目录/和中的每个文件都/home通过 访问stat()。从性能角度来看,这看起来不太好。duplicity 是否没有针对此查询进行优化,还是我遗漏了什么?

答案1

在深入研究了所检索到的源代码之后apt-get source duplicity,我得出结论,如果不修改源代码及其算法,这是不可能的。

重复的工作方式:

  1. 扫描 *source_directory* 以查找条目
  2. 对于找到的每个条目,执行一次lstat()调用。这用于确定 inode 类型(例如常规文件或目录)。结果将缓存在此条目中
  3. 如果该条目存在...

    1. 并且是符号链接,则将使用以下方式读取目标readlink
    2. 并且是常规文件或目录,access()将被调用来检测该条目是否可读
    3. 如果条目可读,它将由每个选择函数进行测试(通过--include和等选项设置--exclude

这看起来非常合理,除非磁盘访问非常慢(NFS?),否则无需更改该算法来在stat调用之前进行路径检查。

相关内容