Estou tentando rodar badblocks
em 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 badblocks
utilitá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 badblocks
limitaçã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 badblocks
pode funcionar, você pode simplesmente executar badblocks
com valores diferentes para -b
e 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 512
para -b 1024
ou -b 2048
) até funcionar. Com isso você usa alguma resolução, mas é melhor que nada.
Você também pode usar ddrescue
neste ponto ou entrar em contato com o mantenedor badblocks
para corrigir o problema na próxima versão.