сохранить rsync от удаления незаконченных исходных файлов
У меня две машины, скорость и масса. скорость имеет быстрое подключение к Интернету и запускает сканер, который загружает большое количество файлов на диск. масса имеет много дискового пространства. Я хочу переместить файлы со скоростью до массы после их загрузки. В идеале я бы просто запустил:
$ rsync --remove-source-files speed:/var/crawldir .
но я беспокоюсь, что rsync отключит исходный файл, который еще не закончил загрузку. (Я посмотрел исходный код, и я не видел ничего, что защищало бы это.) Любые предложения?
Ответы
Ответ 1
Мне кажется, что проблема заключается в передаче файла перед его завершением, а не в том, что вы его удаляете.
Если это Linux, возможно, что файл будет открыт процессом A, а процесс B может отсоединить файл. Там нет ошибки, но, конечно, A тратит свое время. Таким образом, проблема, что rsync удаляет исходный файл, не является проблемой.
Проблема заключается в том, что rsync удаляет исходный файл только после его копирования, и если он все еще записывается на диск, у вас будет частичный файл.
Как насчет: Mount mass
как удаленная файловая система (NFS будет работать) в speed
. Затем просто сканируйте файлы напрямую.
Ответ 2
Сколько у вас контроля над процессом загрузки? Если вы сворачиваете свой собственный, вы можете загрузить загружаемый файл в временный каталог или иметь временное имя, пока оно не закончит загрузку, а затем mv его до правильного имени, когда оно будет выполнено. Если вы используете стороннее программное обеспечение, то у вас не так много контроля, но вы все равно можете выполнять работу с файлом temp.
Ответ 3
Rsync может исключать файлы, соответствующие определенным шаблонам. Даже если вы не можете изменить его, чтобы он загружал файлы во временный каталог, возможно, у него есть соглашение об именовании файлов по-разному во время загрузки (например: foo.downloading
при загрузке файла с именем foo
), и вы можете используйте это свойство, чтобы исключить файлы, которые все еще загружаются из копии.
Ответ 4
Если у вас есть контроль над процессом обхода или он имеет предсказуемый вывод, вышеупомянутые решения (хранящиеся в временном файле до тех пор, пока они не закончатся, а затем mv'ing в заполненное-загруженное место или игнорируют файлы с "загрузочным" видом имя) может работать. Если все это не поддается контролю, вы можете убедиться, что файл не открывается каким-либо процессом, выполнив 'lsof $filename' и проверив, есть ли результат. Ясно, что если никто не откроет файл, безопасно его переместить.