Erro rsync: falha ao definir horários em “/ foo / bar”: operação não permitida

194

Estou recebendo um erro confuso do rsync e as coisas iniciais que estou encontrando nas pesquisas na web (assim como todas as alterações habituais) não estão resolvendo o problema:

rsync: failed to set times on "/foo/bar": Operation not permitted (1)
rsync error: some files could not be transferred (code 23) 
  at /SourceCache/rsync/rsync-35.2/rsync/main.c(992) [sender=2.6.9]

Parece estar funcionando apesar desse erro, mas seria bom se livrar dele.

dreeves
fonte
não, apenas um diretório normal, tanto quanto eu posso dizer.
21411 dreeves
Acabei de encontrar um problema semelhante, embora meu código de erro fosse 22: rsync: falha ao definir horários em ... Argumento inválido (22). Após algumas verificações, meus arquivos foram datados da última vez em 1956! Solução: toque em todos os arquivos, problema resolvido. :) "find. -print0 | xargs -0 touch"
KIAaze em 10/08/12
Acho que se você também configurou um trabalho cron para o mesmo destino, esse erro será exibido. Alterar o horário do trabalho cron (crontab) ajudará a contorná-lo. No meu caso, só recebo esse erro se fizer um rysnc manual se também tiver configurado um trabalho cron.
NelsonGon

Respostas:

286

Se /foo/barestiver no NFS (ou possivelmente em algum sistema de arquivos FUSE), esse pode ser o problema.

De qualquer forma, adicionar -O/ --omit-dir-timesà sua linha de comando evitará a tentativa de definir os tempos de modificação nos diretórios.

Jon Bright
fonte
8
O engraçado é que estou sincronizando ext3 para ext3, ambos os sistemas operacionais são linux. Eu nunca tive que usar essa opção antes. -O fiz o truque, mas gostaria de não ter que usá-lo.
d -_- b
3
Obrigado! Acontece que alguns hosts VPS (por exemplo, xlshosting.nl) usam isso internamente, o que pode causar problemas com o rsync.
Frederik
2
Eu tenho o mesmo problema ao sincronizar do Linux ext4 para o Linux ext4: a "não pode definir horários: operação não permitida" para links simbólicos , não diretórios. -Onão ajuda, obviamente. Isso não costumava acontecer quando minha partição de backup era ext3 em vez de ext4.
Marius Gedminas
10
Eu estava usando o rsync -avc e adicionar -O não estava ajudando. Eu então li que -a era o equivalente a -rlptgoD que inclui -t, que eu acho que está substituindo -O. Então, para mim, a correção foi usar -rlpgoDvc
dlink 21/09/16
3
@dlink você pode adicionar --no-tpara remover a opção implícita.
Noam Nelke
86

O problema provavelmente se deve ao fato de o / foo / bar não pertencer ao processo de gravação em um sistema remoto darwin (OS X). Uma solução para o problema é definir o proprietário adequado no site remoto.

Como essa resposta foi votada e, portanto, esperançosamente útil para alguém, estou ampliando-a para torná-la mais clara.

A razão pela qual isso acontece é que o rsync provavelmente está tentando definir um tempo de modificação arbitrário (mtime) ao copiar arquivos.

Para fazer isso, a utime()função do sistema de darwin exige que o uid efetivo do processo de gravação seja o mesmo que o uid do arquivo ou o superusuário, consulte a página do opengroup utime . Verifique esta discussão na lista de discussão do rsync como referência.

anddam
fonte
10
O mesmo no Linux (Debian Squeeze no meu caso) ... Se eu não sou o proprietário do diretório de destino, o rsync fornecerá a mensagem de erro "falha ao definir horários". (Ter permissão de escrita no diretório não é suficiente.)
ddekany
1
Eu fiquei preso no mesmo problema. Até montar o NTFS com uid = user.
precisa saber é o seguinte
3
Esse erro foi resolvido quando eu mudei o proprietário do diretório que estava tentando afetar (no servidor remoto) usando o comando rsync para o mesmo usuário que tentava efetuar login via rsync no script Bash local. Em outras palavras: eu estava tentando gravar /remote/path/to/foo/barno servidor remoto com este comando: rsync -avzP --exclude '.DS_Store' /local/path/to/foo/bar/ [email protected]:/remote/path/to/foo/bar e recebi as mesmas mensagens de erro que desapareceram quando fiz user1o proprietário /remoe/path/to/foo/barassim:$ chown -R user1 /remote/path/to/foo/bar
racl101
1
Se você compartilha seus arquivos com outros usuários em um grupo, por exemplo, você usa o bit fixo, então mudar de proprietário não é realmente a solução. Não usamos -t e adicionamos -O para evitar esse aviso.
precisa
1
Você pode expandir a resposta para esclarecer se um usuário faz parte de um grupo que possui o arquivo / dir, se isso OR ou não funcionar?
Elijah Lynn
4

