Как мне удалить GRUB?

Жесткий диск, который я использую только для хранения данных, все еще содержит GRUB из предыдущих установок Ubuntu.

Как я могу удалить GRUB из него, не нанося вреда остальным данным диска?

Справочная информация

Я иногда перемещаю диск данных между компьютерами с различными конфигурациями порядка загрузки, поэтому я хотел бы он должен быть не загружаемым , чтобы избежать необходимости устанавливать его в настройках BIOS каждого компьютера.

Когда я включаю компьютер, когда подключен только диск с данными, появляется следующее:

error: no such device: fdf38dd4-9e9d-479d-b830-2a6989958503.
grub rescue> 

Я могу подтвердить из старых резервных копий /etc/fstab, что это был UUID корневого раздела, который Я недавно переформатировал и который больше не существует . Вот таблица разделов диска данных и основная основная загрузочная запись .

Обратите внимание, что меня не интересуют обходные пути, которые не отвечают на мой основной вопрос. Я могу придумать несколько способов обойти эту проблему, но меня беспокоит принцип, что я не знаю, как решить эту проблему напрямую. Каждая процедура установки должна иметь процедуру удаления аналога.

19
задан 5 May 2012 в 21:20

6 ответов

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

Обычно (и это верно и для grub, и для grub2, и для ntldr iirc) самым первым байтом вашего диска будет x86 jmp инструкция. Это происходит еще до появления метки disklabel, потому что при передаче выполнения устройству для загрузки она просто устанавливает процессор на всасывание информации об устройстве в виде кода. Если он имеет недействительный код, он запускает прерывание и BIOS обрабатывает исключение и переходит к следующему загрузочному устройству.

Например, начало моего диска начинается с:

00000000  eb 63 90 d0 bc 00 7c fb  50 07 50 1f fc be 1b 7c  |.c....|.P.P....||

Первая часть - eb 63, которая представляет собой Jump to offset 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 на выходе hexdumped, это также может быть 00 и все еще быть действительным. (Это флаг "bootable" в таблице разделов, вы можете оставить его в покое, потому что он полностью игнорируется большинством современных 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

Надеюсь, это поможет.

25
ответ дан 5 May 2012 в 21:20

ПРЕДУПРЕЖДЕНИЕ: ЧРЕЗВЫЧАЙНО ОПАСНО

Вы можете использовать команду dd из самого Linux (она удаляет таблицу разделов):

 # dd if=/dev/null of=/dev/sdX bs=512 count=1

Просто удалите MBR без таблицы разделов (см. Комментарий ниже):

# dd if=/dev/null of=/dev/sdX bs=446 count=1

Замените / dev / hdX с фактическим именем вашего устройства, например / dev / hda . Используйте команду fdisk -l , чтобы узнать имя устройства:

# fdisk -l

Источник

  1. http://www.cyberciti.biz/faq/linux-how-to-uninstall-grub/
2
ответ дан 5 May 2012 в 21:20

После прочтения Статья в Википедии по этому поводу. Я хотел бы предложить несколько дополнительных решений:

  1. Измените порядок загрузки в BIOS :)

  2. Самый лучший и самый безопасный: используйте fdisk , чтобы удалить флаг «загрузочный» с любых разделов на этом диске. Большинство MBR ищут «загрузочный» раздел для последовательной загрузки, поэтому я ожидаю, что GRUB просто ничего не сделает, если таких разделов нет. Однако не тестировал.

    Если описанное выше не помогло, попробуйте установить бесплатный клон стандартного кода MBR:

  3. Установите пакет mbr и используйте команду install-mbr вот так:

     sudo apt-get install mbr
    sudo install-mbr -i n -p D -t 0 / dev / sda
     

Источники: КАК: Восстановить MBR Windows с помощью Ubuntu LIVE CD

Читая статью в Википедии, у меня сложилось впечатление, что единственное, что идентифицирует MBR, - это его подпись, которая находится в самом конце сектор (байты 510 и 511). Первые 446 байтов MBR должны содержать машинные инструкции. Предполагается, что BIOS передает управление загрузчику независимо от фактического содержимого первых 446 байтов, при условии, что присутствует подпись MBR:

