Unison: use sempre 'copyprog' para atualizações

0

Estou usando o Unison para sincronizar arquivos entre vários clientes. Cada cliente é idêntico, o que significa que sempre que um cliente atualiza um determinado arquivo, todos os outros clientes devem ser atualizados consequentemente.

Os arquivos são armazenados em um servidor de nuvem centralizado. Cada cliente tem acesso SSH não-raiz ao servidor de nuvem centralizado. Não há link entre os clientes.

É importante que a propriedade dos arquivos seja preservada. Por esse motivo, estou usando --rsync-path="rsync --fake-super" abaixo. Isso armazena o proprietário / grupo nos atributos de arquivo estendidos, portanto, a propriedade no cliente pode ser restaurada posteriormente durante a sincronização. Dito isso, se houver um método melhor para preservar a propriedade, sinta-se à vontade para nos informar, pois isso também poderá eliminar o problema abaixo.

Um snippet relevante da configuração é o seguinte:

copythreshold = 0
copyprog      = /usr/bin/rsync -avzX --rsync-path="rsync --fake-super" --inplace -e ssh
copyprogrest  = /usr/bin/rsync -avzX --rsync-path="rsync --fake-super" --inplace --partial -e ssh

Eu observo o seguinte comportamento:

  1. Quando um arquivo é criado , o rsync, conforme configurado em copyprog , é usado para transferir os arquivos.

    Isso é ótimo, porque agora o arquivo recém-criado tem o conjunto de atributos user.rsync.%stat (que mantém o proprietário / grupo) no servidor de nuvem. Uma sincronização consecutiva nos outros clientes preservará a propriedade.

  2. No entanto, quando o arquivo é atualizado , o rsync, conforme configurado em copyprog , não é usado. Acredito que o Unison faça alguma lógica de transferência interna personalizada.

    Isso não é tão bom, porque agora o atributo user.rsync.%stat é perdido no servidor da nuvem. Uma sincronização consecutiva nos outros clientes perderá a oportunidade.

É possível configurar o Unison de modo que copyprog também seja sempre usado para atualizações? A documentação menciona:

If you set copythreshold to 0, Unison will use the external copy utility for all whole-file transfers.

Infelizmente, nada é mencionado sobre atualizações.

    
por pbillen 11.09.2018 / 11:33

1 resposta

1

Eu reproduzi o problema que você vê e examinei a saída de depuração muito detalhada e o OCaml copy.ml código (não estou familiarizado com este idioma), mas não vi nenhuma razão óbvia para o motivo de não poder usar a configuração copyprog .

No entanto, esta edição de fevereiro de 2017 diz que copyprog só funciona para novos arquivos ( copyprogrest é para continuar uma copyprog interrompida). Uma correção para isso provavelmente também resolveria seu problema. Agora está marcado como um aprimoramento. Você pode postar um novo problema no seu caso de uso.

    
por 11.09.2018 / 18:55