-->

quarta-feira, 17 de fevereiro de 2010

Treediff: garantindo a integridade dos seus arquivos.

Eu já mencionei várias vezes o Treediff tanto aqui neste blog quanto em outros lugares, mas só agora arrumei disposição para criar um post sobre ele. Como o assunto é extenso e eu tenho pressa para publicar este post porque está "segurando" a publicação de outros, eu poderei editá-lo consideravelmente no futuro.

Explicando por alto, Treediff é um programa de comparação de diretórios. Nada de especial até aí, pois com essa finalidade existem programas aos montes. Porém Treediff tem características simples mas únicas (e relevantes para mim) que eu jamais encontrei juntas em nenhum outro software. Ele pode salvar "snapshots" na forma de arquivos ASCII de toda a estrutura do diretório analisado com data, hora, tamanho e CRC32 de cada arquivo. Esses snapshots podem ser usados a qualquer tempo para comparação com a mesma estrutura de diretórios ou qualquer outra supostamente semelhante.

Talvez fique mais fácil entender se eu explicar o que faço com ele:
  • 99% das vezes (nem sempre eu lembro) em que gravo um CD ou DVD, inclusive para clientes, gravo junto um snapshot de todo o seu conteúdo. Depois eu posso conferir o que foi gravado e ter certeza de que o conteúdo é 100% fiel ao que eu queria gravar. O primeiro teste eu sempre faço imediatamente após a gravação e assim me garanto contra qualquer susto provocado por gravador, software ou mídia quando um dia eu for precisar dos discos;
  • Também faço uma cópia do snapshot em outro lugar, porque caso eu perca a mídia eu saberei exatamente o que havia nela. E poderei comparar o snapshot com outras versões do mesmo conteúdo para saber exatamente o que preciso restaurar para reconstruir a mídia perdida. Isso é especialmente valioso com meus DVDs de drivers e ferramentas;
  • Eu faço snapshots de meus HDDs inteiros e deixo guardados. Se um dia eu desconfiar de uma possível infecção por file infector, posso comparar o conteúdo atual do drive com o snapshot para ter certeza. O conteúdo dos meus HDDs é mutante, claro, mas a ação de file infectors segue padrões do tipo: somente arquivos EXE estão diferentes, que são muito fáceis de flagrar quando se tem um snapshot;
  • Eu ando com um pendrive de 4GB (eu usava um DVD, mas é um saco manter atualizado) lotado dos programas e ferramentas mais usados, cuja integridade pode ser verificada em qualquer computador, porque ele carrega também o Treediff e seu próprio snapshot;
  • Quando eu troco o HDD e preciso mover meus dados, antes faço um snapshot da estrutura, copio os dados para o novo HDD e comparo a cópia com o snapshot. Só confio no novo HDD e apago a origem se estiver perfeito. Também faço um teste desse tipo ao trocar de placa-mãe. Mas a última vez em que eu flagrei dados corrompidos nesse teste ainda se usava drivespace/doublespace. A confiabilidade dos drives e interfaces atuais é fantástica; 
  • Eu posso pedir que alguém faça um snapshot de um disco que ele tem e me mandar por e-mail (dificilmente passa dos 100KB) para poder comparar com um disco meu;
  • Em teoria (ainda não precisei fazer isso) eu posso manter snapshots da partição de sistema e saber com certa facilidade se algo foi corrompido ou infectado. Isso só funciona, claro, com partições de sistema pequenas, organizadas e com o Windows Update desligado;
Eu gravo snapshots também nos DVD-Video, mas como o Nero 6.x (meu programa de gravação preferido) não permite que você adicione em um DVD-Video nada mais que os arquivos normatizados, me impedindo de colocar um snapshot no disco, eu só uso o ImgTool Burn (que não tem essa frescura) para fazer esse tipo de gravação.

Treediff é capaz de ler os headers de diversos compactadores (ZIP, RAR, ARJ, etc), assim você consegue comparar um certo grupo de arquivos com o que está dentro de um arquivo compactado sem precisar extrair o conteúdo.

O relatório do Treediff usa um esquema de cores muito fácil de entender para mostrar as diferenças:

