terça-feira, 1 de junho de 2010

Corrigindo uma imagem ISO pelo rsync

Uma vez passei pela seguinte procedimento. Fiz o download de uma imagem ISO, gravei o conteúdo desta imagem em uma mídia DVD e apaguei o arquivo ISO de meu computador. Procedimento comum. Só que em um tempo depois precisei novamente desta imagem.

Tudo bem, usei o dd (diskdump) e fiz uma cópia 1:1 da mídia para um arquivo em meu HD, gerando uma nova imagem ISO. Esta nova imagem funcionou perfeitamente e decidi guardá-la caso precisasse novamente. Entretanto, ao verificar a assinatura digital percebi que o hash desta imagem, comparando com o fornecido pelo site o qual fiz o download, não era mais o mesmo.

Para não baixar novamente toda a imagem, usei a ferramenta rsync para apenas reparar o arquivo ISO. O rsync é uma ferramenta de cópia de arquivo remoto e local, que serve para sincronizar duas unidades de armazenamento, fazendo um espelho ou também para cópias de segurança. O rsync é famoso pelo seu algoritmo de transferência delta, o qual reduz a quantidade de dados transferidos pela rede enviando somente as diferenças entre os arquivos.

Para que o rsync funcione é necessário que o servidor de arquivos tenha o suporte ao protocolo rsync. Muitos servidores que fornecem imagens ISO de distribuições Linux trabalham também com este protocolo. Como um teste podemos usar o comando abaixo que mostra o conteúdo do diretório remoto:

rsync rsync://nome.do.servidor/diretório/

Para reparar a imagem, entre no diretório local no qual se encontra o arquivo ISO corrompido e execute um comando semelhante ao apresentado abaixo:

rsync -avc --stats --progress rsync://debian.las.ic.unicamp.br/debian-cd/5.0.4/i386/iso-dvd/debian-504-i386-DVD-1.iso .

O argumento "-a" usa o modo de arquivo, onde são preservados os atributos e permissões do arquivo. O argumento "-v" aumenta a verbosidade, junto com "--stats" que mostra uma estatística da transferência e "--progress" que mostra o progresso durante a transferência. O argumento "-c" faz com que o salto, percorrendo o arquivo, seja baseado no checksum. O ponto no final é porque o arquivo ISO local está no diretório atual, onde foi executado o comando, e possui o mesmo nome do arquivo remoto. O início do processo pode demorar um pouco pois o servidor precisa calcular o checksum do arquivo.

Não é todo servidor rsync que permite ou suporta o recurso de controle por checksum. Se o servidor não possuir então é necessário que o arquivo ISO local esteja com a data e hora diferente do arquivo remoto. Forçando assim uma checagem total do arquivo. O uso do comando "touch" pode resolver isto.

Adicionalmente pode incluir o argumento "-z", que usa uma compressão nas porções de dados para a transferência. Para mais informações consulte a página manual do rsync (man rsync).

Nenhum comentário:

Postar um comentário