Servidor Ubuntu, tabla de particiones gpt, mdadm, error de arranque grub

9

Detalles básicos del sistema de trabajo:

Usé el CD del servidor Ubuntu 12.04 para instalar un servidor.

Tengo 4 discos. En todos los discos hice lo siguiente, similar a este tutorial :

  • creó una partición de intercambio de 2 GB
  • creó una partición de arranque / 256 GB
  • creó una partición RAID10 de 64 GB (para root)
  • creó una gran partición RAID10 tomando el resto del espacio

Formateé el arranque como ext3. Configuré RAID10 en la raíz y las grandes particiones. Formateé la raíz uno ext4. Creé un volumen lógico en el grande y lo formateé ext4.

El sistema resultante funciona bien y arranca bien.

Detalles del problema:

Entonces decidí documentar un procedimiento de falla. Como primer paso, decidí reinstalar grub.

# grub-install /dev/sda
warn: This GPT partition label has no BIOS Boot Partition; embedding won't be possible!.
error: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However, blocklists are UNRELIABLE and their use is discouraged..
# grub-install /dev/sdb
warn: This GPT partition label has no BIOS Boot Partition; embedding won't be possible!.
error: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However, blocklists are UNRELIABLE and their use is discouraged..

Parece que falló, pero también parece que se dio por vencido y no realizó cambios. Entonces reinicié. El arranque falló. Simplemente se cuelga con una pantalla negra con un cursor parpadeante a unas 4 líneas hacia abajo. Si inicio presionando "Shift", aparece la palabra "GRUB" a la izquierda del cursor, pero no aparece un mensaje interactivo.

En este punto, utilicé boot-repair-disk para generar este informe: http://paste.ubuntu.com/966531/

Tenga en cuenta que en el informe anterior, dice que el gestor de arranque no apunta al sector correcto para core.img. (sda es el cd virtual; sdb es el disco de arranque; sdc es un espejo de sdb, pero el arranque no está reflejado, solo hay una partición no relacionada separada y formateada ext3; sdd y sde tienen espacio para el arranque pero no está formateado)

Luego arranqué desde el CD del servidor Ubuntu, inicié el sistema de rescate y emití los siguientes comandos, que se completaron sin error (donde sda ​​es el CD virtual, y b, c, d, e son los discos que eran a, b, c , d en los comandos de grub anteriores):

# parted /dev/sdb set 2 bios_grub on
# parted /dev/sdc set 2 bios_grub on
# grub-install /dev/sdb
# grub-install /dev/sdc

En este punto, utilicé boot-repair-disk para generar este informe: http://paste.ubuntu.com/966561/

Tenga en cuenta que en el informe anterior, el problema sobre core.img se ha ido. Parece apuntar al sector correcto.

Ahora, si intento arrancar, aparece un mensaje de grub. Si ejecuto "set", veo que la raíz se encuentra y se establece. Si ejecuto "ls /", veo mi directorio raíz desde el volumen de incursión, incluido el archivo del kernel vmlinuz. Si escribo "ls / vmlinuz" dice "error: archivo no encontrado". Dice el mismo error si uso el comando "linux" para intentar cargar el kernel. El archivo vmlinuz no aparece en la lista si uso "ls -l /".

Detalles excesivamente detallados, en caso de que desee seguir:

Noté que tampoco hay /boot/grub/grub.cfg, así que corrí

# grub-mkconfig -o /boot/grub/grub.cfg

Pero el problema persiste.

Si uso la herramienta "gptsync", no hay cambio en este comportamiento.

El disco de reparación de arranque no reparará el sistema, porque quiere que arranque con una BIOS habilitada para EFI. Investigué brevemente esto, pero no sé cómo funciona. Encontré un shell UEFI en mis opciones de arranque, pero no sé nada al respecto, y no veo cómo cambiar el inicio desde allí (por ejemplo, para arrancar el CD desde ese shell EFI).

También he leído esta página , pero Ubuntu no viene con el comando "grub", por lo que no puedo seguirlo exactamente. Simplemente podría instalar ese comando, pero tengo más curiosidad por saber cómo el instalador de Ubuntu logró instalarlo en lugar de tener una configuración diferente. ¿Usó listas de bloqueo?

