Você pode tornar o dispositivo não inicializável simplesmente fazendo os primeiros bytes do disco 0x00.
Tipicamente (e isto é verdade para o grub2 e ntldr iirc), o primeiro byte do seu drive será uma instrução x86 jmp. Isso ocorre antes mesmo do disklabel, porque ao passar a execução para o dispositivo para inicializá-lo, ele simplesmente configura a CPU para sugar as informações do dispositivo como código. Se ele tiver um código inválido, ele acionará uma interrupção e o BIOS lidará com a exceção e acessará o próximo dispositivo inicializável.
Por exemplo, o começo 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
, que é Ir para compensar 0x63 do IP atual (então para 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 daqui.
O final 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ções MBR, ele precisará apenas de dois itens, a tabela de partições que está no deslocamento 0x1be
e a assinatura MBR, 55aa
, que ocorre no final do setor. no deslocamento 0x1fe
. 0x1be
é decimal 446.
O seguinte (obviamente) tornará o dispositivo não inicializável. Mas isso é o que você quer. Se você não quiser que seu dispositivo não seja inicializado, não faça isso, mmm-kay? Eu estou supondo que seu dispositivo é /dev/sdz
, simplesmente porque muitas pessoas não têm um /dev/sdz
, e isso reduz o risco de algum novato idiota copiar cegamente colando comandos.
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, temos que criar um dispositivo de loopback (para que o conteúdo não fique truncado.) E aplique as alterações em nosso setor falso 0 como um 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
do arquivo e certifique-se de que toda a tabela de partições esteja 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
na saída hexaduficiente, isso também pode ser 00
e ainda ser válido. (É o sinalizador "inicializável" na tabela de partições, você pode deixá-lo sozinho, porque é completamente ignorado pela maioria dos BIOS modernos ...) O byte em 0x1bf
embora quase nunca seja 0x00
(é mais comumente 0x01
, mas pode levar outros valores), você pode comparar isso com seu backup.mbr
para garantir que nada além de 0x1be
seja alterado.
Quando estiver satisfeito em aplicar a alteração corretamente, 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
é por segurança contra erros de digitação. Se você acidentalmente omitir count=1
, você terá um mau momento, copiar um arquivo, por outro lado, nunca passará do EOF, nunca. Então é mais seguro.
sudo dd if=backup.mbr.test of=/dev/sdz
Próximo hexdump
do seu disco para garantir que as alterações tenham o esperado.
hexdump -C /dev/sdz | head
Compare até 0x200
com backup.mbr.test
para garantir que é o que você deseja.
Finalmente, se alguma coisa estragar por qualquer motivo, você pode simplesmente copiar o backup do MBR de volta para a unidade via:
sudo dd if=backup.mbr of=/dev/sdz
Espero que isso ajude.