Назад | Перейти на главную страницу

Надежный процесс копирования (перемещения) файлов - в основном Unix / Linux

Краткая история: нам нужен надежный и надежный процесс перемещения файлов. У нас есть исходные каталоги, в которые часто записываются файлы, из которых нам нужно переместить файлы. Файлы идут парами - большой двоичный файл и небольшой индекс XML. Мы получаем файл CTL, который определяет эти комплекты файлов. Существует процесс, который работает с файлами, когда они попадают в целевой каталог; это избавит от них, когда это будет сделано. Будет ли rsync работать лучше, или нам нужно сделать более сложным? Длинная история такая:

У нас есть несколько источников, из которых можно извлечь: один набор каталогов находится на машине Windows (на которой есть Cygwin и демон SSH), и целая куча каталогов находится на наборе серверов SFTP (большинство из них также Windows). Наши пункты назначения - это список каталогов на серверах AIX.

Мы использовали очень надежный Perl-скрипт на машине Windows / Cygwin, когда он был нашим единственным источником. Однако мы работаем над тем, чтобы избавиться от этой машины, и сейчас есть другие источники, серверы SFTP, на которых мы не можем в настоящее время запускать наши собственные скрипты.

По соображениям безопасности мы не можем запускать задания копирования на наших серверах AIX - у них нет доступа к исходным серверам. В настоящее время у нас есть собственная программа Java на машине Linux, которая использует SFTP для извлечения из различных новых исходных каталогов SFTP, копирует в локальный каталог tmp, проверяет, что все присутствует, затем копирует это на машины AIX, а затем удаляет файлы из источника. Тем не менее, мы находим множество ошибок или плохо обрабатываемую проверку ошибок. Никто из нас не является экспертом по Java, поэтому исправить / улучшить это может быть сложно.

Нас беспокоят:

Если бы вам это представили, вы бы просто написали сценарий rsync? Или вы бы создали или купили инструмент, и если да, то какой бы он был (или какие технологии он использовал бы?) Я (и другие члены моей команды) неплохо разбираюсь в Perl.

Редактировать: Rsync выполняет сквозную проверку: после передачи файла вычисляет контрольную сумму этого файла в месте назначения и сравнивает ее с контрольной суммой в источнике. Только когда контрольные суммы совпадают, он объявляет передачу успешной. Это отражается в окончательном коде статуса выхода - если ВСЕ переданные файлы прошли проверку, код выхода будет 0 (Успех).

В аналогичной настройке я написал собственное решение на основе rsync. Это было для ночных резервных копий, и мы не удаляем файлы автоматически.

Чтобы решить некоторые из ваших проблем:

  • Rsync никогда ничего не изменяет на стороне источника (если вы не используете --remove-source-files вариант).
  • Если сеть выходит из строя на долгое время, Rsync откажется и дать соответствующий статус выхода. Я проверяю это в своем скрипте и для конкретных кодов выхода (которые я наблюдал на практике, регистрируя), у меня есть скрипт, который повторяет команду rsync до 3 раз.
  • Да, ваш скрипт должен записывать как можно больше. Отметка времени, общее время работы, статус Rsync, Rsync - вывод статистики (переданное количество). Я также бегу find в конце передачи подсчитать количество файлов и du * чтобы получить размеры каталогов и зарегистрировать это.

В основном вам нужно позаботиться о нескольких вещах в сценарии. В основном: сбор статуса выхода, некоторой статистики и удаление исходных файлов при успешной передаче.

Вы можете доверять статусу выхода rsync, что все запрошенные файлы были переданы, но вы должны подумать о том, насколько вы доверяете своему скрипту, чтобы предоставить rsync правильные файлы (исходный каталог), прежде чем удалять их на исходной машине. Возможно, считая файлы с find в источнике, а затем в месте назначения (и затем проверка совпадения этих чисел) будет хорошей последней проверкой, прежде чем ваш сценарий автоматически удалит файлы.

Дайте ему от 10 до 20 попыток разработать и протестировать свой сценарий. Вам нужно будет установить Cygwin с клиентами rsync и ssh на машины Windows.

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