Linux verificar sectores danificados numa partição do disco rígido
Lidamos com computadores para vários fins no nosso dia a dia. Todas as nossas informações são guardadas em vários tipos de media, como Pens, cartões de memória, DVDs, discos rígidos e outros. Mas a maioria de nós hoje em dia ainda trabalha com discos rígidos mecânicos pois este tipo de hardware é normalmente barato e permite armazenar uma grande quantidade de informação. Todos nós colectamos informação que gostamos. Seja ela imagens, vídeos, email, contactos entre muitos outros tipos.
Os discos rígidos como qualquer outra media não duram para sempre, temos de alguma forma estar atentos a este facto se quisermos manter os nossos dados em condições. Os discos rígidos mais cedo ou mais tarde iram ficar com sectores danificados. As causas deste problema podem ser muitas, falhas de energia, pancadas, desgaste mecânico, entre outras.
A informação nos discos rígidos é organizada, com regras muito bem definidas. Ora vejamos a imagem:
Detectar sectores danificados o mais cedo possível é importante, para podermos evitar problemas de maior com perda de dados. Bem como evitar que os sectores danificados se alastrem no disco rígido caso tenhamos intenção de usar o disco mesmo com sectores danificados.
Os discos com sectores danificados podem ter uso desde que o sistema de ficheiros seja informado para não utilizar os tais sectores danificados. Claro que isto depende de todo da importância da informação. Em um servidor não é de todo aconselhado ter um disco com sectores danificados. Mas se for um disco que temos para guardar uns filmes ou para testar sistemas operativos Linux de preferência, é capaz de trabalhar ainda por mais alguns bons anos sem dar qualquer problema. Eu não estou apenas a falar de aqueles discos antigos que temos para lá num canto. Pode ser um disco com três anos que já perdeu a garantia e por um corte de energia gerou um ou mais sectores danificados.
O Linux tem todos os utilitários que nos permite detectar sectores danificados, bem como para informar o sistema de ficheiros que não os pode usar para guardar informação. Claro que o sistema de ficheiros tem que suportar, como é o caso do sistema ext4 que utilizo.
Atenção, eu não me responsabilizo pela má utilização destes comandos, use-os por sua conta e risco!
Ora vamos lá!
Para podermos fazer este tipo de tarefa as partições têm de estar devidamente desmontadas! Estes comandos têm de ser lançados por o utilizador root!
Para sabermos qual o disco rígido e a partição que queremos trabalhar podemos fazer:
# fdisk -l Disco /dev/sda: 500.1 GB, 500107862016 bytes 255 cabeças, 63 setores/trilhas, 60801 cilindros, total de 976773168 setores Unidades = setores de 1 * 512 = 512 bytes Tamanho do setor (lógico/físico): 512 bytes / 512 bytes Tamanho da E/S (mínimo/ideal): 512 bytes / 512 bytes Identificador do disco: 0x0006773d Dispositivo Boot Início Fim Blocos Id Sistema /dev/sda1 2048 282378239 141188096 83 Linux /dev/sda2 * 282378240 282583039 102400 7 HPFS/NTFS/exFAT /dev/sda3 282583040 405258239 61337600 7 HPFS/NTFS/exFAT /dev/sda4 405260286 976773119 285756417 5 Estendida /dev/sda5 405260288 410380287 2560000 82 Linux swap / Solaris /dev/sda6 410382336 641470226 115543945+ 83 Linux /dev/sda7 641472512 976773119 167650304 83 Linux Disco /dev/sdb: 60.0 GB, 60022480896 bytes 255 cabeças, 63 setores/trilhas, 7297 cilindros, total de 117231408 setores Unidades = setores de 1 * 512 = 512 bytes Tamanho do setor (lógico/físico): 512 bytes / 512 bytes Tamanho da E/S (mínimo/ideal): 512 bytes / 512 bytes Identificador do disco: 0x000b2234 Dispositivo Boot Início Fim Blocos Id Sistema /dev/sdb1 2048 117229567 58613760 83 Linux
O badblocks é um utilitário muito usado neste tipo de tarefa. A função dele é percorrer toda a partição e relatar os blocos de informação que encontrou com defeito.
Escolhemos a partição que queremos testar com o badblocks, no meu caso vou usar a partição /dev/sdb1. Pois sei que este disco e no final desta partição existe sectores danificados.
Para que o badblocks trabalhe com o tamanho correcto do bloco temos de analisar o tamanho do bloco que está a ser usado no sistema de ficheiros desta partição. Para isso usamos:
# dumpe2fs /dev/sdb1 | grep 'Block size' dumpe2fs 1.42 (29-Nov-2011) Block size: 4096
Caso queiramos só saber se a partição tem blocos danificados podemos executar este comando:
# badblocks -v -b 4096 /dev/sdb1 Verificando blocos 0 até 58613759 Verificando por blocos defeituosos (teste em modo de leitura): 57352148 done, 33:14 elapsed. (0/0/0 errors) 57352149 done, 33:35 elapsed. (1/0/0 errors) 57352150 done, 33:59 elapsed. (2/0/0 errors) 57352151 done, 34:22 elapsed. (3/0/0 errors) 57352912 done, 35:06 elapsed. (4/0/0 errors) 57352913 done, 35:30 elapsed. (5/0/0 errors) ...
O comando com estes parâmetros vai fazer um teste à partição escolhida por nós e escrever o resultado no terminal.
Caso queiramos então usar o disco mesmo com sectores danificados teremos de guardar os números dos blocos defeituosos num ficheiro, que utilizaremos mais tarde para verificar o sistema de ficheiros e informar o sistema de ficheiros quais os blocos que estão danificados. Também podemos utilizar o mesmo ficheiro mais tarde, quando por alguma razão queiramos formatar novamente esta partição. Assim evitasse perder muito tempo a verificar quais os blocos defeituosos pois já os temos em ficheiro. Usamos:
badblocks -v -b 4096 /dev/sdb1 > badblocks.txt
No ficheiro badblocks.txt temos então uma lista de blocos danificados que foram encontrados não partição. Para ver o seu conteúdo usamos:
# cat badblocks.txt 14338037 14338228 14338274 14338466 ... 14602175 14602282 14602520 14602711
Para verificarmos a integridade da partição e informar o sistema de ficheiros da lista de blocos danificados corremos o comando e2fsck com os seguintes parâmetros:
# e2fsck -l badblocks.txt /dev/sdb1 e2fsck 1.42 (29-Nov-2011) /dev/sdb1: Updating bad block inode. Passo 1: Verificando inodes, blocos, e os tamanhos. Passo 2: Verificando estrutura directory Passo 3: Checando conectividade com o directory Passo 4: Checando contagens de referência Passo 5: Procurando informações de resumo group /dev/sdb1: ***** O SISTEMA DE ARQUIVOS FOI MODIFICADO ***** /dev/sdb1: 11/3670016 files (0.0% non-contiguous), 277235/14653440 blocks
Como podemos ver pela linha “/dev/sdb1: Updating bad block inode” que o sistema tomou conhecimento dos blocos danificados.
Mais tarde se por alguma razão necessitarmos de reformatar esta partição podemos utilizar o mesmo ficheiro para informar os blocos danificados na altura da formatação, desta forma:
mkfs.ext4 -l badblocks.txt /dev/sdb1 mke2fs 1.42 (29-Nov-2011) Rótulo do sistema de arquivos= OS type: Linux Tamanho do bloco=4096 (log=2) Tamanho do fragmento=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 3670016 inodes, 14653440 blocks 732672 blocks (5.00%) reserved for the super user Primeiro bloco de dados=0 Máximo de blocos de sistema de arquivos=4294967296 448 grupos de blocos 32768 blocos por grupo, 32768 fragmentos por grupo 8192 inodes por grupo Cópias de segurança de superblocos gravadas em blocos: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424 Allocating group tables: pronto Gravando tabelas inode: pronto Creating journal (32768 blocks): concluído Escrevendo superblocos e informações de contabilidade de sistema de arquivos: concluído
O disco que utilizei para testar estes procedimentos é um disco Seagate Barracuda ATA, com cerca de treze anos, este disco tem 863 blocos danificados no final do disco. Costumo utilizar este disco para testes.
Não se esqueçam de comentar!