Como o Treediff mostra a velocidade com que lê os arquivos e seu algoritmo é muito rápido, eu também o uso como ferramenta para medir a velocidade de HDDs. No exemplo abaixo o Treediff está lendo arquivos a 90MB/s.




Como usar, em poucas palavras

  • Para apenas criar o snapshot de uma estrutura, abra-a clicando em New Dir e depois tecle CTRL+T. Terminado o processo, salve com File Set -> Save New set as Snapshot.
  • Para comparar, use os botões correspondentes no topo da janela. Você precisa abrir um "New...", um "Old..." e depois clicar em Diff.

Configurações
(por alto)

Options - Status: É assim que configuro o meu. Selecionar Checked Move FIles fará com que Treediff tente encontrar arquivos que foram movidos, mas isso pode retardar muito operações se o número de arquivos for muito grande (dezenas de milhares).



Options - Scanning : O meu fica configurado desse jeito. É importante sempre selecionar System Files, Hidden Files e Hidden Directories, porque não é default. Quando eu quero uma comparação rápida, só para ver se dois diretórios estão sincronizados, eu desmarco Calculate CRC, porque isso acelera muito a comparação. Mas normalmente eu mantenho selecionado. Note que em Include filemask você pode pedir a Treediff para comparar apenas um tipo de arquivo. Isso é útil para procurar pela ação de file infectors.



Você também pode configurar "ferramentas" para rodar nos resultados. No exemplo abaixo, eu configurei o Treediff para rodar meu programa MyBinComp para analisar byte-a-byte os arquivos reportados como diferentes. Para evocar o programa configurado aqui basta clicar sobre a linha onde houve uma diferença e teclar CTRL+U.


Exemplos de status

Comparação perfeita. Existe um "inserted" no exemplo abaixo, mas isso ocorre por causa da minha adição do snapshot na mídia depois de ter feito o snapshot (obviamente).


Problema com datas. Note que Identical é zero, mas Differs também é. Como é altamente improvável que todos os 12054 arquivos tenham sido atualizados mas não sejam diferentes, você provavelmente está com uma timezone configurada incorretamente.

Inserted praticamente igual a deleted: Você pode ter renomeado uma pasta e Treediff considera que são duas coisas diferentes.



Todo programa concorrente do Treediff que eu já testei tem um ou mais dos seguintes problemas:
  • Compara, mas não salva snapshot;
  • Se faz snapshot, usa um formato proprietário (Beyond Compare) que além de não poder ser verificado/editado com o Notepad (às vezes é útil fazer isso) me deixa com a preocupação de que um dia eu não possa mais ler minhas centenas de snapshots. O formato do Treediff é tão fácil de ler que tenho planos (que empurro com a barriga há anos) de criar minha  própria versão do programa, com alguns recursos extras.
  • Quer salvar um snapshot por arquivo ou por diretório. Sem a opção de salvar um apenas por estrutura;

Problemas que você pode encontrar:

  • Treediff pode ter problemas com arquivos de mais de 4GB;
  • Se o Treediff reportar que os arquivos apresentam uma diferença de 2s nos horários, isso se deve à granularidade do campo de 16bits que armazena a informação de data/hora no sistema de arquivos (acho que só ocorre em FAT/FAT32). É normal e pode ser ignorado. Inclusive me parece que a versão mais recente do Treediff leva isso em conta, porque faz muito tempo que não encontro esse problema.
  • Se o Treediff reportar uma diferença consistente, precisa e inesperada de uma ou mais horas (até os segundos batem, mas as horas não) em todas as datas, verifique se a TimeZone do seu Windows está correta (GMT-3, geralmente);
  • É incomum, mas normal que o Treediff acuse diferenças inesperadas em arquivos IFO e BUP (e somente nesses) de DVD-Video gravado em casa:


Nota: Para quem não sabe, arquivos BUP são BackUPs dos respectivos arquivos IFO. Uma salvaguarda do padrão DVD-Video porque um erro neles pode ser catástrófico para a exibição.

