Como evitar que os dd ou badblocks apaguem os setores sobressalentes dos discos rígidos?

2

/! \ Procure pela Atualização 2 lá embaixo, a pergunta é meio respondida agora /! \

Às vezes, eu limpo completamente meus discos rígidos (não SSDs); sendo o que são, dd e badblocks -w limpam tudo cegamente.

A coisa é, eles também estão escrevendo setores sobressalentes de discos rígidos, o que é ruim, uma vez que todos eles são novos. Então, se algo acontecer durante o processo de apagamento (perda de energia, erros de gravação, etc), isso mataria um setor muito útil ... por nada.

Portanto, a pergunta é: Como evitar dd ou badblocks apagar setores sobressalentes de discos rígidos?

Suposições:

  • dd é conhecido por apagar cegamente tudo o que passa por ele.
  • badblocks é conhecido por poder acessar blocos não mapeados.

Atualização 1 :

dd definitivamente não pode acessar setores sobressalentes se eles não substituíram um setor defeituoso (obviamente). Isso se deve a como dd foi projetado (comentário de Kamil Maciorowski):

The logical sector numbers available to dd are mapped to numbered physical sectors and the corresponding numbers are initially equal. Spare physical sectors initially have no logical numbers assigned, so dd cannot reach them.

Atualização 2 :

Sendo principalmente um sysadmin - e não sendo um codificador "próximo ao de baixo nível" (C) -, alguém pode dar uma olhada no código badblocks 'e dizer se acessa setores sobressalentes? Para ser mais preciso, o badblocks também leva em conta setores sobressalentes dentro de sua leitura / escrita em bloco?

link

De outro lado / caminho para obter a resposta; Eu também sei que Theodore Ts'o, o mantenedor do badblocks ', tem uma conta aqui no Super User. Se ele ler esta atualização 2, é possível ter uma resposta direta sobre isso?

    
por X.LINK 13.02.2017 / 04:47

2 respostas

8

Nem dd nem badblocks é capaz de acessar setores sobressalentes de hardware de disco. A principal razão pela qual dd e badblocks não podem acessar esses setores sobressalentes é que os autores desses utilitários não sabem como e a natureza proprietária do hardware de disco rígido moderno e torna proibitivamente difícil descobrir.

Este Q parece ser baseado em uma confusão entre os sistemas de arquivos em nível de SO e o nível de hardware do fornecedor de discos SMART e remapeando rotinas. Uma visão histórica pode esclarecer as coisas ...

Primeiros fornecedores de hardware testaram discos antes do envio e imprimiram listas de blocos defeituosos na etiqueta. O administrador que instalou a unidade talvez usaria essa lista de blocos defeituosos ao formatar a unidade. (Os primeiros programas de formatação levavam ao usuário listas de blocos defeituosos, que o usuário digitaria à mão.) Se a unidade estivesse ativa há algum tempo, o administrador poderia reavaliar os blocos da unidade. De qualquer forma, o ponto dessas listas de bloqueio ruins era dizer ao sistema de arquivos para não usar esses blocos. O badblocks util parece ser projetado com esse tipo de disco rígido inicial em mente.

Os discos rígidos mais recentes incluem rotinas de remapeamento, bem como rotinas de diagnóstico, como o SMART, sendo que ambos equivalem a algo de um computador dedicado no disco rígido que verifica os blocos defeituosos e até mesmo remapeia os blocos defeituosos automaticamente. Funcionalidade maravilhosa, mas o que é ruim sobre o remapeamento de fornecedores é que todas as implementações são de código proprietário e fechado - portanto, os usuários não têm certeza do que estão realmente fazendo ou de não fazerem lá. O firmware de remapeamento / diagnóstico de um disco pode ter bugs, pode haver locais secretos no disco colonizados por espiões ou hackers, etc. Como o remapeamento no nível do disco (não no nível do SO), ele pode ineficientemente causar mais espancamentos e desgastes, (se algum arquivo ou região usado com frequência estiver em um ponto com setores remapeados).

    
por 23.02.2017 / 13:51
3

Por sua solicitação, dei uma olhada em badblocks.c e posso testificar que é um programa muito simples que não usa nenhuma função de disco avançada e não funciona no nível do controlador de disco.

Tudo o que ele faz é usar a função de abertura padrão do Linux para abrir a unidade uma dispositivo bruto (ou seja, como um arquivo virtual que inclui todo o dispositivo), aplicando a flag O_DIRECT para fazer I / O diretamente no disco sem passando pelos buffers de memória do Linux.

Em seguida, recupera o número de blocos no dispositivo bruto usando o função ioctl , um número que inclui apenas blocos / setores publicamente visíveis (sem setores sobressalentes), então itera a escrita e a leitura de um padrão para cada bloco / setor, usando as funções padrão do Linux de escreva e ler , relatar um erro se algum código de erro for retornado ou os dados não forem iguais.

As funções de abertura / leitura / gravação datam do início do Linux, quando os discos tinham uma estrutura muito mais simples e sem setores sobressalentes. Funções muito mais avançadas seriam necessárias para acessar qualquer dados do disco interno, como os setores sobressalentes indisponíveis por uso casual.

Como curiosidade, o comentário no início de badblocks.c diz:

* This file is based on the minix file system programs fsck and mkfs
* written and copyrighted by Linus Torvalds <[email protected]>

em que Minix é pré-datado do Linux ( link de histórico ) e cujas deficiências Na verdade, motivou Linus Torvalds a escrever a primeira versão do Linux. Isso é só para ter uma impressão de como a antiguidade e a falta de sofisticação é este programa. Certamente não toca nos setores sobressalentes.

Eu também analisei dd.c que é muito mais programa sofisticado que liga o driver de disco. Eu não estou familiarizado com a interface do driver de disco, mas parece-me que, mesmo que os setores sobressalentes pudessem ser modificados via interface, nenhum programador em sã consciência faria isso. Minhas razões são:

  1. dd pode gravar uma imagem de disco para e de um arquivo, e essa imagem não contém os setores sobressalentes (exceto quando mapeados), o que provavelmente significa que o dd não toca setores sobressalentes não mapeados.
  2. Os setores sobressalentes são usados para remapear setores defeituosos. Monkeying com eles significará que setores defeituosos serão desmarcados e novos dados copiados para setores tão ruins corrompido e perdido sem aviso prévio.
  3. O mapeamento de setores sobressalentes é exclusivo de seu disco, já que dois discos diferentes podem nunca tem exatamente os mesmos defeitos, então copiar ou limpar esse mapeamento não faz sentido.
por 26.02.2017 / 19:48