Как временно удалить grub из mbr? [Дубликат]

Похоже, вы копируете этот путь к файлу из Chrome или что-то (file:// - как Chrome обращается к локальной файловой системе).

Удалите часть file://, так что вы просто имеете /home/zenon/.... и повторите попытку.

18
задан 5 May 2012 в 22:20

1 ответ

Вы можете сделать устройство не загрузочным, просто сделав первые несколько байтов диска 0x00.

Обычно (и это верно как для grub, grub2, так и для ntldr iirc) самый первый байт вашего диск будет инструкцией x86 jmp. Это происходит даже до метки диска, потому что, передавая выполнение устройству для его начальной загрузки, он просто устанавливает CPU для всасывания информации об устройстве в виде кода. Если у него неверный код, он вызывает прерывание, и 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.

Следующее (конечно) сделает устройство не загружаемым. Но это то, чего вы хотите. Если вы не хотите, чтобы ваше устройство не могло быть загружено, не делайте этого, mmm-kay? Я предполагаю, что ваше устройство /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

Затем мы должны создать loopback-устройство (так, чтобы содержимое дон- t обрезается.) И примените изменения в нашем поддельном секторе 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

Hope это помогает.

24
ответ дан 7 August 2018 в 06:17

Другие вопросы по тегам:

Похожие вопросы: