Como funciona mkfs -c

Como funciona mkfs -c

Eu tenho uma unidade de 3 TB com defeito. Há muitos blocos defeituosos, mas ainda tem cerca de 2,6 Tb de espaço utilizável e eu gostaria de utilizá-lo para armazenamento de lixo (músicas, vídeos, etc.). A princípio me deparei com o manual de um cara. Ele cortou o disco em várias partições e depois criou JBOD (apenas um monte de discos) RAID (se você estiver interessado, há um link (russo): https://habr.com/ru/post/252211). Mas alguém nos comentários desse artigo mencionou que o mesmo pode ser feito pelo próprio mkfs com a tecla '-c'. E agora me pergunto, como isso funciona? Sim, existe uma página de manual que nos diz:

-c Verifique se há blocos defeituosos no dispositivo antes de criar o sistema de arquivos. Se esta opção for especificada duas vezes, um teste de leitura e gravação mais lento será usado em vez de um teste somente leitura rápido.

Existe um artigo do arch wiki que diz quase a mesma coisa. Ele verifica se há blocos defeituosos no dispositivo e depois? Pessoas aqui e ali na Internet dizem que isso marca blocos defeituosos e o sistema operacional não os utiliza. Como posso verificar isso? Existe algum utilitário que mostre blocos marcados para uso posterior (criação futura de partições, talvez)?

Responder1

É verdade man mkfs.ext4( man 8 mke2fs) diz o que você citou:

-c
Verifique se há blocos defeituosos no dispositivo antes de criar o sistema de arquivos. Se esta opção for especificada duas vezes, um teste de leitura e gravação mais lento será usado em vez de um teste somente leitura rápido.

Mas também há -l:

-l filename
Leia a lista de blocos defeituosos do nome do arquivo. Observe que os números de bloco na lista de blocos inválidos devem ser gerados usando o mesmo tamanho de bloco usado por mke2fs. Como resultado, a -copção mke2fsé um método muito mais simples e menos sujeito a erros de verificar se há blocos defeituosos em um disco antes de formatá-lo, pois mke2fspassará automaticamente os parâmetros corretos para o badblocksprograma.

Então vamos investigar man 8 badblocks:

Nota importante: Se a saída de badblocksfor alimentada nos programas e2fsckou mke2fs, é importante que o tamanho do bloco seja especificado corretamente, pois os números dos blocos gerados dependem muito do tamanho do bloco em uso pelo sistema de arquivos. Por este motivo, é altamente recomendável que os usuários não executem badblocksdiretamente, mas sim utilizem a -copção dos programas e2fscke mke2fs.

Ele menciona e2fsck(também fsck.ext4conhecido como ext4), então vamos verificar man 8 e2fsck[ênfase minha]:

-c
Esta opção faz com e2fsckque badblocks(8)o programa faça uma varredura somente leitura do dispositivo para encontrar quaisquer blocos defeituosos.Se algum bloco defeituoso for encontrado, ele será adicionado ao inode do bloco defeituoso para evitar que seja alocado em um arquivo ou diretório.Se esta opção for especificada duas vezes, a verificação do bloco defeituoso será feita usando um teste de leitura e gravação não destrutivo.

E como mke2fse e2fsckfazem parte do mesmo kit de ferramentas, euesperar -cfuncionar mke2fsda mesma maneira, apesar de sua descrição não indicar isso explicitamente.

Então, para verificar blocos defeituosos, o sistema de arquivos conhece o uso dumpe2fs. De man 8 dumpe2fs:

-b
imprima os blocos que estão reservados como ruins no sistema de arquivos.

(créditos paraesta resposta).

Observe que é o sistema de arquivos que armazena as informações. Para usá-lo em sistemas de arquivos futuros, você precisa salvá-lo antes de destruir o atual. E se você alterar a tabela de partição ou escolher um tamanho de bloco diferente para um novo sistema de arquivos, precisará recalcular os números.

informação relacionada