Как предотвратить дублирование 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(). Это выглядит не очень хорошо, с точки зрения производительности. Является ли дублирование просто не оптимизированным для этого запроса, или я что-то упускаю?

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

10 ответов

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

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

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

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

3
ответ дан 25 May 2018 в 21:22

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

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

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

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

3
ответ дан 25 July 2018 в 22:00

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

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

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

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

3
ответ дан 26 July 2018 в 18:16

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

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

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

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

3
ответ дан 31 July 2018 в 13:33

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

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

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

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

3
ответ дан 2 August 2018 в 03:33

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

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

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

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

3
ответ дан 4 August 2018 в 19:32

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

Способ двуличности works:

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

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

3
ответ дан 6 August 2018 в 03:40

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

Способ двуличности works:

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

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

3
ответ дан 7 August 2018 в 21:32

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

Способ двуличности works:

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

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

3
ответ дан 10 August 2018 в 09:48

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

Способ двуличности works:

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

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

3
ответ дан 13 August 2018 в 16:03

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

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