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:
-
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.
-
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.