Não é culpa da mídia. Não importa quantas vezes você regravar, Treediff vai acusar o mesmo erro. E note como o CRC32 de cada BUP continua idêntico ao do respectivo IFO mesmo na versão alterada. Isso indica modificação deliberada e não corrupção ou erro de leitura. Depois de muito apanhar com esse problema eu cheguei à conclusão de que o programa de gravação automaticamente corrige alguns pequenos erros de autoração (realocação) antes de gravar. Isso acontece com uma pequena fração dos discos e sempre quando eu estou usando o ImgTool Burn.

Limitações (e aperfeiçoamentos que gostaria de fazer).
  • A versão shareware manipula uma quantidade praticamente ilimitada (supostamente, 260 milhões) de arquivos, mas só exibe no relatório dois ou três mil. Na janela de status as diferenças são contadas corretamente, mas você pode não ser capaz de ver que arquivos são diferentes. Filtros também são desligados quando existem mais de 2317 arquivos. Snapshots são salvos e comparações são feitas com todos os arquivos, felizmente.
  • Você não pode comparar usando apenas um ramo de um snapshot. Assim se eu tiver o snaphot de um HDD inteiro e quiser verificar a integridade de um diretório eu até posso, mas Treediff vai acusar a falta de todos os outros arquivos. E pode ser difícil separar isso. Ou até impossível, se forem muitos arquivos e você estiver usando a versão shareware; 
  • Edit: Não tem sinalização sonora para quando uma tarefa termina. 

Alguma coisa não ficou clara? Comente. A clareza deste post é importante porque vou apontar todos os meus links referindo-se ao Treediff para ele. E vou fazer mais nos próximos dias. Edit: como este, no Sete Problemas.

