Puede hacer que el dispositivo no sea de arranque simplemente haciendo que los primeros bytes del disco sean 0x00.
Típicamente (y esto es cierto tanto para grub, grub2 como ntldr iirc), el primer byte de su unidad será una instrucción jmp x86. Esto ocurre incluso antes de la etiqueta del disco, porque al pasar la ejecución al dispositivo para arrancarlo, simplemente configura la CPU para que absorba la información del dispositivo como código. Si tiene un código no válido, desencadena una interrupción y el BIOS maneja la excepción y pasa al siguiente dispositivo de arranque.
Por ejemplo, el comienzo de mi disco comienza con:
00000000 eb 63 90 d0 bc 00 7c fb 50 07 50 1f fc be 1b 7c |.c....|.P.P....||
La primera parte es eb 63
Saltar para compensar 0x63 de la IP actual (por lo tanto, a 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......|
La ejecución continúa desde aquí.
El final del sector se ve así:
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.|
Si su disco está formateado como una tabla de partición MBR, entonces solo necesita dos cosas para estar presente, la tabla de partición que está en el desplazamiento 0x1be
y la firma MBR, 55aa
que ocurre al final del sector en el desplazamiento 0x1fe
. 0x1be
es decimal 446.
Lo siguiente (por supuesto) hará que el dispositivo no se pueda arrancar. Pero esto es lo que quieres. Si no desea que su dispositivo no pueda iniciarse, no lo haga, ¿mmm-kay? Supongo que su dispositivo es /dev/sdz
, simplemente porque no muchas personas tienen /dev/sdz
, y esto reduce el riesgo de que un novato idiota copie ciegamente los comandos de pegado.
Primero, copie el MBR a un archivo para una copia de seguridad.
sudo dd if=/dev/sdz of=/some/where/safe/preferably/not/on/dev/sdz/backup.mbr bs=512 count=1
Luego, haga una copia de ese archivo:
cp backup.mbr backup.mbr.test
A continuación, tenemos que crear un dispositivo de bucle invertido (para que los contenidos no se trunquen). Y aplicar los cambios en nuestro sector falso 0 como prueba:
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
el archivo y asegúrese de que toda la tabla de particiones esté intacta:
sudo hexdump -C backup.mbr.test
Deberías 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
Ahora, 0x1be
es donde se ve 80
en la salida hexdumped, esto también puede ser 00
y seguir siendo válido. (Es la bandera de "arranque" en la tabla de particiones, puede dejar solo, porque es completamente ignorada por la mayoría de los BIOS modernos ...) El byte a 0x1bf
pesar de que casi se no ser 0x00
(que es más comúnmente 0x01
, pero puede tener otros valores) se puede comparar esto con su backup.mbr
para asegurarse de que no 0x1be
se cambie nada pasado .
Una vez que esté satisfecho de haber aplicado el cambio correctamente, puede copiar directamente el archivo en la primera parte del disco. La razón por la que desea hacer el archivo en lugar de /dev/zero
otra vez es por seguridad contra errores tipográficos. Si omite accidentalmente, count=1
pasará un mal momento, copiar un archivo, por otro lado, nunca pasará el EOF, nunca. Entonces es más seguro.
sudo dd if=backup.mbr.test of=/dev/sdz
A continuación, hexdump
su disco para asegurarse de que los cambios se realizaron como se esperaba
hexdump -C /dev/sdz | head
Compare hasta 0x200
contra backup.mbr.test
para asegurarse de que sea lo que desea.
Finalmente, si algo falla por cualquier razón, simplemente puede copiar la copia de seguridad del MBR en la unidad a través de:
sudo dd if=backup.mbr of=/dev/sdz
Espero que esto ayude.