сохранить rsync от удаления незаконченных исходных файлов


169

У меня две машины, скорость и масса. speed имеет быстрое подключение к Интернету и использует сканер, который загружает много файлов на диск. У массы много дискового пространства. Я хочу переместить файлы со скорости на массу после того, как они закончили скачивать. В идеале я бы просто запустил:

$ rsync --remove-source-files speed:/var/crawldir .

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

Ответы:


10

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

Если это Linux, файл может быть открыт процессом A, а процесс B может отсоединить файл. Там нет ошибки, но, конечно, А тратит свое время. Поэтому тот факт, что rsync удаляет исходный файл, не является проблемой.

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

Как насчет этого: Монтировать massкак удаленную файловую систему (NFS будет работать) в speed. Затем просто просканируйте файлы напрямую.


9

Насколько вы контролируете процесс загрузки? Если вы свернули свой собственный файл, вы можете сделать так, чтобы загружаемый файл находился во временном каталоге или имел временное имя до тех пор, пока он не закончил загрузку, а затем mv вернул его к правильному имени, когда это будет сделано. Если вы используете стороннее программное обеспечение, то у вас не так много контроля, но вы все равно сможете сделать временный каталог.


3

Rsync может исключать файлы, соответствующие определенным шаблонам. Даже если вы не можете изменить его так, чтобы он загружал файлы во временный каталог, возможно, он имеет соглашение о присвоении имен файлам по-разному во время загрузки (например, foo.downloadingпри загрузке файла с именем foo), и вы можете использовать это свойство для исключения файлов которые по-прежнему загружаются из копирования.


3

Если у вас есть контроль над процессом сканирования или он имеет предсказуемый вывод, приведенные выше решения (сохранение в временном файле до завершения, затем перемещение в место завершения загрузки или игнорирование файлов с именем типа «.downloading») может работать. Если все это находится вне вашего контроля, вы можете убедиться, что файл не открыт каким-либо процессом, выполнив команду «lsof $ filename» и проверив, есть ли результат. Очевидно, что если ни у кого нет открытого файла, его можно переместить.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.