O utilitário badblocks continua reportando “último bloco inválido”

O utilitário badblocks continua reportando “último bloco inválido”

Estou tentando rodar badblocksem uma unidade com uma única partição. A unidade contém um sistema de arquivos FreeBSD.

Eu inicializo usando uma unidade USB ativa do Linux. A unidade está desmontada. A saída de fdisk -lé:

   Device  Boot     Start          End    Id     System
/dev/sda1     *        63   976773167+    a5     FreeBSD

Então eu corro:

# badblocks -v /dev/sda1

E diz:

badblocks: invalid last block - /dev/sda1

Não consigo encontrar nenhuma informação útil sobre isso. Estou usando o badblocksutilitário corretamente aqui? Ou isso é uma indicação de que algo está errado com a unidade?

Responder1

Não, isso não é uma indicação de que algo está errado com a unidade. Você está recebendo este erro porque badblocks está aceitando /dev/sda1 como o argumento do último bloco em vez de aceitá-lo como o dispositivo.

A sintaxe da sua pergunta parece correta para mim. Tente especificar o argumento do último bloco após o dispositivo:
badblocks -v /dev/sda1 976773167

Se isso não funcionar, tente adicionar o primeiro bloco também:
badblocks -v /dev/sda1 976773167 63

Apenas para garantir que isso não indica que algo está errado com sua unidade, aqui está a saída quando adiciono um argumento inválido no último bloco "não":

sudo badblocks -v /dev/sdb1 nope
badblocks: último bloco inválido - não


Aqui está um exemplo do meu histórico do bash da última vez que usei badblocks (é necessário acesso sudo para acessar essas unidades em meu sistema):
sudo badblocks -v /dev/sdb1

Saída:

Verificando blocos de 0 a 976751967
Verificando blocos defeituosos (teste somente leitura):

Se eu cancelar o processo depois de algum tempo com Ctrl+C a saída será:

Interrompido no bloco 7470720

Aqui está a sintaxe para retomar o processo (veja man badblocks):
badblocks -v dispositivo [último bloco] [primeiro bloco]

O “último bloco” é o último bloco a ser lido no dispositivo e o “primeiro bloco” é onde a leitura deve ser iniciada. Exemplo:
sudo badblocks -v /dev/sdb1 976751967 7470720

Saída:

Verificando blocos 7470720 a 976751967 Verificando blocos defeituosos (teste somente leitura):

Responder2

O comando badblocks em hardware de unidade de disco moderno dificilmente vale o esforço atualmente. Isso ocorre porque a placa controladora do inversor identifica blocos defeituosos internamente e os substitui de blocos "sobressalentes" inicialmente alocados para substituição automática. Se você ficar sem esses blocos sobressalentes e estiver tendo problemas com blocos defeituosos, sugiro FORTEMENTE a substituição do disco, pois o hardware está com defeito.

Se você está procurando saber a integridade da unidade, a maioria das unidades modernas oferece suporte à interface da unidade SMART para relatar a integridade do disco. Existem muitos utilitários por aí que monitoram e apresentam essas informações sobre a integridade do disco. Experimente um destes.

Responder3

Você copiou seu comando de uma página da web. O traço foi substituído por algum caractere de traço diferente em -v. (um pouco mais longo que o traço normal) Digite o comando ou corrija-o de alguma forma.

Responder4

Se você estiver recebendo este erro apesar de usar a sintaxe correta e estiver usando discos grandes (por exemplo, vários TB) com tamanho de bloco pequeno (por exemplo, 512 bytes), então você pode estar enfrentando uma badblockslimitação de usar 32 bits para números de bloco.

Como solução alternativa, você pode usar um bloco maior. Para encontrar o tamanho mínimo de bloco que badblockspode funcionar, você pode simplesmente executar badblockscom valores diferentes para -be sem bloco inicial/final. Se você receber um erro como este

badblocks: valor muito grande para o tipo de dados definido bloco final inválido: deve ser um valor de 32 bits

tente aumentar o tamanho do bloco (por exemplo, -b 512para -b 1024ou -b 2048) até funcionar. Com isso você usa alguma resolução, mas é melhor que nada.

Você também pode usar ddrescueneste ponto ou entrar em contato com o mantenedor badblockspara corrigir o problema na próxima versão.

informação relacionada