Estratégia ideal de gerenciamento de arquivos para uma biblioteca distribuída em três computadores

1

O seguinte é um problema de gerenciamento de arquivos que gostaria de resolver no Linux. Não é exatamente um problema de controle de versão, e sim de sincronização entre computadores.

Situação

  • Existem três computadores (digamos A, B. C).

  • Esses computadores nem sempre estão ao mesmo tempo

  • Esses computadores podem ser rapidamente conectados uns aos outros usando o protocolo NFS

  • Normalmente, mas não estritamente, os computadores são usados com diferentes objetivos em mente.

  • Eu categorizei um grande número de arquivos (binários e texto simples) em três árvores de diretórios: dir-A, dir-B, dir-C. Como ponto de partida, essas três árvores estão em cada dos três computadores. Mais em detalhes

    • dir-A contém os documentos que eu geralmente manipulo quando uso no computador A;
    • dir-A também recebe backup no computador A somente;
    • A versão de dir-A no computador A deve ser a 'cópia principal'. As cópias homônimas nos outros computadores estão lá por conveniência e redundância.
    • Da mesma forma, para os outros dois pares de diretórios e computadores.

A propósito, a categorização do documento é muito boa porque eu posso recuperar rapidamente o diretório e os arquivos da linha de comando. Então, eu gostaria de manter a linha de comando e os scripts, em vez de recorrer ao software empacotado para gerenciar bibliotecas.

Intenção

A imagem fica mais complicada porque às vezes, ao trabalhar no computador A enquanto B e C estão desativados ,

  1. Eu recebo novos documentos ajustando as categorias em dir-B e dir-C, para que eu as armazene nas cópias locais delas;
  2. Eu poderia reorganizar o conteúdo de dir-B e dir-C localmente para melhorar a categorização. Isso se resumirá em criar, remover, renomear, mesclar subdiretórios, mover arquivos, excluir lixo e assim por diante.

No entanto, a intenção é que a 'cópia mestre' do dir-B (dir-C) tenha que residir no computador B (C). Assim, no momento escolhido, as modificações feitas no computador A precisam ser transferidas para o computador B (C).

Por fim, isso deve funcionar também ao contrário, quando edito cópias convenientes do dir-A em B e C.

Pergunta

Estou pensando na estratégia ideal para ter flexibilidade máxima com as restrições dadas. A tarefa 1 é um problema de sincronização simples (eu usaria rsync ), mas a tarefa 2 é mais complexa.

Por isso, pergunto-me

  • Existem ferramentas / utilitários no Linux que eu poderia usar para implementar as tarefas 1 e 2?
  • Como você resolveria isso?
  • O problema pode ser realmente resolvido?
  • Talvez eu deva descartar qualquer restrição para torná-la viável?
por XavierStuvw 13.05.2017 / 21:13

1 resposta

0

Isso não é totalmente um problema Unix / Linux, você pode fazê-lo com qualquer nível de sofisticação em qualquer sistema operacional.

Lemme reafirme seu problema:

  • { 1 } Você tem N computadores que podem ou não estar conectados um ao outro em qualquer momento, geralmente considerado como compreendendo 1 mestre e vários escravos
  • { 2 } Os recursos nesses computadores são dessincronizados ao longo do tempo, renomeados etc.
  • { 3 } Você trabalha em um computador por vez
  • { 4 } Você deseja sincronizar novamente os computadores

Solução:

{ 1 } indica que você precisa de um trabalho de reconciliação em lote em intervalos fixos quando pelo menos dois computadores estiverem conectados.

{ 2 } significa que você precisa rastrear renomeações, recategorizações, etc. para poder descobrir recursos correspondentes

{ 3 } leva a concluir que o registro autoritativo é encontrado comparando os tempos de modificação entre os computadores.

  • O pré-requisito principal para poder comparar os tempos das transações para localizar o registro mais recente e autoritativo é ter clocks precisos em todos os N computadores. NTP é seu amigo aqui.

  • O registro de modificação é fornecido pelo mecanismo inotify .

  • Decisão sobre o que mover onde pode ser tomada depois de identificar registros conflitantes nas N listas de arquivos. Eu recomendo o GNU datamash como um candidato inicial para essa tarefa.

  • A movimentação de arquivos é a tarefa mais fácil. rsync é versátil o suficiente.

Por fim, como não sou pago por isso, deixarei a tarefa rotineira de escrever os roteiros como um exercício para o leitor.

    
por 14.05.2017 / 00:02

Tags