На компьютерах, совместимых с IBM PC, встроенное программное обеспечение начальной загрузки содержало в ПЗУ BIOS загружает и выполняет главную загрузочную запись. [14] ... Таким образом, ожидается, что начало MBR будет содержать реальный режим инструкции на машинном языке. [14] BIOS считывает MBR из запоминающее устройство в физическую память, а затем направляет микропроцессор до начала загрузочного кода.

Из-за ограниченного размера раздела кода MBR обычно содержит только небольшую программу, которая копирует дополнительный код (например, загрузчик) с запоминающего устройства в память. Тогда контроль передается в этот код, который отвечает за загрузку фактических операционная система.

...

Последовательность начальной загрузки в BIOS загрузит первую допустимую MBR, которая он находится в физической памяти компьютера по адресу 0x7C00. В последняя инструкция, выполненная в коде BIOS, будет "переходом" к этому адрес, чтобы направить выполнение в начало копии MBR. В основная проверка для большинства BIOS - это подпись 0xAA55 на конце, хотя разработчик BIOS может включить другие проверки, например проверка того, что MBR содержит допустимую таблицу разделов без записи, относящиеся к секторам, превышающим заявленную емкость диска.

Итак, я понимаю, что MBR всегда должен содержать загрузчик, и обнуление первых 446 байтов не остановит попытки BIOS загружаться с диска - но это может привести к зависанию компьютера при попытке выполнить недопустимый код.

ОБНОВЛЕНИЕ: Кроме того, в этой статье предлагается сделать так, чтобы диск выглядел «не- bootable »для BIOS, вы должны фактически отредактировать подпись MBR в секторе и (используя любой редактор диска). Я не уверен, повлияет ли это на ОС, видя таблицу разделов на диске ... но, по крайней мере, вы всегда можете изменить эти байты обратно ...

1
ответ дан 5 May 2012 в 21:20

Еще одно более простое решение.

В моем случае у меня был Debian linux, но я хотел использовать Mandriva, будет работать и для других

Выключите компьютер, затем удалите загружаемый диск что вы не хотите загружаться (у которого есть grub)

Просто вставьте загрузочный usb, сделанный из mandriva iso или другого варианта, который вы хотите установить, есть инструменты для создания загрузочных usb-накопителей из файлов iso с использованием google (или вы можете использовать сгоревший установщик с компакт-диска)

Теперь большинство установщиков Linux предоставляют вам выбор, что делать, попробовать и использовать / использовать для оценки или переносимого Linux или запустить программу установки, чтобы установить его. На данный момент мы просто ждем (переместите курсор вверх вниз, чтобы экран ждал, но не нажимайте ввод и не щелкайте мышью).

Просто напомните, что в этот момент ваш USB / или / CDRom запущен и работает. теперь пришло время подключить жесткий диск, который мы временно удалили подождите минуту (некоторые BIOS требуют небольшого ожидания, минуты более чем достаточно)

Продолжайте процесс установки, поскольку большинство установщиков содержат инструменты для создания разделов, вы можете делать все, что захотите. Что ж, это простое решение, я избавился от старой установки Linux просто как новичок

0
ответ дан 5 May 2012 в 21:20

По моему опыту с

sudo install-mbr -i n -p D -t 0 /dev/sda

он успешно удалил grub2 из / dev / sda (где установлена ​​моя Windows 7), Итак, первая часть вопроса «Как удалить grub из / dev / sda?» был дан ответ.

Однако вторая часть вопроса: «Как мне восстановить MBR / dev / sda?» не получил ответа, так как команда install-mbr не смогла восстановить MBR. В результате Windows больше не загружается, а диспетчер загрузки Windows сообщает об ошибке о повреждении MBR и просит пользователя выполнить восстановление с компакт-диска для восстановления Windows.

1
ответ дан 5 May 2012 в 21:20

Старый вопрос, но так как это случилось со мной вчера, я решил его вот так: Я выключил компьютер, физически отключил инкриминируемый жесткий диск, снова запустил компьютер, затем

~ $ sudo update-grub

Сделал это, я выключил компьютер, снова подключил жесткий диск, и мой старый раздел Windows 7, который больше не существовал 2 года назад, не появился окончательно.

Я понимаю, что это решение нестандартное, но оно работает. Однажды я полностью сотру этот жесткий диск, и все оставшиеся следы GRUB исчезнут.

0
ответ дан 6 May 2012 в 08:20

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

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