Erro 23 do Rsync: Posso saber quais arquivos não foram transferidos?

32

Corri sudo rsync -va --progressda raiz de uma unidade externa para uma pasta em outra unidade externa. O motivo é que a unidade de origem possui um NTFS com erros e eu não tenho acesso a um PC com Windows para reparar o NTFS.

10 horas depois, dizia:

sent 608725204596 bytes  received 19365712 bytes  15902210.53 bytes/sec
total size is 608586212274  speedup is 1.00
rsync error: some files could not be transferred (code 23) at /SourceCache/rsync/rsync-42/rsync/main.c(992) [sender=2.6.9]

Salvei toda a saída do terminal. No começo, existem algumas centenas Input/output error (5)de arquivos que eu realmente não preciso, totalizando aproximadamente 2 GB. O "uso do disco" do OSX Finder me diz que a fonte é de 617 bilhões de bytes, não de 608, como no relatório acima.

Questões:

  1. A primeira parte da saída detalhada (criação de uma lista de arquivos) diz definitivamente Input/output error (5)para TODOS os arquivos que não serão copiados?
  2. Será que code 23significa que todos os arquivos, exceto os Input/output error (5)queridos foram copiados com sucesso?
o espelho
fonte
1
Possivelmente útil: as mensagens de erro do rsync parecem começar com "rsync:", portanto grep '^rsync: ' outputpodem ser úteis.
precisa saber é o seguinte

Respostas:

19

23 significa apenas (na página de manual):

23 Transferência parcial devido a erro

Para tudo o que não pôde ser transferido, você receberá uma mensagem de erro. Observe que as mensagens de erro podem ser sobre a abertura ou leitura de diretórios, portanto você não verá necessariamente uma mensagem de erro para cada arquivo que não pôde ser transferido.

Se sua fonte não mudou, você pode executar rsyncnovamente -npara ver o que seria transferido dessa vez sem realmente fazer a transferência.

Sobre a diferença de bytes, rsyncfornece o tamanho dos arquivos (quantos dados podem ser lidos a partir deles). Tem certeza de Finderque não informa o uso do disco ?

Observe também que o NTFS pode armazenar dados em fluxos ou atributos alternativos dos arquivos e rsync, normalmente, não transfere (desconhece) aqueles (e isso também pode ser muito útil).

Stéphane Chazelas
fonte
Então você está dizendo que TODOS os dados (não importando o quão corrompidos) que não foram transferidos foram listados no início como um Input/output error (5)?
themirror
em relação à diferença de bytes: Sim, isso está correto. Estou confuso sobre o motivo pelo qual a diferença entre o relatório do rsync e o "uso do disco" do Finder é de 9 bilhões de bytes, mas só consigo identificar de 2 a 3 bilhões de bytes de arquivos Input/output error (5). Você pode explicar?
themirror
1
@ thhemirror, um arquivo de 1 byte ainda precisará de alguns kilo-bytes alocados no disco para armazená-lo (tente echo > file; du -k filever quanto no sistema de arquivos de origem, mas no NTFS, geralmente é de 4k). rsyncdirá que o tamanho é 1, mas o Finder pode informar 4096 para esse arquivo.
Stéphane Chazelas
@themirror, escrevi seu primeiro comentário, estou dizendo que, para tudo (conteúdo do arquivo, veja minha edição sobre fluxos alternativos) que não pôde ser transferido, você receberá um erro, mas se receber um diretório que não pode ler / foo , então obviamente /foo/bare /foo/bar/baztambém não serão transferidos.
Stéphane Chazelas
17

Você pode silenciar a saída sem erro do rsync usando o -qsinalizador do rsync .

-q, --quiet                 suppress non-error messages

Se você executar o rsync novamente com o -qsinalizador, o rsync provavelmente ainda falhará, mas, pelo menos dessa vez, as mensagens de erro que estão causando seu problema não serão ocultadas sob linhas e linhas de mensagens de status de transferência de arquivos.

Grimtech
fonte
2

Re: error 23-- O motivo mais comum para ter esse erro é cometer um erro menor digitando a fonte rsync. Examine seu comando de origem e verifique se tudo está contra ls, e procure coisas sutis e estúpidas, como um espaço extra ou um problema de 1 l.

blut swaan
fonte
Eu sei que é bobagem, mas até segui o caminho para continuar pesquisando o código até perceber que havia cometido esse erro estúpido. Obrigado!
rburhum