rsync mkstemp falhou Argumento inválido (22) com o davfs mount of Box.com cloud

8

Eu montei o armazenamento em nuvem da Box.com usando o davfs de acordo com estas instruções . Eu montei minha conta no Box.com em / home / me / Cloud / Box

Eu posso acessar o sistema de arquivos montado via Dolphin, bem como através do terminal. É um pouco lento, mas posso listar (ls) e navegar por toda a estrutura de diretórios sem erros.

Em seguida, tentei executar o rsync da seguinte forma:

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

Eu também tentei:

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

e outras variações de comandos rsync. O comando está copiando minha música do meu sistema de arquivos local (/ home / me / Music /) para a nuvem Box (/ home / me / Cloud / Box / Music) através da montagem davfs.

Eu sempre recebo muitos erros desta forma:

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

Um exemplo específico é:

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

Isso tudo está acontecendo no Kubuntu 12.04 LTS de 64 bits, hardware de nível de servidor, com uma conexão de modem a cabo rápida / confiável (velocidades de upload de 12 Mb / s).

    
por MountainX 10.06.2013 / 22:23

3 respostas

7

O problema ocorre devido a rsync fazer arquivos temporários com nomes de arquivos que o box.com e / ou o davfs não entendem. Assim, o arquivo .01_Track_1.mp3.YVmFI9 não existe no seu sistema, mas é um artefato temporário de rsync . Algumas adivinhações do meu lado: se você não obtiver o erro em todos os arquivos, provavelmente só obterá os erros nos arquivos que já foram enviados (e alterados).

costumava ser impossível para desativar essa geração de arquivos temporários, mas você pode hoje em dia ter mais sorte, adicionando a opção --inplace . No entanto, as vantagens de usar o rsync se você não estiver falando com um daemon rsync (que você não está usando davfs) não são claras para mim.

Portanto, como alternativa, você pode tentar o cp --update , que copia apenas um arquivo quando a origem é mais recente que o destino. Novos arquivos e quaisquer arquivos com alterações nas tags ID3 serão copiados, outros não.

Ou, se você precisar de mais controle, use find :

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

isso preserva a estrutura da hierarquia e cpio não sobrescreve os arquivos existentes que não são mais antigos.

    
por 11.06.2013 / 05:47
3

1. Problemas com caracteres especiais em nomes de arquivos

Existem caracteres especiais nos nomes dos arquivos? Dependendo do sistema de arquivos para o qual você está escrevendo esses arquivos, eles podem não permitir o prefixo de arquivos com um ponto ( . ), por exemplo.

2. Problemas com tempos de modificação do rsync e webdav2

Me deparei com essa postagem no blog , onde um problema é descrito com rsync tendo um problema ao gravar / controlar os tempos de modificação de arquivos nos diretórios webdav2 mounted box.com.

O problema aparece assim no sistema de arquivos montado:

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

Esse mesmo artigo mostrou uma solução alternativa:

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

Esta é uma maneira legal de usar rsync , mas é apenas comparar arquivos com base no tamanho deles agora, não em suas somas de verificação.

3. Problemas com o davfs2 (WebDAV)

Me deparei com este tópico intitulado: rsync via davfs2? no WebDAV (davfs) fórum sobre no sourceforge. Alguém estava perguntando sobre uma situação semelhante em que eles queriam usar o WebDAV para montar um provedor de armazenamento online e executar rsync para o armazenamento montado via WebDAV. Isto é o que um dos desenvolvedores (Werner Baumann) do WebDAV tinha a dizer sobre este tópico .

trecho da resposta da Werner

  • davfs2 will only upload complete files. It can not do the incremental stuff rsync usually does, and that makes rsync very efficient.

  • davfs2 uses a local cache on disk. This will make it more responsive and your application should profit from this too. But it needs local disk space for this. You should allow for a large cache size, so rsync can do most of its work with the local cache, and davfs2 will upload most of the files in the background, when rsync has already finished.

Werner continua sugerindo o seguinte

This could be a disadvantage in this case. When rsync reads a file on the remote host, it must be transfered by davfs2 into the local cache first (if it is not already there). This could make the process really and unnecessary slow. As rsync only works as a sophisticated copy-program in your case, it might be better to use cp instead. cp has an options (-u) to copy only files that are newer than the ones in the davfs2 file system (= smartdrive) and it would not need to read the files, but only reads file meta data like mtime.

A command like "cp -pru directory/to/backup dav/" might do the job. It shold not download files (like rsync might do, but I am not sure) (please look at the manuals of cp and rsync).

Opções?

Assim como o @Anthon sugeriu, você pode usar o método cp -u para copiar os arquivos. Percebendo que esse método considera apenas o tamanho de um arquivo como um fator de comparação, por isso não é totalmente confiável.

Você não deve usar nada que apenas observe os horários de modificação ao comparar arquivos, cp -pru . Werner explica por que neste tópico :

trecho sobre problema com tempos de modificação

When you unmount a davfs2 file system and mount it again at some later time, file times may have changed according to the time information from the server. Tools like cp -pu and rsync can not rely on these times to determine what files have changed.

Então, considerando as várias questões que envolvem os tempos de modificação, uma abordagem que usa apenas checksums parece ser mais adequada:

$ rsync -avvz --omit-dir-times --checksum --human-readable --progress <local dir> <remote dir>
    
por 10.06.2013 / 22:33
3

Para interromper o erro Invalid argument (22) , tive que impedir que o rsync criasse seus arquivos temporários no destino davfs.

rsync --temp-dir=/tmp

Acho que o que acontece é que os nomes dos arquivos temporários do rsync começam com . e o davfs não permite isso. Então fui mais longe e disse ao rsync para ignorar arquivos de origem com nomes começando com . . Como estou usando --delete , também falei para não tentar excluir o diretório lost+found no destino davfs.

rsync --temp-dir=/tmp --exclude lost+found --exclude '.*'
    
por 18.12.2015 / 08:59