Як дізнатись, чи встановлено grub на пристрої?


37

Як я можу визначити, чи встановлено grub на диску, і якщо це налаштування у нього (примітно, що він має для кореневого параметра)

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


3
Чи можете ви прийняти нову відповідь нижче? оскільки прийнята відповідь застаріла
rubo77

@ rubo77, моя відповідь була правильною в той час, коли grub0,9x або менше було загальноприйнятим і задовго до того, як його перейменували на grub-legacy. Якщо це вас турбує, пропоную задати нове запитання, зокрема grub2. в якості альтернативи, проведіть кампанію, виправляючи кожне питання та відповідь, які застаріли з плином часу.
cas

3
Без образ. Я думаю, що SO - це база знань, яка має на увазі змінюватися з часом. Після застарілих відповідей слід оновити.
rubo77

Відповіді:


28

ОНОВЛЕННЯ:

Ця відповідь є з 2009 року і стосується grub-спадщини, а не 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 відображатиметься при збої, тоді ви встановили груб.

Підказка шапки на 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 нічого конкретно немає.


5
Пляма на. Прийнята відповідь не працювала для мене на кількох машинах, але ваша зробила.
Серін

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, а на деяких він працював, а на інших - не. Різниця між цими системами полягала в цифрах у чарівних файлах, що надходять із командою файлу. Заміна файлів магічних номерів підтвердила, що визначення неробочої системи призвели до відмови робочої системи.
benrifkah

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. (Не хвилюйтеся, він не перезапустить вашу машину. Це просто очистить ваш термінал.)

Введення тексту з cнаступним exitне працювало для мене.
Faheem Mitha

1
переконайтеся, що ви зосередилися на оригінальному терміналі, що породив вікно гриба, а не на самому вікні гриба (знадобилося мені секунду, щоб зрозуміти це)
Мадівад,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.