Как мне узнать, установлен ли grub на устройство?

37

Как я могу узнать, установлен ли grub на диск и имеет ли он какие-либо настройки (примечательно, что он имеет для корневого параметра)

Мне нужно проверить множество дисков в программных массивах RAID1, чтобы убедиться, что на обоих дисках установлен grub, причем на каждом диске grub указано соответствующее корневое значение.

DrStalker
источник
3
Можете ли вы принять новый ответ ниже? поскольку принятый ответ уже устарел
rubo77
@ rubo77, мой ответ был верным в то время, когда grub0.9x или ниже были в общем использовании и задолго до того, как стали переименовывать grub-legacy. Если это вас беспокоит, я предлагаю задать новый вопрос конкретно о grub2. в качестве альтернативы, проведите кампанию, исправляя все вопросы и ответы, которые устарели с течением времени.
Cas
3
Не в обиду. Я думаю, что SO - это база знаний, и она должна меняться со временем. После того, как устаревшие ответы должны быть обновлены.
rubo77
связанные: askubuntu.com/questions/444855/… | superuser.com/questions/466086/…
Сиро Сантилли 新疆 改造 中38 法轮功 六四 事件

Ответы:

28

ОБНОВИТЬ:

Этот ответ с 2009 года относится к grub-legacy, а не к grub2.

Вы можете использовать fileдля идентификации GRUB в MBR. например

# file -s /dev/sda
/dev/sda: x86 boot sector; GRand Unified Bootloader, stage1 version 0x3
, stage2 address 0x2000, stage2 segment 0x200; partition 1:
ID=0xfd, starthead 1, startsector 63, 1044162 sectors; partition
2: ID=0x82, starthead 0, startsector 1044225, 1028160 sectors;
partition 3: ID=0xfd, starthead 0, startsector 2072385,
1951447680 sectors, code offset 0x48

Параметр root=не хранится в MBR, он хранится в menu.lstфайле GRUB, который хранится в файловой системе (обычно в каталоге / boot / grub корневого fs или в каталоге grub файловой системы / boot - но не всегда это может быть где угодно).

Вы должны будете проанализировать вывод файла выше, определить, на каком диске / разделе находится menu.lstфайл, смонтировать его, прочитать и проанализировать. Вы также захотите прочитать в файле grub / default, чтобы выяснить, какой пункт меню grub является значением по умолчанию, потому что он, вероятно, имеет параметр root =, который вас больше всего интересует.

саз
источник
В этом случае мне нужен способ убедиться, что grub ищет menu.lst в нужном месте ... где-то загрузчик должен сказать, к какому диску и разделу он должен перейти, чтобы он мог получить меню загрузки.
DrStalker
есть много полезной информация о жратве на домашней странице харча gnu.org/software/grub , личинка вики grub.enbug.o , и в википедии en.wikipedia.org/wiki/GRUB
саз
8
Это больше не правильно с grub2. Смотрите ответ @ benrifkah.
Пол Томблин
52

Альтернативный метод

file -sне работал для меня в Ubuntu Lucid, потому что магические файлы моей файловой команды устарели . Другой способ сделать это, если ваши магические файлы не догнали изменения GRUB, это проверить первые 512 байт устройства, используя следующую ddкоманду:

user@host:~$ sudo dd bs=512 count=1 if=/dev/sda 2>/dev/null | strings
ZRr=
`|f
\|f1
GRUB
Geom
Hard Disk
Read
 Error

Это передает выходные данные ddкоманды через stringsкоманду, таким образом удаляя непечатаемые символы (статистика передачи отбрасывается в /dev/null).

Если вы видите какие-либо сообщения, которые GRUB будет отображать при сбое, значит, у вас установлен grub.

Чтобы ответить на этот пост, защищенный паролем, отправьте подсказку louib на ubuntuforums.org: http://ubuntuforums.org/showthread.php?t=363372

Для любопытных вот что я получил file -s:

user@host:~$ sudo file -s /dev/sda
/dev/sda: x86 boot sector; partition 1: ID=0x83, active, starthead 32, startsector 20
48, 337211392 sectors; partition 2: ID=0x5, starthead 254, startsector 337215486, 1434214
6 sectors, code offset 0x63

Там нет ничего про GRUB, в частности.

benrifkah
источник
5
Пятно на. Принятый ответ не работал для меня на нескольких машинах, но ваш работал.
Cerin
13
Принятый ответ был написан в 2009 году и (как должно быть очевидно из упоминания menu.lst, а не grub.cfg) был для grub1 или «grub-legacy». очевидно, с тех пор все изменилось, и grub2 не помещает идентификатор в MBR. если бы это работало на некоторых машинах для вас, но не на других, это означало бы, что у вас есть grub1 на некоторых и grub2 на других.
Cas
1
Спасибо за разъяснения, Крейг. Система, в которой я изначально пробовал эту file -sкоманду, использует grub-pc, который, по-видимому, GRUB2, так что, похоже, вы частично правы. Тем не менее, я работал file -sна некоторых других системах с GRUB 0.97, и на некоторых это работало, а на других - нет. Разница между этими системами заключалась в количестве магических файлов, которые поставляются с командой file. Обмен файлами магических чисел подтвердил, что определения из нерабочей системы вызвали сбой работающей системы.
Бенрифках
7

Вы можете использовать, grub-emuчтобы увидеть меню, которое Grub покажет при следующей перезагрузке машины.

$ sudo apt-get install grub-emu
$ sudo grub-emu

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

На моем DigitalOcean VPS никакие записи не отображались в меню grub, хотя сервер действительно перезагрузился нормально. (Это VPS 2013 года, поэтому ваш пробег может отличаться.)

Некоторые заметки при запуске grub-emu:

  • В X-windows, если вы хотите взаимодействовать с grub, вам нужно, чтобы фокус клавиатуры был на терминале, из которого вы запускали grub-emu, а не на окне, которое выскочило.
  • Вы можете выйти из эмулятора, нажав cзатем набрав exit.
  • После выхода ваш эмулятор терминала может быть в плохом состоянии (например, Enter не будет отображаться в новой строке). Исправьте это, набрав reset. (Не волнуйтесь, он не перезагрузит вашу машину. Он просто очистит ваш терминал.)
joeytwiddle
источник
Печатание с cпоследующим exitне работает для меня.
Фахим Митха
1
убедитесь, что вы сфокусировались на оригинальном терминале, который порождал окно grub, а не на самом окне grub (мне потребовалась секунда, чтобы понять это)
Мадивад,