не дозволяйте rsync видаляти незакінчені вихідні файли


169

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

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

але я переживаю, що rsync від’єднає вихідний файл, який ще не завершив завантаження. (Я подивився вихідний код і не побачив нічого, що захищає від цього.) Будь-які пропозиції?

Відповіді:


10

Мені здається, проблема полягає в перенесенні файлу до його завершення, а не в тому, що ви його видаляєте.

Якщо це Linux, файл може бути відкритий процесом A, а процес B може від’єднати файл. Помилки немає, але, звичайно, А витрачає свій час. Тому те, що rsync видаляє вихідний файл, не є проблемою.

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

Як щодо цього: Монтувати massяк віддалену файлову систему (NFS буде працювати) в speed. Потім просто веб-сканування файлів безпосередньо.


9

Скільки у вас контролю над процесом завантаження? Якщо ви скачуєте свій власний файл, ви можете перенести завантажений файл у тимчасовий каталог або мати тимчасове ім'я до завершення завантаження, а потім перенесіть його до правильного імені, коли це буде зроблено. Якщо ви використовуєте програмне забезпечення сторонніх розробників, у вас немає такого контролю, але ви все одно зможете зробити тему каталогу каталогу.


3

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


3

Якщо у вас є контроль над процесом сканування, або він має передбачуваний вихід, вищезазначені рішення (зберігання в темпфілі до завершення, потім переміщення до місця завершення завантаження або ігнорування файлів із назвою '.download') може спрацювати. Якщо все це поза вашим контролем, ви можете переконатися, що файл не відкривається жодним процесом, зробивши "lsof $ filename" і перевіривши, чи є результат. Зрозуміло, що якщо файл ні в кого не відкритий, його можна безпечно перемістити.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.