Вы можете сделать устройство не загружаемым, просто сделав первые несколько байтов диска 0x00.
Как правило (и это верно как для grub, grub2, так и для ntldr iirc), самый первый байт вашего диска будет инструкцией x86 jmp. Это происходит даже до метки диска, поскольку при передаче выполнения устройству для его начальной загрузки оно просто устанавливает ЦП на всасывание информации об устройстве в виде кода. Если он имеет неверный код, он вызывает прерывание, и BIOS обрабатывает исключение и переходит к следующему загрузочному устройству.
Например, начало моего диска начинается с:
00000000 eb 63 90 d0 bc 00 7c fb 50 07 50 1f fc be 1b 7c |.c....|.P.P....||
Первая часть - eb 63
это переход со смещением 0x63 от текущего IP (то есть до 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......|
Казнь продолжается отсюда.
Конец сектора выглядит так:
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.|
Если ваш диск отформатирован как таблица разделов MBR, то для этого нужны только две вещи: таблица разделов со смещением 0x1be
и подпись MBR, 55aa
которая находится в самом конце сектора со смещением 0x1fe
. 0x1be
десятичное число 446.
Следующее (конечно) сделает устройство не загружаемым. Но это то, что вы хотите. Если вы не хотите, чтобы ваше устройство не загружалось, не делайте этого, ммм-кей? Я предполагаю, что ваше устройство есть /dev/sdz
, просто потому что не так много людей имеют /dev/sdz
, и это снижает риск того, что некоторые идиоты-новички слепо копируют команды вставки.
Сначала скопируйте MBR в файл для резервного копирования.
sudo dd if=/dev/sdz of=/some/where/safe/preferably/not/on/dev/sdz/backup.mbr bs=512 count=1
Затем сделайте копию этого файла:
cp backup.mbr backup.mbr.test
Затем мы должны создать устройство с обратной связью (чтобы содержимое не усекалось) и применить изменения к нашему фиктивному сектору 0 в качестве теста:
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
файл и убедитесь, что вся таблица разделов не повреждена:
sudo hexdump -C backup.mbr.test
Вы должны увидеть что-то вроде:
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
Теперь, 0x1be
где вы видите 80
на шестнадцатеричном выводе, это также может быть 00
и остается действительным. (Это флаг «загрузочный» в таблице разделов, вы можете оставить его в покое, потому что он полностью игнорируется большинством современных BIOS ...) Байт, 0x1bf
хотя и почти никогда не будет 0x00
(чаще всего, 0x01
но он может принимать другие значения) можете сравнить это с вашим, backup.mbr
чтобы убедиться, что ничего прошлого 0x1be
не изменилось.
Как только вы убедитесь, что применили изменения правильно, вы можете напрямую скопировать файл на первую часть диска. Причина, по которой вы хотите сделать файл, а не /dev/zero
снова, заключается в безопасности от опечаток. Если вы случайно пропустите count=1
это, у вас будет плохое время, копирование файла с другой стороны никогда не будет проходить мимо EOF. Так что безопаснее.
sudo dd if=backup.mbr.test of=/dev/sdz
Затем hexdump
ваш диск, чтобы убедиться, что изменения приняли, как ожидалось.
hexdump -C /dev/sdz | head
Сравните с 0x200
против, backup.mbr.test
чтобы убедиться, что это то, что вы хотите.
Наконец, если что-то облажается по какой-либо причине, вы можете просто скопировать резервную копию MBR обратно на диск через:
sudo dd if=backup.mbr of=/dev/sdz
Надеюсь это поможет.