Eu tentei dormir. Embora seja bom (e tenha alguns recursos diferenciados úteis que possam torná-lo a melhor escolha para muitos), parece verificar a totalidade de todos os arquivos de destino em busca de somas de verificação.
O que é dolorosamente lento.
Outros programas, por outro lado, como rdfind e rmlint, digitalizam de maneira diferente.
O rdfind possui um recurso "experimental" para usar o refluxo btrfs. (E opções "sólidas" para links físicos, links simbólicos etc.)
O rmlint possui opções "sólidas" para btrfs clone, reflink, hardlinks regulares, links simbólicos, exclusão e seus próprios comandos personalizados.
Mais importante, porém, rdfind e rmlint são significativamente mais rápidos. Como em ordens de magnitude. Em vez de varrer todos os arquivos de destino em busca de somas de verificação, ele faz isso aproximadamente:
- Examine todo o sistema de arquivos de destino, reunindo apenas caminhos e tamanhos de arquivo.
- Remova da consideração arquivos com tamanhos de arquivo exclusivos. Isso por si só, economiza muito tempo e atividade do disco. ("Scads" é uma função exponencial inversa ou algo assim.)
- Dos candidatos restantes, verifique os primeiros N bytes. Remova da consideração aqueles com o mesmo tamanho de arquivo, mas com os primeiros N bytes diferentes.
- Faça o mesmo para os últimos N bytes.
- Somente o restante (geralmente pequena fração) restante, procura por somas de verificação.
Outras vantagens do rmlint que conheço:
- Você pode especificar a soma de verificação. MD5 muito assustador? Tente sha256. Ou 512. Ou comparação bit a bit. Ou sua própria função de hash.
- Ele oferece a opção de Btrfs "clone" e "reflink", em vez de apenas reflink. "cp --reflink = always" é apenas um pouco arriscado, pois não é atômico, não está ciente do que mais está acontecendo com esse arquivo no kernel e nem sempre preserva os metadados. "Clone", OTOH (que é um termo abreviado ... Estou ignorando o nome oficial relacionado à API), é uma chamada no nível do kernel que é atômica e preserva os metadados. Quase sempre resultando na mesma coisa, mas um pouco mais robusta e segura. (Embora a maioria dos programas seja inteligente o suficiente para não excluir o arquivo duplicado, se ele não conseguir primeiro fazer com que uma temperatura reflita para o outro.)
- Ele tem várias opções para muitos casos de uso (o que também é uma desvantagem).
Comparei o rmlint com o deduperemove - que também verifica cegamente todos os arquivos de destino em busca de somas de verificação. Duperemove levou vários dias no meu volume para concluir (4 eu acho), indo até o máximo. O fmlint levou algumas horas para identificar duplicatas e menos de um dia para deduzi-las com o clone Btrfs.
(Dito isto, qualquer um que se esforce para escrever e oferecer suporte a software robusto e de qualidade, de graça, merece muitos elogios!)
Btw: você deve evitar a deduplicação usando hardlinks regulares como uma solução de desduplicação "geral", a todo custo.
Embora os hardlinks possam ser extremamente úteis em certos casos de uso direcionados (por exemplo, arquivos individuais ou com uma ferramenta que possa verificar tipos específicos de arquivos que excedam um tamanho mínimo - ou como parte de muitas soluções de backup / captura de tela gratuitas e comerciais), pode ser desastroso para "desduplicação" em um sistema de arquivos grande para uso geral. O motivo é que a maioria dos usuários pode ter milhares de arquivos em seu sistema de arquivos, que são binários idênticos, mas funcionalmente completamente diferentes.
Por exemplo, muitos programas geram modelos e / ou arquivos de configurações ocultos (às vezes em todas as pastas que podem ver), que são inicialmente idênticos - e a maioria permanece assim, até que você, usuário, precise que eles não sejam.
Como uma ilustração específica: os arquivos de cache de miniaturas de fotos, que incontáveis programas geram na pasta que contém as fotos (e por boas razões - portabilidade), podem levar horas ou dias para serem gerados, mas tornam fácil o uso de um aplicativo de fotos. Se esses arquivos de cache inicial estiverem todos vinculados, depois você abrirá o aplicativo em um diretório e ele criará um cache grande ... então adivinhe: Agora, TODAS as pastas que possuem um cache vinculado anteriormente, agora têm o cache errado. Potencialmente, com resultados desastrosos que podem resultar em destruição acidental de dados. E também potencialmente de uma maneira que explode uma solução de backup que não reconhece hardware.
Além disso, pode arruinar instantâneos inteiros. O objetivo principal das capturas instantâneas é que a versão "ao vivo" possa continuar a mudar, com a capacidade de reverter para um estado anterior. Se tudo estiver vinculado juntos ... você "reverte" para a mesma coisa.
A boa notícia é que a desduplicação com o clone / reflink do Btrfs pode desfazer esse dano (eu acho - já que durante a verificação, ele deve ver os arquivos vinculados como idênticos ... a menos que tenha lógica para não considerar os links físicos. Provavelmente depende de o utilitário específico que está executando a desduplicação.)