Badblocks


[Home] [Dissertação] [Biba] [Linux] [Conjugue] [br.ispell] [axw3] [uplink]

Após gastar um bom tempo tentando fazer com que um disco de 2G pudesse ser usado apesar de uma surpreendente quantidade de cerca de dois mil bad sectors, acumulei algumas recomendações sobre o assunto:

1. BIOSes velhas conseguem fazer formatação low-level de discos novos, apesar da geometria não suportada (formatei esse disco de 2G usando uma velha motherboard 286 com BIOS AMI).

2. Mesmo que voce especifique um bad block na criação do filesystem (via opção -l do mke2fs), o kernel gerará mensagens de erro ocasionais relativas a esse bloco. A razão disso é o "read-ahead". Quando o kernel vai ler um setor, ele lê antecipadamente (por default) os sete seguintes, e um deles pode estar com problemas. Um modo de se evitar isso sem desligar o read-ahead (q.v. hdparm(8)) é marcar como ruins alguns blocos que antecedem o bad block. Note que alguns winchesters fazem o read-ahead independentemente do kernel.

3. A checagem de bad blocks feita pelo badblocks(8), ou por qualquer outra ferramenta, não é "perfeita", no sentido em que um bloco considerado bom por ele revele-se ruim durante o uso, porque o comportamento do bloco *depende* da informação gravada nele e na vizinhança dele. O badblocks(8) testa 4 padrões (q.v. badblocks(8)), mesmo que o bloco funcione com eles, poderá não funcionar com outros. Alterei o badblocks para ele usar também padrões aleatórios, se você quiser uma cópia mande-me um mail.

4. Na criação de um filesystem ext2 (ou FAT, via mkdosfs) voce deve especificar os bad blocks, e não os bad sectors. Por default os blocos são de 1024 bytes, por isso se no /var/log/messages surgir uma mensagem como

dma_intr: error=0x01 { AddrMarkNotFound }, sector=855714

lembre-se que o número do bloco será 855714/2, ou 427857.

5. Os blocos são numerados a partir de zero, de forma relativa à partição. O endereço "absoluto" do bloco deve levar em conta o total de blocos dos cilindros que antecedem a partição. Por exemplo, suponha a geometria CHS=4092/16/63. O bloco 1234 de uma partição que se inicia no cilindro 765 terá endereço absoluto 1234+(764*16*63)/2, ou seja, 386290. Na criação do filesystem, os bad blocks devem ser dados de forma relativa à partição.

6. A numeração dos blocos independe da geometria (CHS/LBA/LARGE/etc), mas é claro que o cilindro em que um determinado bloco reside depende.

7. Os fabricantes de winchesters costumam incluir nas suas páginas WWW informações físicas de seus produtos, como por exemplo o número real de cabeças. Isso pode ser útil para analisar a disposição relativa dos bad sectors na mídia.