При выполнении следующей команды я получаю ошибки о доступе к определенным файлам или каталогам (например, /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()
. Это не выглядит хорошо, с точки зрения производительности. Двойственность просто не оптимизирована для этого запроса или я что-то упустил?
После поиска исходного кода, полученного в apt-get source duplicity
, я заключаю, что это невозможно без изменения исходного кода и его алгоритма.
Как работает дублирование:
lstat()
. Это используется для определения типа индекса (например, обычный файл или каталог). Результат будет кэширован для этой записи Если запись существует ...
readlink
access()
будет вызвано для определения, доступна ли запись для чтения или нет [ 1120] --include
и --exclude
) Это выглядит очень разумно, и если доступ к диску очень медленный (NFS?), нет необходимости изменять этот алгоритм для проверки пути перед вызовами stat
.