impedire a rsync di rimuovere i file di origine incompiuti


169

Ho due macchine, velocità e massa. speed ha una connessione Internet veloce ed è in esecuzione un crawler che scarica molti file sul disco. la massa ha molto spazio su disco. Voglio spostare i file dalla velocità alla massa dopo aver terminato il download. Idealmente, vorrei solo eseguire:

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

ma temo che rsync scollegherà un file sorgente che non ha ancora terminato il download. (Ho guardato il codice sorgente e non ho visto nulla che proteggesse da questo.) Qualche suggerimento?

Risposte:


10

Mi sembra che il problema sia trasferire un file prima che sia completo, non che lo stai eliminando.

Se si tratta di Linux, è possibile che un file venga aperto dal processo A e che il processo B possa scollegare il file. Non ci sono errori, ma ovviamente A sta perdendo tempo. Pertanto, il fatto che rsync elimini il file di origine non è un problema.

Il problema è che rsync elimina il file sorgente solo dopo che è stato copiato, e se è ancora in fase di scrittura sul disco avrai un file parziale.

Che ne dici di questo: monta masscome file system remoto (funzionerebbe NFS) in speed. Quindi esegui la scansione dei file direttamente sul Web.


9

Quanto controllo hai sul processo di download? Se esegui il rollup del tuo, puoi avere il file scaricato in una directory temporanea o avere un nome temporaneo fino al termine del download, quindi spostarlo con il nome corretto al termine. Se stai utilizzando software di terze parti, non hai lo stesso controllo, ma potresti comunque essere in grado di fare la cosa della directory temporanea.


3

Rsync può escludere file corrispondenti a determinati schemi. Anche se non puoi modificarlo per farlo scaricare i file in una directory temporanea, forse ha una convenzione di denominare i file in modo diverso durante il download (ad esempio: foo.downloadingdurante il download per un file denominato foo) e puoi usare questa proprietà per escludere i file che vengono ancora scaricati dall'essere copiati.


3

Se hai il controllo del processo di ricerca per indicizzazione o se hai un output prevedibile, le soluzioni di cui sopra (archiviando in un file temporaneo fino al termine, quindi spostandoti nel luogo di download completato o ignorando i file con un tipo di nome ".downloading") potrebbe funzionare. Se tutto ciò è al di fuori del tuo controllo, puoi assicurarti che il file non venga aperto da nessun processo facendo 'lsof $ nomefile' e controllando se c'è un risultato. Chiaramente se nessuno ha il file aperto, è sicuro spostarlo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.