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

Вопрос задан: 11 лет назад Последняя активность: 7 месяцев назад
up 170 down

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

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

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

4 ответа

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

Реклама

up 10 down

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

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

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

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

up 9 down

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

up 3 down

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

up 3 down

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