Aquí está la salida de parted, mientras se inicia en el disco de reparación de arranque (donde aquí el sdb es el primer disco duro, sda cuando se inicia desde el disco, y "boot" cambia a "bios_grub" en el segundo enlace de pegado):

Model: ATA Hitachi HUA72303 (scsi)
Disk /dev/sdb: 3001GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system     Name   Flags
1      17.4kB  2000MB  2000MB  linux-swap(v1)  swap1
2      2000MB  2256MB  256MB   ext3            boot1  boot (this says bios_grub in 2nd link)
3      2256MB  66.3GB  64.0GB                  root1  raid
4      66.3GB  3001GB  2934GB                  data1  raid

Aquí hay una máquina virtual súper antigua no relacionada para comparar (para cualquiera que no esté familiarizado con el disco de reparación de arranque ): http://paste.ubuntu.com/966799/

Aquí está el último pegado del sistema problemático, después de ejecutar el grub-mkconfig anterior, y también configurar "bios_grub" de nuevo a "boot". http://paste.ubuntu.com/966808/

Comparando los dos, esto parece interesante:

sdb2: __________________________________________________________________________

File system:       
Boot sector type:  Grub2's core.img
Boot sector info: 
Mounting failed:   mount: unknown filesystem type ''

md/bcserver8:0: ________________________________________________________________

File system:       ext4
Boot sector type:  -
Boot sector info: 
Operating System:  Ubuntu 12.04 LTS
Boot files:        /boot/grub/grub.cfg /etc/fstab /boot/grub/core.img

Parece que el raid tiene los archivos de arranque y el sdb2 no está formateado. (a pesar de esto, el sistema se inició antes de ejecutar grub-install). Desde el CD de rescate, falla "mount -t ext3 / dev / sdb2 / boot". Pero tiene sentido que esto pueda confundir las cosas, ya que grub usa la partición 2 explícitamente (el 2 en el comando dividido que activa bios_grub).

Entonces hice algo como esto:

# mkfs.ext3 -L boot1 /dev/sdb2
# mv boot boot_on_root
# mkdir boot
# mount /dev/sdb2 boot
# rsync -avHP boot_on_root/ boot/
# parted /dev/sdb set 2 bios_grub on
# parted /dev/sdc set 2 bios_grub on
# grub-install /dev/sdb
# grub-install /dev/sdc

Luego reinicié, y tengo la pantalla negra de nuevo, sin aviso. http://paste.ubuntu.com/966848/

Entonces, en este punto, supongo que cuando se configura bios_grub, grub no se está instalando en el MBR, y no en el sistema de archivos ext3 en ext3, sino en la partición en sí, como si fuera EFI ... lo que obviamente ensuciaría arriba el sistema de archivos ext3. Y de mi breve lectura sobre EFI, sonaba como si EFI asumiera que la primera partición es el arranque, pero en mi caso la primera es swap, y también debería ser FAT en lugar de algo imposible de montar ... así que eso hace poco / no sentido, todavía estoy completamente perdido sin una pista. [EDITAR: ahora tengo una pista ... salte un poco para actualizar]

Y ahora cuando hago clic en reparar en boot-repair-disk , me pregunta algo más. La última vez que el error se ocultó debajo de la ventana y tuve que arrastrar el otro para verlo. Esta vez la ventana principal se ha ido y la nueva ventana dice:

GPT detected.       You may want to retry after creating a
BIOS-Boot partition (>1Mo, flag). Do you want to continue?

Entonces hice clic en sí, y dijo que se reparó con éxito, y creé otra pasta: http://paste.ubuntu.com/966862/

Pero todavía tengo una pantalla negra con un cursor parpadeante.

Ahora mi teoría es que el arranque fue sobrescrito por una cosa no grasa y no EFI, que es solo un código de grub que de otro modo hubiera estado en los sectores 0-63 antes. Afortunadamente me encontré con una declaración muy clara en esta página, que probablemente completó mi comprensión de lo que todo esto significa. Y luego, cuando descubrí eso, Jeremy publicó una respuesta que, de ser cierta, confirma que este es el concepto clave que falta. http://blog.psych0tik.net/2011/08/grub-embedding-blocklists-and-bios_grub-partitions/

