rsync зависает с указанием многих удаленных файлов

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

rsync -R hostname :: 'module / path1 / file1 module / path2 / file2 module / path3 / file3 module / path4 / file4' / local / path

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

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

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

person dirtside    schedule 31.01.2009    source источник


Ответы (4)


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

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

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

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

person Lee Harold    schedule 31.01.2009
comment
Мое использование действительно требует указания случайных произвольных файлов; нет перемещаемых целых каталогов или используемых шаблонов для включения / исключения. Но --files-from может работать; Я займусь этим. - person dirtside; 31.01.2009

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

person dirtside    schedule 31.01.2009

Разберитесь между клиентом и сервером, посмотрите, кто вызывает проблему. Пахнет какой-то ошибкой в ​​rsync.

person womble    schedule 31.01.2009

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

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

person Joe Soul-bringer    schedule 31.01.2009
comment
У меня нет возможности изменить версию rsync, используемую в рассматриваемой среде, и у меня нет времени (или навыков) для работы над изменением проекта rsync :) - person dirtside; 31.01.2009