Как удалить GRUB?

18

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

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

Фон

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

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

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

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

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

    
задан ændrük 04.05.2012 в 03:58
источник

6 ответов

22

Вы можете сделать устройство не загрузочным, просто создав первые несколько байтов диска 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 , которая является Jump to offset 0x63.

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

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

    
ответ дан OmnipotentEntity 26.07.2012 в 20:22
источник
2

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

Вы можете использовать команду 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. Ссылка
ответ дан Tachyons 04.05.2012 в 04:05
1

Мой опыт работы с

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.

    
ответ дан ubuntu-13.10 user 12.12.2013 в 08:14
1

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

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

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

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

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

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

Кредиты: КАК: Восстановить Windows MBR с помощью Ubuntu LIVE CD

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

  

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

     

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

     

...

     

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

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

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

    
ответ дан Sergey 04.05.2012 в 06:51
0

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

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

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

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

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

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

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

    
ответ дан peter 12.10.2012 в 00:11
0

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

~ $ sudo update-grub

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

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

    
ответ дан ElStellino 18.06.2016 в 17:31