¿Cómo puedo saber si grub está instalado en un dispositivo?

37

¿Cómo puedo saber si grub está instalado en un disco y si es la configuración que tiene (notablemente, qué tiene para el parámetro raíz)

Necesito verificar muchos discos en las matrices RAID1 de software para asegurarme de que ambos discos tengan instalado grub, con el grub en cada disco con el valor raíz apropiado.

DrStalker
fuente
3
¿Puedes considerar aceptar la nueva respuesta a continuación? ya que la respuesta aceptada ya no está actualizada
rubo77
@ rubo77, mi respuesta fue correcta en ese momento, cuando grub0.9x o menos era de uso común y mucho antes de que se le cambiara el nombre grub-legacy. Si esto le molesta, sugiero hacer una nueva pregunta específicamente sobre grub2. alternativamente, realice una campaña corrigiendo cada pregunta y respuesta que se haya vuelto obsoleta con el paso del tiempo.
cas
3
Sin ofender. Creo que SO es una base de conocimiento y está destinado a cambiar con el tiempo. Una vez desactualizadas las respuestas deben actualizarse.
rubo77
relacionado: askubuntu.com/questions/444855/… | superuser.com/questions/466086/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Respuestas:

28

ACTUALIZAR:

Esta respuesta es de 2009 y se aplica a grub-legacy, no a grub2.

Puede usar filepara identificar GRUB en un MBR. p.ej

# 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

El root=parámetro no se almacena en el MBR, se almacena en el menu.lstarchivo de GRUB que se almacena en un sistema de archivos (generalmente en el directorio / boot / grub de la raíz fs o el directorio grub del sistema de archivos / boot, pero no siempre es así) podría estar en cualquier lugar).

Tendrá que analizar la salida del archivo anterior, determinar en qué disco / partición está el menu.lstarchivo, montarlo, leerlo y analizarlo. También querrá leer en el archivo grub / default para descubrir qué entrada de menú grub es la predeterminada, porque esa es probablemente la que tiene el parámetro root = que más le interesa.

cas
fuente
En ese caso, necesito una manera de asegurarme de que grub esté buscando menu.lst en el lugar correcto ... en algún lugar, el cargador de arranque debe saber a qué disco y partición debe ir para que pueda obtener el menú de arranque.
DrStalker
hay mucha información útil sobre grub en la página de inicio de grub gnu.org/software/grub , el wiki de grub grub.enbug.org y en wikipedia en.wikipedia.org/wiki/GRUB
cas
8
Esto ya no es correcto con grub2. Ver la respuesta de @benrifkah en su lugar.
Paul Tomblin
52

Metodo alternativo

file -sno funcionó para mí en Ubuntu Lucid porque los archivos mágicos de mi comando de archivo estaban desactualizados . Otra forma de hacer esto si sus archivos mágicos no se han puesto al día con los cambios de GRUB es examinar los primeros 512 bytes del dispositivo con el ddcomando siguiente:

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

Esto envía la salida del ddcomando a través del stringscomando, eliminando los caracteres no imprimibles (las estadísticas de transferencia se descartan /dev/null).

Si ve algún mensaje que GRUB mostrará cuando encuentre una falla, entonces tendrá instalado grub.

Hat tip to louib en ubuntuforums.org para responder en esta publicación protegida con contraseña: http://ubuntuforums.org/showthread.php?t=363372

Para los curiosos esto es lo que obtuve de 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

No hay nada sobre GRUB allí específicamente.

benrifkah
fuente
55
Spot on. La respuesta aceptada no funcionó para mí en varias máquinas, pero la suya sí.
Cerin
13
La respuesta aceptada fue escrita en 2009 y (como debería ser obvio por la mención de menu.lst en lugar de grub.cfg) fue para grub1, también conocido como "grub-legacy". obviamente las cosas han cambiado desde entonces, y grub2 no pone un identificador en el MBR. si funcionó en algunas máquinas para usted pero no en otras, eso implicaría que tiene grub1 en algunas y grub2 en otras.
cas
1
Gracias por las aclaraciones Craig. El sistema en el que probé originalmente el file -scomando utiliza grub-pc, que aparentemente es GRUB2, por lo que parece que estás parcialmente correcto. Sin embargo, ejecuté file -salgunos otros sistemas con GRUB 0.97 y en algunos funcionó mientras que en otros no. La diferencia entre estos sistemas estaba en los números en los archivos mágicos que vienen con el comando de archivo. El intercambio de archivos de números mágicos confirmó que las definiciones del sistema que no funcionaba hicieron que el sistema de trabajo fallara.
benrifkah
7

Puede usar grub-emupara ver el menú que mostrará grub la próxima vez que la máquina se reinicie.

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

En mi máquina de escritorio, el menú se mostraba como se esperaba, aunque si realmente fingí arrancar un kernel, recibí el error "no existe tal dispositivo". Creo que ese es el comportamiento esperado.

En mi DigitalOcean VPS no se mostraban entradas en el menú de grub, aunque el servidor se reinició bien. (Este es un VPS 2013, por lo que su kilometraje puede variar).

Algunas notas cuando se ejecuta grub-emu:

  • En X-windows, si desea interactuar con grub, necesita que el foco de su teclado esté en el terminal desde el que ejecutó grub-emu, y no en la ventana que apareció.
  • Puede salir del emulador presionando y cluego escribiendo exit.
  • Después de salir, su emulador de terminal puede estar en mal estado (por ejemplo, Enter no se mostrará en una nueva línea). Solucione eso escribiendo reset. (No se preocupe, no reiniciará su máquina. Simplemente limpiará su terminal).
joeytwiddle
fuente
Escribir cseguido exitno funcionó para mí.
Faheem Mitha
1
asegúrese de tener el foco en el terminal original que generó la ventana de grub y no en la ventana de grub en sí (me tomó un segundo darme cuenta de esto)
Madivad