Você pode tornar o dispositivo não inicializável simplesmente tornando 0x00 os primeiros bytes do disco.
Normalmente (e isso é verdade para o grub, grub2 e ntldr iirc), o primeiro byte da sua unidade será uma instrução x86 jmp. Isso ocorre antes mesmo do rótulo do disco, porque ao passar a execução para o dispositivo para inicializá-lo, ele simplesmente define a CPU para sugar as informações do dispositivo como código. Se tiver um código inválido, ele aciona uma interrupção e o BIOS lida com a exceção e passa para o próximo dispositivo inicializável.
Por exemplo, o início do meu disco começa com:
00000000 eb 63 90 d0 bc 00 7c fb 50 07 50 1f fc be 1b 7c |.c....|.P.P....||
A primeira parte é eb 63
Ir para compensar 0x63 do IP atual (de 0x65).
00000060 00 00 00 00 ff fa 90 90 f6 c2 80 74 05 f6 c2 70 |...........t...p|
00000070 74 02 b2 80 ea 79 7c 00 00 31 c0 8e d8 8e d0 bc |t....y|..1......|
A execução continua a partir daqui.
O fim do setor é assim:
000001b0 cd 10 ac 3c 00 75 f4 c3 ed db 96 d6 00 00 80 01 |...<.u..........|
000001c0 01 00 83 fe ff ff 3f 00 00 00 c1 07 a6 0e 00 fe |......?.........|
000001d0 ff ff 83 fe ff ff 00 60 00 11 00 00 38 29 00 fe |.......`....8)..|
000001e0 ff ff 82 fe ff ff 00 08 a6 0e 00 58 5a 02 00 00 |...........XZ...|
000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa |..............U.|
Se o seu disco estiver formatado como uma tabela de partição MBR, ele precisará apenas de duas coisas, a tabela de partição que está em offset 0x1be
e a assinatura MBR, 55aa
que ocorre no final do setor em offset 0x1fe
. 0x1be
é decimal 446.
O seguinte (é claro) tornará o dispositivo não inicializável. Mas é isso que você quer. Se você não deseja tornar seu dispositivo incapaz de inicializar, não faça isso, mmm-kay? Presumo que seu dispositivo seja /dev/sdz
, simplesmente porque poucas pessoas têm um /dev/sdz
, e isso reduz o risco de algum novato idiota copiar cegos os comandos de colar.
Primeiro, copie o MBR para um arquivo para backup.
sudo dd if=/dev/sdz of=/some/where/safe/preferably/not/on/dev/sdz/backup.mbr bs=512 count=1
Em seguida, faça uma cópia desse arquivo:
cp backup.mbr backup.mbr.test
Em seguida, precisamos criar um dispositivo de loopback (para que o conteúdo não seja truncado.) E aplicar as alterações em nosso setor falso 0 como teste:
sudo losetup /dev/loop7 backup.mbr.test
sudo dd if=/dev/zero of=/dev/loop7 bs=446 count=1
sudo losetup -d /dev/loop7
hexdump
o arquivo e verifique se a tabela de partição inteira está intacta:
sudo hexdump -C backup.mbr.test
Você deve ver algo como:
00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
000001b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 01 |................|
000001c0 01 00 83 fe ff ff 3f 00 00 00 c1 07 a6 0e 00 fe |......?.........|
000001d0 ff ff 83 fe ff ff 00 60 00 11 00 00 38 29 00 fe |.......`....8)..|
000001e0 ff ff 82 fe ff ff 00 08 a6 0e 00 58 5a 02 00 00 |...........XZ...|
000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa |..............U.|
00000200
Agora, 0x1be
é onde você vê 80
a saída hexdumped, isso também pode ser 00
e ainda é válido. (É o sinalizador "inicializável" na tabela de partição, você pode deixá-lo em paz, porque é completamente ignorado pela maioria dos BIOS modernos ...) O byte no 0x1bf
quase nunca será 0x00
(é mais comum, 0x01
mas pode aceitar outros valores). você pode comparar isso com o seu backup.mbr
para garantir que nada do passado 0x1be
seja alterado.
Quando estiver satisfeito com a aplicação correta da alteração, você poderá copiar diretamente o arquivo na primeira parte do disco. O motivo pelo qual você deseja fazer o arquivo em vez de /dev/zero
novamente é a segurança contra erros de digitação. Se você acidentalmente omitir count=1
que vai se divertir muito, copiar um arquivo, por outro lado, nunca será executado além do EOF. Então é mais seguro.
sudo dd if=backup.mbr.test of=/dev/sdz
Em seguida, hexdump
seu disco para garantir que as alterações foram realizadas conforme o esperado.
hexdump -C /dev/sdz | head
Compare até 0x200
contra backup.mbr.test
para garantir que é o que você deseja.
Por fim, se alguma coisa estragar por qualquer motivo, você pode simplesmente copiar o backup do MBR de volta para a unidade através de:
sudo dd if=backup.mbr of=/dev/sdz
Espero que isto ajude.