Archive for novembro \28\-02:00 2013|Monthly archive page

Copiando arquivos com erros na leitura

Dizem que a necessidade é a mãe da criatividade. Ela é também a responsável por acumularmos conhecimentos a cada problema enfrentado! Pois esta semana passei por mais uma destas situações.

Analisando os logs de um servidor Linux, encontramos problemas com alguns setores de disco. Sendo um disco ligado em RAID, tratamos de identificar o disco com problema (ou discos) e, por segurança, resolvemos migrar os dados para um outro conjunto de discos. Embora apenas  um dos discos tenha acusado erro, aparentemente os setores defeituosos se replicaram para o segundo disco (que ainda não descartamos estar com problemas também). Poderia não ser tão problemático se os setores defeituosos não estivessem no arquivo de uma máquina virtual, essencial para a empresa.

Murphy nunca nos deixa desamparados! :p

Tentamos fazer a cópia deste arquivo com problemas de diferentes formas (scp, rsync, cp) e em nenhum dos casos obtivemos sucesso. Como se tratavam de 200GB de dados, cada tentativa tomava um precioso tempo. Tomava mais tempo pelo fato de, ao identificar erros de setor, o disco gastar mais tempo tentando corrigir a leitura antes de acusar erro (o famigerado “Input/output error”) e interromper a cópia!

Nosso tempo se esgotando e a esperança de conseguir copiar o arquivo diminuindo. Foi então que resolvi buscar uma maneira de copiar o arquivo, ignorando os erros de leitura. Encontrei em [1] um método através do simples e prático dd. Agora era só esperar o tempo de cópia e torcer para que a máquina virtual subisse sem problemas.

Já era dia claro quando concluímos a cópia, testamos a máquina virtual e, aparentemente, a situação estava normalizada!

Para consultas futuras, deixo o comando utilizado aqui registrado:

$ dd if=arquivo_com_erro of=arquivo_novo conv=noerror,sync

Referências:

[1] Not a complete failure – Benoît Joossen – http://aeroquartet.com/wordpress/2012/06/06/how-to-copy-a-file-with-io-errors/