Unison e atributos de arquivo estendidos

5

Eu tenho duas máquinas, uma Debian, uma Ubuntu, ambas no ext4 com atributos de arquivo estendidos habilitados no fstab. getfattr e setfattr são instalados e funcionam perfeitamente em ambas as máquinas localmente. No entanto, o unison (versão 2.40.102) não sincroniza atributos de arquivos estendidos por padrão.

Eu pesquisei e encontrei este postagem no blog com configurações de perfil que devem ativar a sincronização de atributos estendidos. Então, eu mudei meu perfil, e agora parece algo assim:

root=/path/to/dir
root=ssh://[email protected]//path/to/dir2
auto=true
batch=true
perms=0
rsync=true
maxthreads=1
retry=3
confirmbigdeletes=false
copythreshold=0
copyprog = rsync -aX --rsh='ssh -p 22' --inplace --compress
copyprogrest = rsync -aX --rsh='ssh -p 22' --partial --inplace --compress
copyquoterem = true
copymax = 1

Este perfil sincroniza atributos estendidos para novos arquivos, mas quando eu altero os atributos estendidos em um arquivo que já foi sincronizado e executei uníssono, obtenho:

Nothing to do: replicas have not changed since last sync.

Tudo o mais sincroniza perfeitamente, mas o uníssono não tem conhecimento das alterações nos atributos estendidos. Eu também tentei desabilitar o fastcheck, esperando que ele verificasse os arquivos em mais detalhes; não funcionou. Eu tentei rsync'ing em uma direção e funcionou perfeitamente. Mas eu preciso de sincronização bidirecional, então estou preso ao uníssono.

Examinei o manual oficial, mas ele menciona somente os atributos de arquivo estendidos. Então, minha pergunta é a seguinte: isso pode ser feito em uníssono? Estou sentindo falta de algo simples aqui? Alternativamente, existem outras ferramentas de código aberto que podem alcançar isso? (Estou ciente do bsync e do bitpocket, mas nos meus testes preliminares eles também não percebem alterações de atributos de arquivos estendidos).

    
por zero gravitas 13.09.2016 / 20:47

2 respostas

2

No caso de alguém encontrar o mesmo problema que no futuro - o uníssono não funciona com atributos de arquivo estendidos. Uma maneira de contorná-lo é o copyprog + copythreshold = 0 hack (veja o perfil na pergunta original), mas isso não resolve o problema de uníssono não notar mudanças nos xattr's. Como eu mencionei em um dos comentários, mesmo mudando o tempo de modificação do arquivo não vai fazer sincronização sincronizada uníssono do xattr. Não só isso, mas vai até mesmo apagar eles na próxima vez que o arquivo tiver seu conteúdo alterado.

A única maneira de obter sincronização bidirecional com atributos de arquivo estendidos é usar o bsync , alterá-lo adicionando -X flag para rsync arguments E altera o horário de modificação do arquivo.

Isso está longe de ser a solução ideal: alterar o tempo de modificação do arquivo, nenhum suporte ao Windows, dependência do Python 3, último commit no ano passado, etc., mas esse é o único software que eu descobri que faz o trabalho.

    
por 15.09.2016 / 00:57
0

Isso é provavelmente o que você já viu no manual, mas no muda desde 2.27 diz

Unison can sometimes fail to transfer a file, giving the unhelpful message "Destination updated during synchronization" even though the file has not been changed. This can be caused by programs that change ... the file's extended attributes without changing its modification time. It's not clear what is the best fix for this – it is not Unison's fault, but it makes Unison's behavior puzzling – ...

Parece que o Unison olha principalmente para a hora da modificação de um arquivo sobre qualquer outra coisa. A solução que eu tentaria seria atualizar o tempo de modificação de um arquivo logo após os atributos estendidos serem alterados, o que faria com que o Unison notasse uma alteração e sincronizasse o arquivo. Mas se isso é viável depende de como você está alterando os atributos estendidos.

Acho que poderia usar algo em inotifytools para detectar alterações nos atributos estendidos de um arquivo. Você poderia escrever um script que usa inotifytoos para assistir a todos os arquivos que você queria que o Unison sincronizasse e, em seguida, touch do arquivo sempre que uma alteração fosse detectada.

    
por 14.09.2016 / 16:59