Eu não acho que isso seja culpa do rsync. Acho que você marcou isso corretamente como um problema no nível do kernel, já que o código relevante de flist.c
sources do rsync diz:
1729 for (errno = 0, di = readdir(d); di; errno = 0, di = readdir(d)) {
1730 unsigned name_len;
1731 char *dname = d_name(di);
...
1746 if (dname[0] == 'If readdir() gives us an empty name, reject it.
') {
1747 io_error |= IOERR_GENERAL;
1748 rprintf(FERROR_XFER,
1749 "cannot send file with empty name in %s\n",
1750 full_fname(fbuf));
Na verdade, essa linha de código foi adicionada pelo desenvolvedor do rsync em agosto de 2007 especificamente para este caso:
The readdir() function shall not return directory entries containing empty names.
Em outras palavras, readdir()
em si (a função kernel que retorna a lista de arquivos em um diretório) retornou uma entrada com uma string vazia.
Sob as regras, isso nunca deveria acontecer. Citando a especificação do Open Group :
1729 for (errno = 0, di = readdir(d); di; errno = 0, di = readdir(d)) {
1730 unsigned name_len;
1731 char *dname = d_name(di);
...
1746 if (dname[0] == 'If readdir() gives us an empty name, reject it.
') {
1747 io_error |= IOERR_GENERAL;
1748 rprintf(FERROR_XFER,
1749 "cannot send file with empty name in %s\n",
1750 full_fname(fbuf));
Parece que foi algum tipo de problema transitório, porque desapareceu quando você fez um ls
nesse diretório (o que também teria usado readdir()
, ele desapareceu).
Então a resposta para suas perguntas:
-
A causa parece ser um sistema de arquivos corrompido - qualquer coisa, desde um bug do driver do kernel até uma falha de hardware, pode ser responsável. Também vale a pena verificar se o diretório em que você está rsync está acessando via symlink ou cruza um limite de rede que pode estar com problemas.
-
Para se livrar deles: a lista de verificação usual de reparos do sistema de arquivos: fsck, etc.
-
Para evitar no futuro: suponho que você poderia dizer ao seu script para forçar uma listagem recursiva de antemão - mas como você já está sendo notado (e está de férias), parece que a coisa certa a fazer é ficar de olho nele e pular na caixa se isso acontecer de novo.
Espero que isso tenha sido útil, boa sorte!