Como não encontrei uma ferramenta que faz o que eu quero, comecei a fazer o meu próprio:
- EDITAR
Depois de desenvolver essa ferramenta, aprendi sobre git-annex que é diferente do que eu pretendia, mas é uma solução ideal, no entanto.
EDIT: esclarecer contexto
Eu tenho vários sistemas de arquivos pouco sincronizados em máquinas diferentes. (alguns conteúdos são redundantes, outros não, as coisas são movidas manualmente pelos usuários). Estes são grandes conjuntos de dados científicos (muitas dezenas de terabytes); Eles se movem entre clusters, dependendo do tipo de trabalho que realizamos neles. Eles não têm uma convenção de nomenclatura padrão (os arquivos às vezes são renomeados à medida que os vários experimentos são executados ou quando subconjuntos de arquivos são selecionados ou mesclados).
Gostaria de encontrar uma ferramenta que me permita encontrar com eficiência a redundância em sistemas de arquivos remotos, para que possamos excluir dados redundantes e copiar dados não redundantes ao descomissionar blocos de armazenamento. (Nota: sistemas de arquivos distribuídos como o Ceph prometem lidar com esses casos; essa será a rota futura, mas agora temos que lidar com o sistema existente como está)
Como muitos objetos foram movidos e renomeados à mão, não posso confiar em seus nomes de arquivo para comparar com diff ou rsync. Eu prefiro usar uma soma de verificação de criptografia como sha256 para identificar meus arquivos de dados.
Eu não quero verificar todo o conjunto de dados toda vez que eu executar uma comparação. Os arquivos, uma vez criados, provavelmente não serão alterados com frequência, portanto, as somas de verificação devem ser armazenadas em cache.
Existe uma ferramenta existente para fazer isso? Talvez algo que armazene uma soma de verificação em um Atributo Posix Estendido (usando o registro de data e hora para verificar o frescor da soma de verificação), e uma ferramenta que possa extrair essa informação para eficientemente diferenciar o conteúdo dos sistemas de arquivos, sem se preocupar com os nomes de arquivos?
Não tenho conhecimento de uma soma de verificação no nível do sistema de arquivos; você poderia criar scripts (ou manuais) usando md5sum e armazená-los em um arquivo de texto para comparação, e há portas do md5sum para múltiplas plataformas.
Se forem arquivos grandes, você pode considerar a configuração de um sistema que permita aos usuários duplicar dados usando o bittorrent; ele possui uma forma integrada de dados de soma de verificação e, se você tiver vários locais que armazenam os arquivos, você obtém benefícios adicionais ao não carregar um ou dois sistemas com transferências.
Você pode querer considerar a alteração de uma política sobre como os dados estão sendo duplicados ou movidos, se você estiver gerenciando os sistemas ou dados; isso provavelmente resultaria em você perder menos cabelo se algo desse errado, e seus usuários podem agradecer se algo acontecer e "desta vez" os dados não tiverem sido copiados por Bob no corredor. Você não precisa fazer nada muito elaborado se estiver trabalhando em uma infraestrutura existente; até mesmo alguns servidores executando um rsync periódico pela rede (que também seria relativamente rápido, já que transfere apenas alterações em arquivos grandes ao transferir redes, não muito se achar que é um arquivo local) criará arquivos sincronizados.
Eu alertaria que a duplicação de arquivos como essa e o uso de somas de verificação não são tecnicamente um backup; é uma duplicata. Backups significa que quando seu arquivo mestre está corrompido, você pode "reverter" para uma versão anterior (querer configurar algo semelhante ao CVS para verificar seus arquivos de dados grandes? ...) enquanto a duplicação, mesmo com somas de verificação, significa que o original está corrompido (exclusão acidental, setor defeituoso na unidade, etc.) que a corrupção será copiada, soma de verificação e tudo, para suas duplicatas, tornando-as inúteis. Você vai querer planejar esse cenário.
Talvez você possa usar o rsync com a opção --dry-run (-n). Ele tentará copiar (mas sem fazer nada) e você verá as diferenças. Há muitas opções de filtragem (timestamps, proprietário e muito mais) para definir exatamente o que você deseja.
Alguém já mencionou "rsync".
Se você pode montar o 2º sistema de arquivos na 1ª máquina, você pode tentar executar "diff -r / localfs / remotefs" e ver as diferenças.
Você também pode tentar algo como tripwire ou AIDE para capturar uma árvore e compará-la com a outra.
Dependendo do tamanho do conjunto de dados em questão, você pode considerar o uso do git ou de algum outro programa de controle de versão eficiente para obter "instantâneos" periódicos (adições e confirmações automáticas) para rastrear alterações. Você pode até mesmo sincronizar mudanças específicas de uma máquina para outra usando este método se você configurá-lo corretamente.
Para desduplicação, o programa "fdupes" funciona bem.