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