Como iniciar badblocks em uma parte especificada da unidade

3

Enquanto tentava dd os últimos blocos de um disco rígido Maxtor IDE de 200GB, tive o seguinte erro:

$ dd if=/dev/zero of=/dev/sdc bs=4M status=progress
203901894656 bytes (204 GB, 190 GiB) copied, 7283.07 s, 28.0 MB/s
dd: error writing '/dev/sdc': Permission denied
48621+0 records in
48620+0 records out
208223076351 bytes (208 GB, 194 GiB) copied, 8379.27 s, 24.8 MB/s 

Esse erro persistiu mesmo depois de tentar retomar dd com seek=48620 , em que 48620 é a quantidade de blocos a serem ignorados. Para determinar se esse erro é o resultado de setores defeituosos, gostaria de executar badblocks da mesma maneira, de onde dd falhou.

Isso se traduziria em um comando badblocks da seguinte forma:

badblocks -svw -b 4000000 -c 500000 -p 1 -o /cygdrive/b/badblocks.txt /dev/sdc 199148543 48620

... onde -b 4000000 equivale ao tamanho do bloco de 4M que usei quando inicialmente dd a unidade e 48620 é a opção first_block que especifica o primeiro bloco para badblocks partir.

No entanto, isso resulta em um dos dois erros. Ou o erro não fatal ...

badblocks: Invalid argument during seekrs)

... aparece durante a execução do comando ou um único erro fatal termina:

Segmentation fault (core dumped)

O erro acima também persiste mesmo quando -c está definido para um valor mais sã, como 2000 .

Além disso, quando eu desistir de tentar executar badblocks no bloco exato em que dd falhou e tente simplesmente aumentar a opção first_block para um número suficientemente alto:

badblocks -svw -b 4000000 -c 1000000 -p 1 -o /cygdrive/b/users/hashim/desktop/maxtorbadblocks.txt /dev/sdc 199148543 12345678 

... numerosas instâncias do seguinte erro aparecem sem quebrar o comando:

badblocks: Invalid argument during seekrs)  again get several get the same error.

Como posso iniciar badblocks em um local especificado na unidade e, assim, economizar uma quantidade enorme de tempo no tempo necessário para execução?

    
por Hashim 13.02.2018 / 05:19

1 resposta

3

Metade de uma resposta, (por enquanto), como por que falha.

Os comutadores nesta linha estão incorretos:

badblocks -svw -b 4000000 -c 500000 -p 1 \
          -o /cygdrive/b/badblocks.txt /dev/sdc 199148543 48620

O -b é para o tamanho do bloco, (quantos bytes em um bloco), que geralmente é um múltiplo de 512 , geralmente isso seria 1024 , < em> 2048 , ou 4096 . Um valor de 4.000.000 não é um múltiplo de 512 e é maior do que qualquer HDD atual usaria.

O -c é quantos blocos para testar por vez, que multiplicado pelo valor passado para -b fornece quantos bytes seriam lidos de cada vez - então -b 4000000 -c 500000 diz ao computador para ler 2.000.000.000.000 (dois trilhões) bytes por vez.

Ainda pior, o argumento 199148543 informa a badblocks que o sistema de arquivos contém pelo menos esses blocos e, como os blocos são definidos pela opção -b , badblocks considera que o sistema de arquivos contém pelo menos < em> 796,594,172,000,000 bytes, (ou 796TB , quase um Petabyte).

Como todo o disco é 200 GB , badblocks é interrompido e imprime uma mensagem de erro.

    
por 13.02.2018 / 08:48