Zerar a MBR (encher ela de zeros) se livra de qualquer praga que esteja no HD
Eu faço com um CD Live do Arch Linux. No meu caso, primeiro eu identifico o HD que quero zerar, com
fdisk -l
O resultado pra mim é
Perceba que eu deixei o "4096 bytes" em negrito, esse é o tamanho físico dos setores do meu HD. O 'dd' por padrão escreve nos setores com blocos de tamanho 512 bytes e isso leva quase 10 horas pra zerar meu HD inteiro, então se eu quiser zerar meu HD inteiro e acelerar o processo basta comandar o 'dd' pra usar setores de 4096 bytes (pareando com meus setores físicos), assim:
dd if=/dev/zero of=/dev/sda bs=4096
Pra zerar a MBR eu faço assim:
dd if=/dev/zero of=/dev/sda bs=512 count=1
Breve explicação sobre o DD:
dd é um apelido dado ao programa, pois ele pode destruir dados se usado incorretamente. (dd = data destroyer, ou "destruidor de dados")
if=/ especifica o arquivo/local de entrada. Pode ser qualquer arquivo (como uma foto JPG), pode até mesmo ser uma partição completa. Você pode copiar uma partição ou HD inteiro usando-os como entrada. Ex: if=/dev/sdX irá copiar todo o HD "X" para a saida que você desejar. Para copiar uma partição, basta usar o número dela como input, ex: if=/dev/sdX1. Substitua o sdX pelo seu HD já identificado, exemplo: sda
if=/dev/zero especifica que o arquivo de entrada é o arquivo /dev/zero, que é um arquivo cheio de "00000000" (por isso o termo ZERAR).
of=/ especifica o arquivo/local de saída. Pode ser qualquer arquivo (como uma foto), até mesmo uma partição ou HD completo.
Você pode copiar uma partição ou o HD inteiro usando-os como entrada e saída. Ex: if=/dev/sdX of=/dev/sdY irá copiar todo o HD X para a saída que você especificou, nesse caso sendo o HD Y.
if=/dev/zero of=/dev/sdX especifica que a entrada será "0000000" (zeros) e a saída será o HD X (o HD que você selecionar depois de identificar). O DD então preencherá a saída (HD X) com zeros, até que não haja mais espaço.
bs= especifica o tamanho do bloco, ou setor. O tamanho padrão dos setores que o DD escreve é de 512 bytes. Para tamanhos maiores, deve-se usar bs=tamanho-do-bloco, identificados com o comando "fdisk -l" (como lá em cima que expliquei).
count=1 vai logo depois do bs=512, e significa que apenas um setor (nesse caso, o primeiro) será escrito, e com tamanho de 512 bytes.
Então dd if=/dev/zero of=/dev/sda bs=512 count=1 vai encher o HD sda com zeros, com um bloco de 512 bytes.
EDIÇÃO:
Uma coisa importante é fazer BackUp da MBR assim que ela for criada, por questões de segurança, porque qualquer problema que der não precisa zerar ela e re-instalar o sistema (ou torcer pra que ele ache suas partições), é só restaurar o backup.
Pra criar um backup:
dd if=/dev/sdX of=/caminho-para-o-backup-da-mbr/mbr bs=512 count=1
Pra restaurar mais tarde:
dd if=/caminho-para-o-backup-da-mbr/mbr of=/dev/sdX bs=512 count=1
Para Zerar a MBR mas manter a tabela de partições para quando você quiser re-instalar o sistema mas não quer recriar as partições:
dd if=/dev/zero of=/dev/sdX bs=446 count=1
Assim só os primeiros 446 bytes são zerados, pois é ali que está o código mestre de boot, o resto é a tabela de partições.
Mais informações: http://www.linuxquestions.org/questions/linux-iniciante-8/learn-the-dd-command-362506/
https://wiki.archlinux.org/index.php/Master_Boot_Record#Backup_and_restoration