Como @ racl101 comentou uma resposta, esse problema pode estar relacionado ao proprietário da pasta . O comando rsync deve ser feito pelo mesmo usuário que o do proprietário da pasta. Se não for o mesmo, você pode alterá-lo.

chown -R userCorrect /remote/path/to/foo/bar
Lud Akell
fonte
2

O problema no meu caso foi que o "ponto de montagem do receptor" foi montado incorretamente. Estava no modo somente leitura (por algum motivo extrangeiro). Parecia que o rsync estava copiando os arquivos, mas não estava. Verifiquei meu arquivo fstab e alterei as opções de montagem para o padrão, reinstale o sistema de arquivos e execute o rsync novamente. Tudo bem então.

ripah
fonte
2

Eu tive o mesmo problema. Para mim, a solução é excluir o arquivo remoto e deixar rsynccriar novamente.

shintaroid
fonte
0

Eu já vi esse problema ao escrever em um sistema de arquivos que não lida com (adequadamente) os tempos - acho que compartilhamentos SMB, FAT ou algo assim.

Qual é o seu sistema de arquivos alvo?

David Wolever
fonte
Eu estou em um mac, rsync'ing para linux (uma máquina slicehost).
21420 dreeves
Ah, estranho ... Já que você está usando o rsync no mac, devo avisá-lo: ele não preserva adequadamente todos os atributos de arquivo do OS X, para que coisas ruins possam acontecer. Veja, por exemplo: blog.plasticsfuture.org/2006/04/23/mac-backup-software-harmful
David Wolever 21/03/2009
Você pode, no entanto, usar a versão mais recente do MacPorts ( sudo port install rsync) e ela quebrará menos. Para verificar isso: rsync --version: rsync versão 3.0.5 versão do protocolo 30 ... Acrescentar, ACLs, xattrs, iconv, symtimes, file-bandeiras ... (ACLs e xattrs são os mais importantes)
David Wolever
1
De fato, o rsync no Macintosh define todos os atributos de arquivo e já o faz há algum tempo. Observe que a referência de URL "Bad Things poderia acontecer" é de 2006!
9788 #
2
As respostas realmente não devem incluir perguntas. Isso seria mais apropriado como um comentário.
18713 Brian
0

Pode ser que você não tenha privilégios para alguns dos arquivos. Em uma conta de administrador, tente "sudo rsync -av" Como alternativa, ative a conta raiz e entre como raiz. Isso deve permitir que você manuseie completamente o sistema e force o seu rsync! ;-) Eu não tenho certeza se os atributos - extendido mencionados acima ajudarão, mas eu os instalei também, apenas por uma boa medida.

capitão
fonte
0

Isso aconteceu comigo em uma partição do tipo xfs (rw,relatime,seclabel,attr2,inode64,noquota) , na qual os diretórios pertenciam a outro usuário em um grupo do qual ambos éramos membros. A associação ao grupo já estava estabelecida antes do login e toda a estrutura de diretórios era gravável em grupo. Eu tinha executado manualmente sudo chown -R otheruser.group directorye sudo chmod -R g+rw directorypara confirmar isso.

Ainda não tenho idéia do porquê não funcionou originalmente, mas assumi a propriedade com o sudo chown -R myuser.group directoryconserto. Talvez relacionado ao SELinux?

Sam Brightman
fonte
A página do manual indica o UID do aplicativo. deve corresponder ao UID do arquivo para utime()funcionar. Você também pode executar como root e fazê-lo. Mas se o UID do arquivo for diferente, eles não permitirão que você altere o horário para nada além de "agora".
Alexis Wilke
Você pode criar um link para uma página de manual? Nenhuma das minhas menções utime().
Sam Brightman
1
linux.die.net/man/2/utime O parágrafo pertinente: "A alteração de carimbos de data e hora é permitida quando: o processo possui privilégios apropriados ou o ID do usuário efetivo é igual ao ID do usuário do arquivo, ou as horas são NULL e o processo tem permissão de gravação para o arquivo ".
Alexis Wilke
0

Esse erro também pode aparecer se você executar o processo rsync para arquivos que não foram modificados recentemente na origem ou destino ... porque não é possível definir o horário dos arquivos modificados recentemente.

Gurdeep Singh
fonte