rsync зависает с указанием множества удаленных файлов - PullRequest
1 голос
/ 31 января 2009

Использование следующей команды rsync позволит вам скопировать множество удаленных файлов на локальный компьютер, когда удаленный компьютер использует rsyncd:

rsync -R имя хоста :: 'модуль / путь1 / файл1 модуль / путь2 / файл2 модуль / путь3 / файл3 модуль / путь4 / файл4' / локальный / путь

Однако, если количество файлов слишком велико, rsync зависает, не создавая файлы в целевой папке. Ограничение в среде, в которой я тестирую, составляет 22. С 22 файлами это заканчивается через несколько секунд; с 23 или более файлами, он висит бесконечно.

Может ли кто-нибудь представить причину, по которой это может произойти? Вот некоторые вещи, которые я проверил:

  • Ни на одной машине не хватает места на диске или памяти.
  • Все файлы могут быть переданы, если я не делаю больше 22 одновременно. (Другими словами, это не что-то особенное в конкретных файлах в позиции 23 и выше.)
  • Нет проблем с разрешениями; У меня есть возможность читать все файлы на удаленной машине, и я могу записать в целевой пункт назначения. (Также, как я отмечал в предыдущем пункте, все ~ 50 файлов в моем общем списке могут быть переданы, если я не делаю больше 22 одновременно).
  • Ничего не изменится, если я использую опцию -n (пробный запуск).

Ответы [ 4 ]

1 голос
/ 31 января 2009

Нет объяснения, почему вы указываете отдельные файлы. Самый простой подход - рекурсивно выполнить rsync весь каталог и использовать флаги --include или --exclude с соответствующими шаблонами, которым вы хотите соответствовать, если вам нужен больший контроль.

Если ваше использование действительно требует явного указания каждого отдельного файла для резервного копирования, используйте отдельный текстовый файл со списком этих файлов и вызовите rsync с флагом --files-from.

Я использовал опцию --files-from. Это работает хорошо. rsync очень надежен, но многие параметры конфигурации могут сбить с толку при обучении. Например, есть флаг --cvs-exclude, чтобы исключить все файлы метаданных из резервной копии не только для CVS, но и для SVN. Чрезвычайно полезный, но определенно не легко обнаруживаемый.

Все эти опции подробно описаны в документации rsync здесь .

1 голос
/ 31 января 2009

Хорошо, после дальнейшего тестирования, похоже, что это связано с длиной аргумента. Я не определил точную длину, но я попробовал другой набор из 25 файлов с более короткими путями / именами файлов, и он работал нормально. Так что, думаю, мне просто нужно ограничить длину команды. Жопа. : \

0 голосов
/ 31 января 2009

Давайте предположим, что это ошибка, а не ожидаемое поведение.

Поскольку Rsync - проект с открытым исходным кодом. Вы можете скачать исходный код, найти ошибку и загрузить исправление для всех. Вы должны проверить, используете ли вы последнюю версию в первую очередь.

0 голосов
/ 31 января 2009

освободите клиент и сервер, посмотрите, кто является причиной проблемы. В Rsync пахнет какой-то ошибкой.

...