Limpe os últimos 1MB de um disco rígido

24

Existe um comando fácil que eu possa usar para zerar os últimos 1MB de um disco rígido?

Para o início da unidade, gostaria de dd if=/dev/zero of=/dev/sdx bs=1M count=1 . A opção seek para dd parece promissora, mas alguém tem uma maneira fácil de determinar exatamente até onde devo procurar?

Eu tenho um dispositivo RAID de hardware, que armazena algumas das configurações RAID no final da unidade. Eu preciso do dispositivo RAID para ver as unidades como não configuradas, por isso quero remover a configuração RAID sem ter que gastar o tempo para fazer uma limpeza completa das unidades. Eu tenho uma dúzia de drives de 2TB, e um apagamento completo de todas essas unidades levaria muito tempo.

    
por Zoredache 26.05.2011 / 20:26

5 respostas

20

A maneira mais simples de o Linux obter o tamanho do disco é com blockdev --getsz :

sudo -s
dd bs=512 if=/dev/zero of=/dev/sdx count=2048 seek=$(('blockdev --getsz /dev/sdx' - 2048))
    
por 30.05.2011 / 17:30
6

O tamanho de cada partição está disponível em /proc/partitions . O comando a seguir mostra o tamanho de sdx (em unidades kB):

awk '$4 == "sdx" {print $3}' </proc/partitions

Assim:

dd if=/dev/zero of=/dev/sdx bs=1k count=1024 \
   seek=$(($(awk '$4 == "sdx" {print $3}' </proc/partitions) - 1024))
    
por 26.05.2011 / 23:16
3

Usar o seek para chegar ao final da unidade funciona muito bem, por exemplo:

seek=$((blockdev --getsz /dev/sda - 2048))

No entanto, quando você usa isso, recomendo que você saiba que seu valor de contagem está correto ou não o usa. A razão de eu dizer isso é que as unidades podem ter setores de 512 bytes ou setores 4k, e se você usar essa solução com uma unidade que tenha 4k setores, você não irá para o final da unidade com esse valor de contagem, e pode perder a informação RAID no final (eu encontrei isso).

    
por 06.12.2016 / 21:01
2

Você pode obter o número de setores no disco com hdparm -v /dev/sdx . Tente procurar number_of_sectors - 2048 (assumindo setores de 512 bytes).

    
por 26.05.2011 / 21:46
2

Você pode usar dd e obter o tamanho do dispositivo via fdisk :

dd if=/dev/zero of=/dev/sda bs=1k \
   seek=$(( ('fdisk -l /dev/sda | grep 'Disk /' | cut -d' ' -f 5' -1024*1024)/1024  )) count=1024

Eu não estou usando blocos de 1m para evitar erros de arredondamento.

Como alternativa, você pode escrever um pequeno programa-C (ou script) que invoque a função lseek com SEEK_END e um deslocamento negativo de 1mb e, em seguida, chame write .

    
por 27.05.2011 / 22:22