22 comentários:

  1. Muito bom o post.

    Mas, já que perguntou, não achei clara a questão das licenças. Há uma versão freeware? A versão shareware é limitada porque não está registrada? Ou há uma versão "premium" sem esses limites?

    Qual a licença a que se referiu nos exemplos deste post (isto é, a que você usa)?

    Bom, se o programa tem uma versão shareware, então pouco provavelmente seria open source; como pretende fazer os aperfeiçoamentos?

    ResponderExcluir
  2. Sony,

    "Há uma versão freeware?"

    Não

    "Há uma versão "premium" sem esses limites?"

    Sim. PRO. Custa US$60

    "a que você usa"

    A versão shareware. Vivo convivendo com as limitações para ver se um dia me animo a criar minha própria solução.

    "como pretende fazer os aperfeiçoamentos?"

    Como Treediff salva em ASCII eu posso criar um programa para rodar em conjunto com ele. Como também posso criar outro programa que o substitua nas funções que me interessam. Eu já tenho o esqueleto desse programa feito há muito tempo, mas não me animo a trabalhar nele.

    ResponderExcluir
  3. Para teste de integridade adoto o HashCheck, é bem prático de usar e posso criar arquivos de verificação individuais ou "coletivos".

    ResponderExcluir
  4. Anônimo. Gostei do HashCheck. Mas não encontrei nele a flexibilidade que tenho no Treediff. Por exemplo, eu não posso mover o snapshot para qualquer lugar que eu queira. Outro problema é que ele grava o hash como MD5 e eu acho muito mais prático que isso seja em CRC32. Essas novas formas de hash são ininteligíveis para humanos e o ganho na segurança para mim é questionável.

    ResponderExcluir
  5. Este comentário foi removido por um administrador do blog.

    ResponderExcluir
  6. Jefferson, sobre o primeiro problema realmente só editando o arquivo (quando preciso fazer isso utilizo o VIM que possui ótimos recursos para tal).

    Sobre o segundo: o HashCheck grava CRC32, ele trabalha com CRC32, MD4, MD5 e SHA1, basta escolher na hora de criar o arquivo.

    ResponderExcluir
  7. Muito bacana a indicação =)
    Gosto muito (sou fã) do Araxis Merge
    http://www.araxis.com/merge/
    Pena o preço meio salgado..
    Ele apresenta os resultados de comparação de forma muito clara e permite gerar relatórios com detalhes sobre a comparação.
    Outra opção é o Beyond Compare (muito parecido com o winmerge) no entanto nunca me acostumei com ele(a forma como ele apresenta o resultado da comparação não me agradam - similar ao winmerge).

    ResponderExcluir
  8. Olá Ryan,

    Ainda não terminei de ler todo o seu post, mas instalei o TreeDiff pra aprender a mexer e ia acompanhando o seu post com ele aberto, mas logo de início esbarrei com esse probleminha no Win Vista: http://img718.imageshack.us/img718/7686/sstreediffproblemwinvis.jpg

    Esses botões escondidos, que não dá pra ler. Claro q não é nada grave, mas nem cliquei em nada a partir daí, vim ver se tinha solução pra isso.. Tentei redimensionar a janela, ativar o modo compatibilidade com WinXP e nada.. Será que não tem mesmo jeito de usá-lo no Vista? =/ E no Seven, sabe se acontece isso?

    Vou instalar o Seven numa VM aqui pra ver se rola.. Agradeço qq dica.

    ResponderExcluir
  9. É assim mesmo. Ocorre no Vista e no Seven, mas não impede o uso do programa. Basta você lembrar o que vai escrito em cada botão (veja no XP) e clicar no pedacinho que dá para ver.

    Já estou tão acostumado com isso que não me lembrei desse detalhe ao escrever o post.

    ResponderExcluir
  10. @NicKFeiO,

    Não consegui ver a imagem, mas se a janela está "pequena" demais para mostrar tudo, você pode tentar usar o WinSuperMaximize, que maximiza a janela ativa.

    ResponderExcluir
  11. Não sei se adiantaria Sony Santos, pq o problema não é o tamanho da janela, ele é ajustável, mas sim que a janela "corta" em cima dos botões. Difícil explicar, veja a imagem, chequei aqui e o link tá correto, tenta novamente.

    Obrigado aos 2

    ResponderExcluir
  12. @nickfeio Consegui ver a imagem. Pelo jeito sempre comerá os botões, pq foi feito p/ XP e no Vista a borda é grossa e come espaço interno.

    Tem como diminuir essa borda: Painel de Controle -> Personalização -> Cor e aparência da Janela -> Abrir propriedades de aparência clássica -> Avançado -> Preenchimento da Borda -> Tamanho = 0.

    Tente e depois diga se funcionou, isto é, se agora dá pra enxergar os botões. :)

    ResponderExcluir
  13. Estou usando agora o TreeDiff e tô gostando bastante. Mas realmente é uma pena as limitações da versão shareware, pq eu queria visualizar todos os milhares de arquivos da comparação. A gambiarra pra isso é fazer a comparação aos poucos, de subdiretório em subdiretório.

    Mas qual seria uma alternativa, se possível freeware, para esse ótimo programa? E em Linux o que vcs usam/usariam?

    Ah Jefferson, quando só alguns arquivos .EXE e uns poucos videos .AVI e .WMV dão CRC diferente, mas todo o resto está perfeito, e vários outros arquivos também .EXE estão idênticos, nos mesmo diretórios, o que pode ser q causou essa diferença de CRC nos EXE, AVI e WMV? Tem algum "teste posterior" pra eu fazer e descobrir pq essa diferença, ou entender o q é ela? Se puder explicar agradeço muito!

    Valeu pela dica, treediff é MUITO bom!!

    ResponderExcluir
  14. Arquivos EXE diferentes é suspeitíssimo. Se não foram atualizados, podem estar infectados.

    Arquivos AVI e WMV se com CRC diferente mas tamanhos iguais isso *pode* ser porque alguma informação foi gravada no arquivo. Mas também pode ser corrupção.
    Em condições ideais NADA dá diferençade CRC.

    Quanto a uma alternativa freeware, estou trabalhando em uma, mas ainda tem bugs demais para fazer um release.

    ResponderExcluir
  15. Ah Sony, esqueci de te responder, mas não tentei mais usar no Vista, tô usando ele no XP.

    E acrescentando ao meu último comentário, acabei de ver nessas comparações que tô fazendo, também arquivos .MPG e .MPEG alterados em CRC. Ou seja, só executáveis e videos estão diferentes até agora, e mesmo assim não são todos! O que pode ser isso galera?

    ResponderExcluir
  16. Esse lance que vc citou dos de vídeo pdoerem ter informação gravada, realmente procede, pq em um outro diretório cheio de MP3 algumas estavam dando CRC diferente, mas ali no caso eu sabia que era alterações q eu tinha feito na ID3TAG das músicas... O WMV parece que também tem algo do tipo.

    Enfim, o que vc faria no meu caso pra tentar descobrir o que aconteceu com esses .EXE de CRC diferentes? Não faço questão deles, a cópia "new" é mais confiável, mas ficou a curiosidade.

    Desculpa usar tanto a sessão de comentários do blog, vc tem alguma canal de dúvidas ou coisa do tipo?

    []s

    ResponderExcluir
  17. Nickfeio,

    Sobre o "teste posterior", leia isto aqui

    ResponderExcluir
  18. Já quanto aos EXE diferentes não existe um método padronizado de análise. Mas para quem conhece a estrutura de um EXE o mapa desenhado por MyBinComp pode dizer se pode ser um vírus (não dá para distinguir de uma atualização, entretanto) ou se é uma simples corrupção do arquivo.

    ResponderExcluir
  19. Hum, muito interessante, vou testar o MyBinComp assim que tiver tempo.

    E anote aí nas suas sugestões de melhoria pro TreeDiff: um atalho do teclado pra abrir a caixa de diálogo "Status". Não sei pq diabos o TD não tem esse atalho, já que o Status é algo que o usuário pode querer fechar/abrir alternadamente enquanto examina a lista dos arquivos comparados (pelo menos eu tenho feito bastante isso, vejo status, vejo os arquivos, volto ao status, etc.)

    E repara Jefferson, que no menu Action, das 4 primeiras ações ali principais só o Status não tem esse atalho. Vai entender.

    []s

    PS: ainda uma pequena dúvida, o KB/s que aparece durante a verificação do TD é confiável como indicador da velocidade do HDD? Pq uma coisa estranha aqui na minha máquina é que em grandes transferências de arquivo, no Windows Vista por exemplo, a velocidade sempre ficava na média de 30MB/s, e com o tempo caía mais que isso, já chegando até a 15MB/s que é o minímo que eu lembro agora. Sendo que os HDDs são sata2 e isso ocorre tanto na cópia interna de um deles, quanto transferindo de um pra outro.. Eu achava que a culpa era do SO, mas usando TreeDiff e no Windows XP, a velocidade na hora da comparação tem iniciado com a média estável de 90MB/s, mas às vezes com o tempo caindo bastante e chegando a 30MB/s. Enfim, vc já usou TreeDiff com HDDs SATA? Só pra saber desses valores.

    Obrigado Jefferson Ryan.

    ResponderExcluir
  20. Sabe de algum que verifica ISOs sem precisar testar todos os Bytes do arquivo?
    Que nem o Winrar faz com arquivos RAR corrompidos ao abri-los: já exibe um aviso de erro.

    ResponderExcluir
    Respostas
    1. Isso é *impossível* até mesmo no caso do Winrar. Este só pode dar avisos imediatos para corrupções evidentes como, por exemplo, o tamanho do arquivo não bate com o que está gravado no header. Para as não evidentes ainda é preciso analisar todo o arquivo. Você nunca viu o Winrar dando erro durante a extração, dizendo que o arquivo armazenado "tal" está corrompido? O arquivo está corrompido porque o RAR foi corrompido.

      Excluir
    2. Valew pela informação. Meus arquivos estão em um serivdor, esse daqui: http://l.bitcasa.com/quQQnYQZ (link de referencia, rsrs)
      e não tenho condições para baixar as ISOs inteiras... eu montei umas de uns filmes em DVD com o UltraISO e a pasta de audio ficou vazia... :/.....

      Esses arquivos se corrompem porque o remote upload dele tem um bug que faz com que o arquivo fique como completo, com tamanho correto e tudo, caso a fonte do arquivo ou ele mesmo se desconecte... E essas corrupções são evidentes, logicamente.... então quanto a compactados, apenas abrir já indica esse problema.

      Mas e quanto a Arquivos .avi, .mkv, .flac, .mp3 e .mp4? Basta apenas abrir no Media player classic, para ver se roda e verificar o tempo total? Porque parece que ele carrega algumas informações antes de começar a correr o arquivo.

      Excluir

Siga as regras do blog ou seu comentário será ignorado.