Как мне запретить Duplicity просматривать каждый файл в родительских папках?

При выполнении следующей команды я получаю ошибки о доступе к определенным файлам или каталогам (например, /root), для которых у Duplicity нет достаточных разрешений:

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

Я начал задаваться вопросом, почему это происходит, и побежал Чтобы увидеть, к каким файлам осуществляется доступ:

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

К моему удивлению, каждый файл в каталогах / и /home доступен через stat(). Это не выглядит хорошо, с точки зрения производительности. Двойственность просто не оптимизирована для этого запроса или я что-то упустил?

3
задан 7 May 2011 в 00:55

1 ответ

После поиска исходного кода, полученного в apt-get source duplicity, я заключаю, что это невозможно без изменения исходного кода и его алгоритма.

Как работает дублирование:

  1. Сканирование * source_directory * для ввода
  2. Для каждой найденной записи выполните вызов lstat(). Это используется для определения типа индекса (например, обычный файл или каталог). Результат будет кэширован для этой записи
  3. Если запись существует ...

    1. и является символической ссылкой, место назначения будет прочитано с использованием readlink
    2. и является обычным файлом или каталогом, access() будет вызвано для определения, доступна ли запись для чтения или нет [ 1120]
    3. , если запись читаема, она будет проверяться каждой функцией выбора (задается такими опциями, как --include и --exclude)

Это выглядит очень разумно, и если доступ к диску очень медленный (NFS?), нет необходимости изменять этот алгоритм для проверки пути перед вызовами stat.

0
ответ дан 7 May 2011 в 00:55

Другие вопросы по тегам:

Похожие вопросы: