rsync mkstemp fallito Argomento non valido (22) con mount davfs del cloud Box.com


10

Ho montato il cloud storage Box.com usando davfs secondo queste istruzioni . Ho montato il mio account Box.com in / home / me / Cloud / Box

Posso accedere al filesystem montato tramite Dolphin e tramite il terminale. È un po 'lento, ma posso elencare (ls) e navigare nell'intera struttura di directory senza errori.

Successivamente ho tentato di eseguire rsync come segue:

rsync -auvz  --max-size=250M --exclude '.*' /home/me/Music/ /home/me/Cloud/Box/Music

Ho anche provato:

rsync -auv  /home/me/Music/A /home/me/Cloud/Box/Music

e altre varianti dei comandi rsync. Il comando sta copiando la mia musica dal mio file system locale (/ home / me / Music /) sul cloud Box (/ home / me / Cloud / Box / Music) tramite il mount davfs.

Ricevo sempre molti errori di questo modulo:

rsync: mkstemp <filename> failed: Invalid argument (22)

Un esempio specifico è:

rsync: mkstemp "/home/me/Cloud/Box/Music/VariousArtists/.01_Track_1.mp3.YVmFI9" failed: Invalid argument (22)

Tutto ciò accade su Kubuntu 12.04 LTS 64 bit, hardware di livello server, con una connessione modem via cavo veloce / affidabile (velocità di upload di 12 Mb / s).

Risposte:


7

Il problema si verifica a causa della rsynccreazione di file temporanei con nomi di file che box.com e / o davfs non comprendono. Quindi il file .01_Track_1.mp3.YVmFI9non esiste sul tuo sistema, ma è un artefatto temporaneo di rsync. Alcune ipotesi da parte mia: se non si ottiene l'errore su tutti i file, probabilmente si ottengono solo gli errori sui file che sono già stati caricati (e modificati).

In passato era impossibile disattivare questa generazione di file temporanei, ma oggi potresti avere più fortuna aggiungendo l'opzione --inplace. Tuttavia, i vantaggi dell'uso di rsync se non stai parlando con un demone rsync (cosa che non sei se stai usando davfs), non mi sono chiari.

Pertanto, in alternativa, puoi provare cp --update, che copia un file solo quando l'origine è più recente della destinazione. Nuovi file e tutti i file con modifiche nei tag ID3 verranno copiati, altri no.

O se è necessario un maggiore controllo, utilizzare find:

cd /home/me/Music/
find * -size -250M -print0 | cpio -pdmv0 /home/me/Cloud/Box/Music

ciò preserva la struttura della gerarchia e cpionon sovrascrive i file esistenti che non sono più vecchi.


1
Uno dei motivi per utilizzare rsync è che so già come limitarlo alla copia di file inferiori a 250 MB e file o directory che non sono nascosti. Io uso --max-size=250M --exclude '.*' . Sono sicuro che cppuò essere fatto per fare questo ... forse convogliando l'output di find in cp? Ma non so ancora come farlo. Se troveremo una soluzione, proverò cp -ru. Grazie
MountainX l'

In quel caso non hai bisogno di cp -u, usa cpio (vedi risposta aggiornata)
Anthon,

Grazie. Credo che questo lo risolverà per me. Mi hai istruito nel processo, che apprezzo. (Cordiali saluti, nel mio caso voglio file inferiori a 250 MB, non maggiori di.)
MountainX

Questo è ciò che ... -size -250Mfa, altrimenti useresti +250M(qui c'era brevemente una versione sbagliata, ma me ne sono reso conto prima che la modifica fosse corretta)
Anthon,

3

1. Problemi con caratteri speciali nei nomi dei file

Ci sono caratteri speciali nei nomi dei file? A seconda del filesystem in cui stai scrivendo questi file, potrebbero non permetterti di precedere i file con un punto ( .) per esempio.

2. Problemi con i tempi di modifica rsync e webdav2

Mi sono imbattuto in questo post sul blog in cui viene descritto rsyncun problema con un problema durante la scrittura / il monitoraggio dei tempi di modifica dei file nelle directory box.com montate su webdav2.

Il problema si presenta così nel file system montato:

david@sydney:~/Pictures$ ls -l /mnt/box/bwca/08/09/IMG_3084.CR2
-rw-r--r-- 1 david david 12564061 Aug 14 16:08 /mnt/box/bwca/08/09/IMG_3084.CR2
david@sydney:~/Pictures$ ls -l 2012/08/09/IMG_3084.CR2
-rw-rw-r-- 1 david david 12564061 Aug  9 13:00 2012/08/09/IMG_3084.CR2

Lo stesso articolo mostrava una soluzione alternativa:

$ rsync -avhP --size-only --bwlimit=64 2012/08 /mnt/box/bwca/

Questo è un modo OK di usare rsync, ma sta solo confrontando i file in base alle loro dimensioni ora, non ai loro checksum.

3. Problemi con davfs2 (WebDAV)

Mi sono imbattuto in questa discussione intitolata: rsync via davfs2? nel forum WebDAV (davfs) su sourceforge. Qualcuno si stava informando su una situazione simile in cui volevano utilizzare WebDAV per montare un provider di archiviazione online ed eseguire rsync sullo storage montato tramite WebDAV. Questo è ciò che uno degli sviluppatori (Werner Baumann) di WebDAV ha detto su questo argomento .

estratto della risposta di Werner

  • davfs2 caricherà solo file completi. Non può fare le cose incrementali che rsync di solito fa, e ciò rende rsync molto efficiente.

  • davfs2 utilizza una cache locale su disco. Ciò lo renderà più reattivo e anche la tua applicazione dovrebbe trarne vantaggio. Ma ha bisogno di spazio su disco locale per questo. Dovresti consentire una cache di grandi dimensioni, in modo che rsync possa fare la maggior parte del suo lavoro con la cache locale e davfs2 caricherà la maggior parte dei file in background, quando rsync avrà già terminato.

Werner continua a suggerire quanto segue

Questo potrebbe essere uno svantaggio in questo caso. Quando rsync legge un file sull'host remoto, deve prima essere trasferito da davfs2 nella cache locale (se non è già presente). Ciò potrebbe rallentare il processo davvero e inutilmente. Dato che rsync funziona solo come un sofisticato programma di copia nel tuo caso, potrebbe essere preferibile usare cp. cp ha un'opzione (-u) per copiare solo i file più recenti di quelli nel file system davfs2 (= smartdrive) e non avrebbe bisogno di leggere i file, ma legge solo i metadati dei file come mtime.

Un comando come "cp -pru directory / to / backup dav /" potrebbe fare il lavoro. Non deve scaricare file (come potrebbe fare rsync, ma non ne sono sicuro) (si prega di consultare i manuali di cp e rsync).

Opzioni?

Come ha suggerito @Anthon, è possibile utilizzare il cp -umetodo per copiare i file. Rendersi conto che questo metodo considera solo le dimensioni di un file come un fattore di confronto, quindi non è completamente affidabile.

Non si deve usare tutto ciò che solo sembra a volte di modifica quando si confrontano i file, cp -pru. Werner spiega perché in questa discussione :

estratto in questione con tempi mod

Quando si smonta un file system davfs2 e lo si monta nuovamente in un secondo momento, i tempi dei file potrebbero essere cambiati in base alle informazioni sul tempo dal server. Strumenti come cp -pu e rsync non possono fare affidamento su questi tempi per determinare quali file sono stati modificati.

Quindi, date le varie questioni relative ai tempi di modifica, un approccio che utilizza solo checksum sembra adattarsi meglio:

$ rsync -avvz --omit-dir-times --checksum --human-readable --progress <local dir> <remote dir>

Ciao. Non ci sono caratteri speciali nei nomi dei file. Il mio nome file sul disco è semplicemente "01_Track_1.mp3". Il prefisso punto non fa parte del nome file normale, né l'estensione aggiuntiva (ad esempio, .mp3.YVmFI9). Si noti inoltre che non tutti i file falliscono. I fallimenti non sembrano avere uno schema.
MountainX

sono abbastanza informazioni? got file_sum recv_files(Some_Music_[1999]/Some_Music_[1999]Zuni_SongVarious_Artists24.mp3) rsync: mkstemp "/home/me/Cloud/Box/Music/Some_Music_[1999]/.Some_Music_[1999]Zuni_SongVarious_Artists24.mp3.1aWWRY" failed: Invalid argument (22) got file_sum
MountainX,

un altro esempio:got file_sum recv_files(Carlos/Dance/05-Tapestry-Carlos.mp3) rsync: mkstemp "/home/me/Cloud/Box/Music/Carlos/Dance/.05-Tapestry-Carlos.mp3.WeGbGS" failed: Invalid argument (22) got file_sum recv_files(Carlos/Dance/06-Dance-Turquoise_Dance-Carlos.mp3)
MountainX l'

@MountainX - vedi se il mio aggiornamento è un tuo problema. Inoltre quale versione rsyncstai usando? rsync --version.
slm

rsync version 3.0.9 protocol version 30e sto testando la tua soluzione aggiornata ora. Grazie!
MountainX,

3

Per fermare l' Invalid argument (22)errore ho dovuto impedire a rsync di creare i suoi file temporanei sulla destinazione davfs.

rsync --temp-dir=/tmp

Penso che ciò che accade sia che i nomi dei file temporanei di rsync iniziano con .e davfs non lo consente. Quindi sono andato oltre e ho detto a rsync di ignorare i file di origine con nomi che iniziano con .. Dal momento che sto usando --delete, ho anche detto di non provare a cancellare la lost+founddirectory nella destinazione davfs.

rsync --temp-dir=/tmp --exclude lost+found --exclude '.*'

Ho riscontrato questo problema su Cygwin e questa domanda è stata la migliore hit del motore di ricerca. La risposta accettata non ha funzionato per me poiché stavo lavorando su una sincronizzazione remota dei file su Internet, quindi l'uso di rsync era obbligatorio. Il suggerimento --temp-dir in questa risposta è stata la soluzione per me.
nickcrabtree,
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.