Preguntas:

Que esta pasando? ¿Por qué Grub no puede arrancar? ¿Por qué dice "archivo no encontrado"?

¿Por qué grub no quiere instalar sin esta configuración que configuré con parted (que no fue establecida por el instalador de Ubuntu)? Pensé que todo lo que necesitaba para instalarlo era un arranque / arranque separado que no esté en LVM ni RAID de software, ya que mi raíz está en RAID y la tabla de particiones es GPT.

¿Cómo lo instala el instalador de Ubuntu CD sin este problema y sin la configuración bios_grub?

También consideraría usar EFI. Si esta es una buena idea, y hay una forma estándar de configurarla, siempre estoy dispuesto a aprender cosas nuevas.

La respuesta más rápida que me haría feliz, incluso sin responder todas mis preguntas, sería un conjunto de comandos que podría ejecutar desde el CD de rescate para reparar el gestor de arranque de la misma manera que lo hizo el CD de instalación. También sería muy bueno si pudiera ejecutarlos con el sistema arrancado, en lugar del CD.

Peter
fuente
¿Podría agregar la salida de impresión de parted?
Jeremy
Puede ver eso en los 2 enlaces pegados en la línea 993, pero por solicitud, lo agregaré a mi pregunta.
Peter

Respuestas:

8

La solución es usar una partición bios_grub, que no es lo mismo que la partición / boot.

Por defecto, la partición bios_grub es 1MiB, y debe estar marcada como bios_grub. La mía es la primera partición en mi disco. Si su partición 2 es realmente / boot como sugiere la partición, eso no sería correcto y debería hacer otra partición de 1MiB.

Con GPT y GRUB2, el sistema de archivos mínimo tiene tres particiones: bios_grub, root, swap. (no estoy seguro de que se requiera un intercambio)

¿Por qué grub no se inicia después de simplemente ejecutar "grub-install"?

Desconocido ... Uno pensaría que no modificaría nada si dice claramente que no puede incrustar, por lo que no puede funcionar.

¿Por qué dice "archivo no encontrado"?

/ vmlinuz es un enlace simbólico que usa la partición de arranque, y la partición de arranque está dañada. El código bios_grub se escribió sobre su estructura ext3. Esto probablemente significaba que / boot no estaba montado, y los archivos grub que se veían allí estaban realmente en el sistema raíz, que no contenía el núcleo.

¿Por qué no quiere instalar Grub sin esta configuración que configuré con Parted?

Una tabla de particiones GPT no tiene espacio para un gestor de arranque, a diferencia de MBR. Por lo tanto, se debe crear una partición específica para contener el código de arranque. Antes de ejecutar "grub-install", especifique esta partición con el comando:

    parted /dev/sda set 1 bios_grub on

Pensé que todo lo que necesitaba era un arranque separado. ¿Cómo lo instala el instalador de Ubuntu CD sin la configuración bios_grub?

Este requisito parece ser todo lo que se necesita para el instalador de Ubuntu, pero crea un sistema no estándar que se rompe fácilmente.

Cuando GRUB dice "Esta etiqueta de partición GPT no tiene Partición de arranque BIOS ", significa la partición bios_grub, no / boot.

Jeremy
fuente
Gracias. En realidad, esto está muy cerca de lo que estoy trabajando ahora. Vea mi "Todavía estoy completamente perdido sin una pista". sección de arriba. Ahora mi teoría es que el arranque fue sobrescrito por una cosa no grasa y no EFI, que es solo un código de grub que de otro modo hubiera estado en los sectores 0-63 antes. Estoy trabajando en un experimento y luego les haré saber cómo va.
Peter
¿Estás usando Ubuntu? ¿Hay alguna manera de que el instalador de Ubuntu pueda instalar correctamente usando la partición bios_grub?
Peter
@ Peter Yo uso Ubuntu, y si haces una partición guiada, el instalador debería configurarlo correctamente. Sé que lo hizo para mí con el instalador 11.10.
Jeremy
Muchas gracias. Esta es la respuesta. A continuación, intentaré con configuraciones más complejas (raid y lvm en el arranque) y luego editaré tu respuesta con detalles.
Peter