`install-grub` afirma que tengo varias etiquetas de partición y que la inserción es imposible

19

Estoy tratando de instalar GRUB en mi computadora de escritorio que no arranca, pero me encuentro con varios errores. Otras fuentes que discuten estos errores los han atribuido a la falta de espacio libre en el disco antes de la primera partición (tengo el espacio libre requerido) o a un problema con /boot/grub/grub.cfg(el problema persiste incluso después de regenerar ese archivo correctamente).

Arranqué con un USB en vivo e intenté reinstalar GRUB usando los siguientes comandos, pero encuentro un error que impide que funcione:

$ sudo mount / dev / sda1 / mnt
$ sudo grub-install - directorio-raíz = / mnt / dev / sda
Instalación para la plataforma i386-pc.
grub-install: advertencia: Intentando instalar GRUB en un disco con varias etiquetas de partición. Esto aún no es compatible.
grub-install: advertencia: la incrustación no es posible. GRUB solo se puede instalar en esta configuración mediante el uso de listas de bloqueo. Sin embargo, las listas de bloqueo NO SON CONFIABLES y se desaconseja su uso.
grub-install: error: no continuará con las listas de bloqueo.

Sin embargo, /dev/sdaparece estar formateado correctamente para instalar grub:

$ sudo fdisk -l / dev / sda

Disco / dev / sda: 111.8 GiB, 120034123776 bytes, 234441648 sectores
Unidades: sectores de 1 * 512 = 512 bytes
Tamaño del sector (lógico / físico): 512 bytes / 512 bytes
Tamaño de E / S (mínimo / óptimo): 512 bytes / 512 bytes
Tipo de etiqueta de disco: dos
Identificador del disco: 0x8d91017b

Dispositivo Arranque Inicio Fin Sectores Tamaño Id Tipo
/ dev / sda1 * 2048 234440703 234438656 111.8G 83 Linux

$ blkid / dev / sda1
/ dev / sda1: UUID = "84e9ff65-c4ba-42eb-8a6d-ebc703fae1f7" TYPE = "ext4" PARTUUID = "8d91017b-01"

Tiene el espacio libre estándar de 1 MiB al principio, y /dev/sda1está formateado correctamente. He intentado usar grub-mkconfigpara reconstruir el archivo de configuración:

$ for f en proc sys dev dev / pts; do sudo mount --bind / $ f / mnt / $ f; hecho
$ sudo chroot / mnt
# grub-mkconfig -o /boot/grub/grub.cfg
Generando archivo de configuración de grub ...
Imagen de Linux encontrada: /boot/vmlinuz-3.19.0-26-generic
Imagen de inicio encontrada: /boot/initrd.img-3.19.0-26-generic
Imagen de Linux encontrada: /boot/vmlinuz-3.19.0-23-generic
Imagen initrd encontrada: /boot/initrd.img-3.19.0-23-generic
Agregar entrada de menú de arranque para configuración de firmware EFI
hecho

Sin embargo, sigo recibiendo el mismo mensaje de error cuando ejecuto grub-install, ya sea dentro o fuera del chrootentorno.

Arrancando el USB en vivo en modo heredado, obtengo el mismo error; La única diferencia es el resultado de la ejecución grub-mkconfigen el chrootentorno:

# grub-mkconfig -o /boot/grub/grub.cfg
Generando archivo de configuración de grub ...
Imagen de Linux encontrada: /boot/vmlinuz-3.19.0-26-generic
Imagen de inicio encontrada: /boot/initrd.img-3.19.0-26-generic
Imagen de Linux encontrada: /boot/vmlinuz-3.19.0-23-generic
Imagen initrd encontrada: /boot/initrd.img-3.19.0-23-generic
Imagen de memtest86 + encontrada: /boot/memtest86+.elf
Imagen de memtest86 + encontrada: /boot/memtest86+.bin
Se encontró Windows 7 (cargador) en / dev / sdc1
hecho

¿Cómo puedo instalar grub correctamente?

AJMansfield
fuente

Respuestas:

25

Nuke la brecha entre el sector de arranque y la primera partición.

# dd if=/dev/zero of=/dev/sdX seek=1 count=2047

Eso es si la primera partición comienza en el sector 2048. Algunos comienzan antes, especialmente en unidades que fueron particionadas por Windows. Para estar seguro, corre

# fdisk -l /dev/sdX

antes de comenzar y verifique dónde comienza la primera partición. Use count=S-1, donde S es el comienzo de la primera partición.

enigmáticoFísico
fuente
Esto funcionó para mí. Estoy tratando de usar BTRFS junto con una partición ext4 / boot separada. Gracias.
Thales Ceolin
Tenga en cuenta que esto destruirá un diseño GPT. Sin embargo, es posible recuperarse de su copia de seguridad.
CR.
si está usando GPT, entonces necesita borrar la PARTICIÓN DE ARRANQUE DEL BIOS. Donde está eso depende de cómo colocaste tu disco. Puse el mío después del GPT, entre el bloque 34 y 2047, suponiendo que la primera partición "real" comience en el bloque 2048. La modificación de la línea de comandos dada para usar seek=34 count=2014funciona para mí.
starfry
¡¡¡¡funciona perfectamente!!!! grub debería hacerlo automáticamente
brauliobo
1
Sí, eso crees, @brauliobo, pero GRUB es basura total. Ya ni siquiera lo uso. En estos días, uso syslinux para mbr y systemd-boot para gpt.
enigmáticoFísico
3

Uno puede crear una nueva partición donde está el registro GPT, luego borrarlo usando dd. De esa manera, solo quedará el registro MBR.

Suponiendo que el dispositivo con problemas es /dev/sda:

Cree una nueva partición en el 1 MiB inicial

$ parted /dev/sda
$ mkpart primary ext4 0MiB 1MiB
$ quit

Luego, ponga a cero la partición recién creada

$ dd if=/dev/zero of=/dev/sda2

Luego, elimine la partición

$ parted /dev/sda
$ rm 2
$ quit

grub-install Ahora debería funcionar como se esperaba.

swaroop
fuente
Por favor, editar su respuesta para justificar lo que hace este código, y por qué cree que sea una solución.
Martin Thornton
Trabajó para mi. Editado para mayor claridad
Nitz
3

Tuve un problema similar con las etiquetas de múltiples particiones, aunque estoy bastante seguro de que ese no es el caso.

sudo grub-install target=i386-pc /dev/sda --force

es lo que solía solucionar esto. Agregar una --forceno es una solución "recomendada", pero hasta ahora no he tenido problemas = P

krum85
fuente
1

Esto es lo que hice para que funcione nuevamente:

Utilizado gdiskpara convertir la partición MBR a GPT, inserte una partición en el espacio vacío (escriba EF02 "Partición de arranque del BIOS"), transpuso su entrada con mi partición original y la marcó como BIOS de arranque heredado.

Luego corrió

$ sudo mount / dev / sda1 / mnt
$ sudo grub-install - directorio-raíz = / mnt / dev / sda

Luego se instaló correctamente y pude arrancar desde mi unidad principal.

AJMansfield
fuente