GRUB (Español)
zh-CN:GRUB2 zh-TW:GRUB2 Template:Article summary start Template:Article summary text Template:Article summary heading Template:Article summary text Template:Article summary heading Template:Article summary wiki - BURG es un gestor de arranque de nueva concepción basado en GRUB v2. Es un nuevo formato que permite ser compilado por numerosos sistemas operativos y dispone de un sistema de menú altamente configurable que funciona tanto en modalidad gráfica, como textual. Template:Article summary wiki - La versión anterior, ahora obsoleta. Template:Article summary heading Template:Article summary wiki Template:Article summary link Template:Article summary end
GRUB —no confundir con GRUB Legacy— es la nueva generación de GRand Unified Bootloader (GRUB). GRUB deriva de PUPA, un proyecto de investigación destinado a mejorar lo que hoy es GRUB Legacy. GRUB ha sido totalmente reescrito a fin de proporcionar una mayor modularidad y portabilidad [1].
En resumen, el gestor de arranque («bootloader») es el primer programa que se ejecuta cuando se inicia el equipo. Es el responsable de cargar y transferir el control al kernel de Linux, que, a su vez, inicializa el resto del sistema operativo.
Contents
- 1 Prefacio
- 2 Instalación
- 2.1 Sistemas BIOS
- 2.2 Sistemas UEFI
- 3 Configuración
- 3.1 Generación automática utilizando grub-mkconfig
- 3.2 Creación manual de grub.cfg
- 3.3 Arranque dual
- 3.4 Configuración del aspecto
- 3.5 Otras opciones
- 3.5.1 LVM
- 3.5.2 RAID
- 3.5.3 Nomenclatura permanente de dispositivos de bloque
- 3.5.4 Utilizar etiquetas
- 3.5.5 Recordar el último sistema arrancado
- 3.5.6 Cambiar la entrada por defecto del menú
- 3.5.7 Seguridad
- 3.5.8 Partición root cifrada
- 3.5.9 Efectuar el arranque de una entrada no predeterminada por una sola vez
- 3.5.10 Ocultar GRUB y hacerlo aparecer mediante la tecla shift
- 3.6 Iniciar una imagen ISO directamente desde GRUB
- 4 Utilizar la shell
- 5 Herramientas GUI de configuración
- 6 parttool para mostrar/ocultar particiones
- 7 Utilizar la consola de emergencia
- 8 Combinar UUID y scripting
- 9 Solución de problemas
- 9.1 Algunas Bios de Intel no efectúan el arranque de la partición GPT
- 9.2 Activar mensajes de depuración en GRUB
- 9.3 Corregir el error de GRUB: «no suitable mode found»
- 9.4 Mensaje de error msdos-style
- 9.5 GRUB UEFI vuelve a la shell
- 9.6 GRUB UEFI no se carga
- 9.7 Invalid signature
- 9.8 Bloqueos al arrancar
- 9.9 Restaurar GRUB Legacy
- 9.10 Arch no es detectado por otros Sistemas Operativos
- 10 Referencias
- 11 Véase también
Prefacio
- El nombre de GRUB oficialmente se refiere a la versión 2 del software, consulte [2]. Si se está buscando el artículo sobre la versión legacy, consulte GRUB Legacy.
- GRUB soporta el uso del sistema de archivos Btrfs para la partición root (sin necesidad de una partición
/boot
separada con sistema de archivos distinto) compatible con los algoritmos de compresión zlib o LZO.
Nota para los usuarios de GRUB Legacy
- La actualización de GRUB Legacy a GRUB es un proceso muy similar al de una instalación limpia de GRUB, argumento tratado aquí.
- Hay diferencias en las órdenes de GRUB Legacy y GRUB. Le recomendamos que se familiarice con los órdenes de GRUB antes de continuar. (Por ejemplo, «find» (encontrar) ha sido reemplazado por «search» (buscar)).
- GRUB es ahora modular, y ya no requiere «stage 1.5». En consecuencia, el gestor de arranque tiene una capacidad limitada y los módulos son cargados desde el disco duro en caso de necesidad (por ejemplo, si necesita soporte de LVM o RAID).
- Las reglas de la nomenclatura de los dispositivos cambian de GRUB Legacy a GRUB: Los discos duros están siendo ahora numerados a partir de 0, mientras que las particiones comienzan en 1 y son seguidos por el nombre del sistema de particionamiento usado. Por ejemplo,
/dev/sda1
hace referencia a(hd0,msdos1)
(para sistemas que usan MBR), o a(hd0,gpt1)
(para los sistemas que usan GPT).
- Si se utiliza systemd sin el paquete systemd-sysvcompat, y se tiene insertada la línea
init=/usr/lib/systemd/systemd
en su antiguo menu.lst de grub, el archivo grub.cfg generado automáticamentethe puede no contener este parámetro del kernel (causando el mensaje «ERROT: Root device mounted successfully, but /sbin/init does not exist» en el arranque). En este caso, edite la entrada de Arch Linux que muestra grub, añadainit=/usr/lib/systemd/systemd
a los parámetros del kernel, y luego hágalo permanente.
- GRUB ocupa mucho más espacio respecto a GRUB legacy (ocupa alrededor de ~13 MB en /boot). Si se efectúa el arranque desde una partición /boot separada con un tamaño menor de 32 MB, se tendrán problemas de espacio en el disco, y pacman se negará a instalar kernels nuevos. Si no desea volver a redimensionar el sistema, cambie a Syslinux, en su lugar, que requiere menos espacio, (ocupa alrededor de ~1.5 MB en /boot).
Realizar una copia de seguridad de los datos importantes
En general, la instalación de GRUB debería ser un éxito, pero es recomendable conservar los archivos de GRUB-legacy antes de instalar el paquete GRUB v2.
# mv /boot/grub /boot/grub-legacy
Haga una copia de seguridad del MBR dado que contiene el código de arranque y la tabla de particiones (sustituya /dev/sdX
con el identificativo de su disco):
# dd if=/dev/sdX of=/path/to/backup/mbr_backup bs=512 count=1
Solo los primeros 446 bytes del MBR contiene el código de arranque, mientras que los 64 restantes están dedicados a la tabla de particiones. Si no desea sobrescribirla, durante una eventual recuperación, se recomienda hacer copia de seguridad solo del código de arranque:
# dd if=/dev/sdX of=/path/to/backup/bootcode_backup bs=446 count=1
Si no ha sido capaz de instalar con éxito GRUB, consulte cómo restaurar GRUP Legacy.
Requisitos previos para GRUB
Sistemas BIOS
Instrucciones específicas para GUID Partition Table (GPT)
Para acloparse a la BIOS-GPT, GRUB requiere una partición propia (BIOS Boot Partition), en la que se ubica su core.img
, ante la carencia de espacio (31KiB) después del MBR en los sistemas que utilizan el método de particionado GPT (en dicho lugar se ubica la GPT Primary Header y la Primary Partition Table).
Esta partición se utiliza por GRUB solo en las configuraciones de BIOS-GPT, y no es necesario cuando se utiliza el método clásico de particionado (MBR) o si está en un sistema UEFI. Syslinux tampoco requiere esta partición.
Para las configuraciones de BIOS-GPT, cree una partición de aproximadamente 1007 KiB usando gdisk, cgdisk o GNU Parted sin asignarle un sistema de archivos. El tamaño de 1007 KiB permitirá a la partición ser alineada correctamente a 1024 KiB. Si es necesario, la partición también puede estar ubicada en otro lugar del disco, pero debe estar zona correspondiente a los primeros 2 TiB. Ajuste la partición al código tipo ef02
, si se utiliza la herramienta (c)gdisk, o set <BOOT_PART_NUM> bios_grub on
, si se usa GNU Parted.
- Se debe crear la partición mencionada antes de ejecutar la orden
grub-install
ogrub-setup
. - gdisk le permitirá crear la partición en cuestión de forma que reduzca al mínimo la pérdida de espacio (sectores 34-2047), desde el momento en que gdisk alinea automáticamente las particiones a un sector múltiple de 2048, si es posible.
Instrucciones específicas para Master Boot Record (MBR)
Por lo general, el espacio usable después del MBR (después de los 512 bytes dedicados a ella, y antes de la primera partición), es de 31 Kb, de modo que si hay algún problema de alineación de los cilindros se resuelven en la tabla de particiones. Sin embargo, se recomienda mantener una distancia de aproximadamente 1 MiB que proporcionará el espacio suficiente para contener core.img
de GRUB (FS#24103). Es recomendable utilizar una herramienta de particionado que permita la alineación de una partición de 1 MiB después del MBR, de modo que se pueda obtener el espacio necesario, y resolver otros problemas fuera de los primeros 512 bytes (que son ajenos a la incrustación de core.img
).
Sistemas UEFI
Crear y montar UEFI SYSTEM PARTITION
Siga las instrucciones sobre cómo crear una partición UEFI del sistema para crear una UEFI System Partition. A continuación, proceda a montar la partición UEFI System Partition en /boot/efi
. Si dicha partición está montada en algún otro punto de montaje, sustituya /boot/efi
en consecuencia en las órdenes siguientes:
# mkdir -p /boot/efi # mount -t vfat <UEFI_SYSTEM_PARTITION> /boot/efi
Cree una carpeta /boot/efi/EFI
:
# mkdir /boot/efi/EFI
Instalación
Sistemas BIOS
GRUB puede ser instalado con el paquete grub disponible en los repositorios oficiales. Este reemplazará a grub-legacy , si está instalado.
/boot/grub/i386-pc/core.img
o los módulos de GRUB en /boot/grub/i386-pc
. Para ello es necesario actualizar la imagen core.img
y los módulos de forma manual utilizando grub-install
, como se explica a continuación.Instalar los archivos de arranque de grub
Hay tres formas de instalar los archivos de arranque de GRUB en un sistema BIOS :
- #Instalación en la «BIOS Boot Partition» con el esquema de particionado GPT (recomendado con GPT),
- #Instalación en la región de 440 bytes del MBR (recomendado con MBR),
- #Instalación en una partición o disco sin particiones (no recomendado),
- #Generar únicamente core.img (el método más seguro, pero requiere de un gestor de arranque diferente, como GRUB Legacy o Syslinux, que permitirá interactuar con
/boot/grub/i386-pc/core.img
).
Instalación en la «BIOS Boot Partition» con el esquema de particionado GPT
Los discos particionados con GUID Partition Table no tienen reservado un «seguimiento del arranque». Por lo tanto, es necesario crear una partición de arranque de la BIOS —la «BIOS Boot Partition» (ef02
)— donde residirá la imagen principal de GRUB.
Usando GNU Parted, se puede hacer esta operación, usando una orden como la siguiente:
# parted /dev/disk set partition-number bios_grub on
Si está utilizando gdisk, establezca el tipo de partición a Template:Keypress. Con los programas de particionado que requieren establecer la GUID directamente, esta última debe mostrar el valor ‘21686148-6449-6e6f-744e656564454649’
(o Hah!IdontNeedEFI
).
Para configurar grub
en un disco GPT, hay que darle contenido al directorio /boot/grub
, generar el archivo /boot/grub/i386-pc/core.img
, e incrustarlo en la BIOS Boot Partition, para hacer todo lo cual ejecutaremos:
# modprobe dm-mod # grub-install --target=i386-pc --recheck --debug /dev/sda
donde /dev/sda
es el disco de destino de la instalación.
Continue con el apartado sobre cómo crear un archivo de configuración.
Instalación en la región de 440 bytes del MBR
Para instalar grub
en la región de los 440 bytes relativa al código de arranque, también llamada Master Boot Record, tenemos que poblar la carpeta /boot/grub
, crear /boot/grub/i386-pc/core.img
, insértela en el sector de los 31KiB (el tamaño mínimo varía dependiendo de la alineación de las particiones) después del MBR, y generar el archivo de configuración, para lo cual ejecutaremos:
# modprobe dm-mod # grub-install --recheck /dev/sdX
donde /dev/sdX
es la partición de destino (En el caso de particionamientos MBR, se refiere al primer disco SATA). Si utiliza LVM para la partición /boot
, puede instalar GRUB en todos los discos físicos.
Continue con GRUB#Generate config file.
Instalación en una partición o disco sin particiones
Para instalar grub en el sector de arranque de una partición o disco sin particiones (por ejemplo, superfloppy), hay que ejecutar (suponiendo que el dispositivo es /dev/sdaX
y que corresponde a la partición /boot
):
# modprobe dm-mod # grub-install --target=i386-pc --recheck --debug --force /dev/sdaX # chattr -i /boot/grub/i386-pc/core.img # chattr +i /boot/grub/i386-pc/core.img
Necesitará la opción --force
para permitir el uso de blocklists, pero no se debe usar --grub-setup=/bin/true
(lo que equivale a generar únicamente core.img
).
grub-install
emitirá los mensajes de advertencia que sirven para explicar los riesgos de este enfoque:
/sbin/grub-setup: warn: Attempting to install GRUB to a partitionless disk or to a partition. This is a BAD idea. /sbin/grub-setup: warn: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However, blocklists are UNRELIABLE and their use is discouraged.
Sin la opción --force
, recibirá el siguiente error y, consiguientemente, grub-setup
no podrá instalar su propio código en el MBR.
/sbin/grub-setup: error: will not proceed with blocklists
Especificando --force
, sin embargo, debe obtener:
Installation finished. No error reported.
El motivo de ello es porque grub-setup
no realiza automáticamente esta operación al instalar el gestor de arranque en una partición, o en un disco sin particiones, ya que grub
se basa en los mismos blocklists integrados en el sector de arranque de la partición para localizar /boot/grub/i386-pc/core.img
y la ruta del directorio /boot/grub
. Las áreas que contienen los archivos de arriba pueden cambiar en caso de alteración de la partición (al copiar o borrar archivos, etc.) Para obtener más información, consulte https://bugzilla.redhat.com/show_bug.cgi?id=728742 y https://bugzilla.redhat.com/show_bug.cgi?id=730915.
La solución propuesta consiste en establecer una etiqueta permanente a /boot/grub/i386-pc/core.img
, de modo que la posición de core.img
en el disco no se vea alterada. La etiqueta permanente de /boot/grub/i386-pc/core.img
es necesaria establecerla solo si grub
se encuentra instalado en el sector de arranque de una partition o disco sin particiones, y no en el caso de una instalación sencilla en el MBR o de la generación de core.img
sin incorporarla en ningún sector de arranque (mencionado anteriormente).
Generar únicamente core.img
Para completar la carpeta /boot/grub
y generar un /boot/grub/i386-pc/core.img
sin instalar grub
en el MBR, añada --grub-setup=/bin/true
a grub-install
:
# modprobe dm-mod # grub-install --target=i386-pc --grub-setup=/bin/true --recheck --debug /dev/sda
A continuación, puede realizar el traslado de la core.img
de GRUB desde GRUB Legacy o syslinux como un kernel de Linux o un kernel multiarranque.
Crear un archivo de configuración
Por último, generaremos un archivo de configuración de GRUB (puede encontrar más información en la sección «Configuración»):
# grub-mkconfig -o /boot/grub/grub.cfg
/boot/grub/grub.cfg
, NO /boot/grub/i386-pc/grub.cfg
.Si GRUB muestra el error «no suitable mode found» durante el arranque, consulte cómo corregir el error GRUB: «no suitable mode found».
Si grub-mkconfig
no llegara a prosperar, convierta su /boot/grub/menu.lst
a /boot/grub/grub.cfg
con :
# grub-menulst2cfg /boot/grub/menu.lst /boot/grub/grub.cfg
Por ejemplo:
/boot/grub/menu.lst
default=0 timeout=5 title Arch Linux Stock Kernel root (hd0,0) kernel /vmlinuz-linux root=/dev/sda2 ro initrd /initramfs-linux.img title Arch Linux Stock Kernel Fallback root (hd0,0) kernel /vmlinuz-linux root=/dev/sda2 ro initrd /initramfs-linux-fallback.img
/boot/grub/grub.cfg
set default='0'; if [ x"$default" = xsaved ]; then load_env; set default="$saved_entry"; fi set timeout=5 menuentry 'Arch Linux Stock Kernel' { set root='(hd0,1)'; set legacy_hdbias='0' legacy_kernel '/vmlinuz-linux' '/vmlinuz-linux' 'root=/dev/sda2' 'ro' legacy_initrd '/initramfs-linux.img' '/initramfs-linux.img' } menuentry 'Arch Linux Stock Kernel Fallback' { set root='(hd0,1)'; set legacy_hdbias='0' legacy_kernel '/vmlinuz-linux' '/vmlinuz-linux' 'root=/dev/sda2' 'ro' legacy_initrd '/initramfs-linux-fallback.img' '/initramfs-linux-fallback.img' }
Si se ha reiniciado el sistema, olvidándose de crear /boot/grub/grub.cfg
ejecute el arranque en la shell de órdenes de GRUB y escriba:
sh:grub> insmod legacycfg sh:grub> legacy_configfile ${prefix}/menu.lst
Ello arranca Arch Linux y, luego, vuelva a crear /boot/grub/grub.cfg
de manera adecuada.
Multiarranque para sistemas BIOS
El multiarranque debería funcionar una vez instalado grub, pero es necesario tener instalada una utilidad adicional: os-prober. Instale dicho programa, y vuelva a ejecutar grub-mkconfig -o /boot/grub/grub.cfg. Si esta operación automática falla, puede intentar añadir manualmente una entrada siguiendo las instrucciones de abajo.
Inicio de Microsoft Windows en sistemas BIOS-MBR
bootmgr
y la carga del sector de arranque no es necesaria para que Windows ejecute su configuración de la BIOS-MBRA lo largo de esta sección, se asume que la partición de Windows es /dev/sda1. Para una partición diferente, cambie todos los ejemplos de hd0,msdos1. Primero, encuentre el UUID del sistema de archivos NTFS de la partición SYSTEM PARTITION de Windows, donde bootmgr
y sus archivos residen. Por ejemplo, si bootmgr
de Windows se encuentra en /media/Windows/bootmgr
:
Para Windows Vista/7/8:
# grub-probe --target=fs_uuid /media/SYSTEM_RESERVED/bootmgr 69B235F6749E84CE
# grub-probe --target=hints_string /media/SYSTEM_RESERVED/bootmgr --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1
bootmgr
por NTLDR
en las órdenes anteriores. Y tenga en cuenta que puede no haber una partición SYSTEM_RESERVED separada; basta con buscar el archivo NTLDR en la partición principal de Windows.A continuación, agregue el anterior código en el archivo /etc/grub.d/40-custom
o /boot/grub/custom.cfg
y regenere grub.cfg
con grub-mkconfig
, como se explicó anteriormente, para cargar Windows (XP, Vista, 7 o 8) instalado en la modalidad BIOS-MBR:
Para Windows Vista/7/8:
menuentry "Microsoft Windows Vista/7/8 BIOS-MBR" { insmod part_msdos insmod ntfs insmod search_fs_uuid insmod ntldr search --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 69B235F6749E84CE ntldr /bootmgr }
Para Windows XP:
menuentry "Microsoft Windows XP" { insmod part_msdos insmod ntfs insmod search_fs_uuid insmod ntldr search --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 69B235F6749E84CE ntldr /ntldr }
El archivo /etc/grub.d/40_custom
se puede utilizar como una plantilla para crear /etc/grub.d/nn_custom
. Donde nn
define la prioridad, indicando el orden en que los scripts son ejecutados. El orden de ejecución de los scripts determina la posición de las entradas en el menú de arranque de grub.
nn
debe tener un valor mayor que 06 para garantizar que los scripts necesarios del sistema sean ejecutados primero.Sistemas UEFI
Primero, instale el package grub y, a continuación, siga las siguientes instrucciones.
core.efi
ni los módulos de GRUB ubicados en la UEFI System Partition. Es necesario hacerlo manualmente usando grub-install
como se explica a continuación.Instalar los archivos de arranque
Instalar en la partición UEFI system partition
- Presumimos que estamos usando las siguientes órdenes al instalar GRUB para
x86_64-efi
(paraIA32-efi
sustituyax86_64
coni386
en las órdenes siguientes). - Para hacer que esto funcione necesita arrancar en modalidad UEFI y no mediante BIOS. Si se ha efectuado el arranque simplemente copiando el archivo ISO de instalación en una unidad USB, será necesario seguir esta guía o grub-install mostrará errores
La UEFI system partition debe ser instalada en /boot/efi
para que el script de instalación de GRUB la reconozca:
# mkdir -p /boot/efi # mount -t vfat /dev/sdXY /boot/efi
A continuación, instale el aplicación UEFI de GRUB y sus módulos en /boot/grub/x86_64-efi
(recomendado) usando:
# modprobe dm-mod # grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=arch_grub --recheck --debug
--target
o --directory
, grub-install
no logrará determinar el tipo de firmware sobre el que GRUB será instalado, lo que mostrará el siguiente mensaje de error: source_dir doesn't exist. Please specify --target or --directory
Si desea instalar los módulos de grub y grub.cfg
en la carpeta /boot/efi/EFI/grub
y la aplicación grubx64.efi
en /boot/efi/EFI/arch_grub
(es decir, todos los archivos uefi de grub dentro de la misma partición UEFISYS), utilice las siguientes órdenes:
# modprobe dm-mod # grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=arch_grub --boot-directory=/boot/efi/EFI --recheck --debug # mkdir -p /boot/efi/EFI/grub/locale # cp /usr/share/locale/en\@quot/LC_MESSAGES/grub.mo /boot/efi/EFI/grub/locale/en.mo
La opción --efi-directory
indica el punto de montaje de la partición UEFI del sistema, --bootloader-id
indica el nombre del directorio donde se instalará la aplicación grubx64.efi
, y --boot-directory
contiente la ruta de acceso al directorio de instalación de los módulos (y será la sede del archivo de configuración grub.cfg
).
Las rutas reales son las siguientes:
<efi-directory>/<efi o EFI>/<bootloader-id>/grubx64.efi
<boot-directory>/grub/x86_64-efi/<tutti i moduli, grub.efi, core.efi, grub.cfg>
--bootloader-id
no cambia la ruta de <boot-directory>/grub
. Por ejemplo, no podremos instalar los módulos en <boot-directory>/<bootloader-id>
, porque la ruta está codificada en <boot-directory>/grub
.Si --efi-directory=/boot/efi --boot-directory=/boot/efi/EFI --bootloader-id=grub
:
<efi-directory>/<EFI or efi>/<bootloader-id> == <boot-directory>/grub == /boot/efi/EFI/grub
Si --efi-directory=/boot/efi --boot-directory=/boot/efi/EFI --bootloader-id=arch_grub
:
<efi-directory>/<EFI or efi>/<bootloader-id> == /boot/efi/EFI/arch_grub <boot-directory>/grub == /boot/efi/EFI/grub
Si --efi-directory=/boot/efi --boot-directory=/boot --bootloader-id=arch_grub
:
<efi-directory>/<EFI or efi>/<bootloader-id> == /boot/efi/EFI/arch_grub <boot-directory>/grub == /boot/grub
Si --efi-directory=/boot/efi --boot-directory=/boot --bootloader-id=grub
:
<efi-directory>/<EFI or efi>/<bootloader-id> == /boot/efi/EFI/grub <boot-directory>/grub == /boot/grub
El archivo <efi-directory>/<EFI or efi>/<bootloader-id>/grubx64.efi
es una copia exacta de <boot-directory>/grub/x86_64-efi/core.efi
.
- Desde GRUB 2.00, la opción
--efi-directory
degrub-install
sustituye a la antigua--root-directory
, que está en desuso. - Las opciones
--efi-directory
y--bootloader-id
son especificaciones de GRUB UEFI.
En todos los casos, la partición UEFI del sistema debe montarse por grub-install
para instalar grubx64.efi
, que, luego, será lanzado por el firmware (con la entrada creada con efibootmgr
, en los sistemas que no son Mac).
Si mira de cerca, se dará cuenta de la ausencia de una opción que especifica el dispositivo en el que instalar el gestor de arranque (por ejemplo, /dev/sda
). Estas opciones son ignoradas por el script de instalación, ya que los gestores de arranque UEFI no utilizan el MBR de la partición.
Ahora será capaz de arrancar a través de UEFI creando un grub.cfg
siguiendo los apartados: Crear un archivo de configuración para GRUB UEFI y Crear una entrada para GRUB en el Firmware Boot Manager.
Crear un archivo de configuración
Se puede generar un archivo de configuración de GRUB usando la siguiente orden:
# grub-mkconfig -o <boot-directory>/grub/grub.cfg
<boot-directory>/grub/grub.cfg
, NO <boot-directory>/grub/x86_64-efi/grub.cfg
.Si ha utilizado --boot-directory=/boot
:
# grub-mkconfig -o /boot/grub/grub.cfg
Si, en cambio, utiliza --boot-directory=/boot/efi/EFI
:
# grub-mkconfig -o /boot/efi/EFI/grub/grub.cfg
Las rutas anteriores son independientes del valor de la opción --bootloader-id
.
Si GRUB muestra el error «no suitable mode found», consulte GRUB (Español)#Corregir el error de GRUB: «no suitable mode found»
Crear entrada de GRUB en el gestor de arranque del firmware
A partir de la versión 2.00 de grub-efi-x86_64, grub-install
intentará crear automáticamente una entrada de menú en el gestor de arranque. Si no es así, véase la guía para principiantes para obtener instrucciones sobre cómo usar efibootmgr
a fin de crear una entrada en el menú. De todas formas, el problema probablemente sea que no se ha arrancado el CD/USB en la modalidad UEFI, como se indica en Unified_Extensible_Firmware_Interface_(Español)#Crear_un_USB_booteable_de_UEFI_desde_la_ISO
Construir una aplicación UEFI Standalone para GRUB
Es posible crear una aplicación UEFI standalone (grubx64_standalone.efi), que incluye todos los módulos necesarios en el interior de un memdisk, eliminando virtualmente la necesidad de contar con un directorio separado que contenga todos los módulos UEFI de GRUB y otros archivos relacionados. Para lograr el objetivo, vamos a utilizar la orden grub-mkstandalone
, incluida en el paquete grub.
La forma más sencilla de hacerlo es a través de la orden de instalación que se mencionó anteriormente, sin embargo, teniendo cuidado de especificar los módulos que desea incluir. Por ejemplo:
# grub-mkstandalone --directory="/usr/lib/grub/x86_64-efi/" --format="x86_64-efi" --compression="xz" \ --output="/boot/efi/EFI/arch_grub/grubx64_standalone.efi" <archivos adicionales que se desea incluir>
El archivo grubx64_standalone.efi
asume que grub.cfg
se encuentra en su $prefix, es decir, (memdisk)/boot/grub
. El memdisk se incluye a continuación en la aplicación EFI. El script grub-mkstandlone
le permite especificar los archivos a incluir en la imagen memdisk como argumentos del script (en <archivos adicionales que se desea incluir>).
Si, por ejemplo, el archivo grub.cfg
se encuentra en /home/usuario/Desktop/grub.cfg
, se creará un directorio temporal /home/usuario/Desktop/boot/grub
y se copiará el archivo /home/usuario/Desktop/grub.cfg
en /home/usuario/Desktop/boot/grub/grub.cfg
y, finalmente, se colocará en /home/usuario/Desktop/boot/grub/grub.cfg
con la orden cd
y, a continuación, ejecutaremos:
# grub-mkstandalone --directory="/usr/lib/grub/x86_64-efi/" --format="x86_64-efi" --compression="xz" \ --output="/boot/efi/EFI/arch_grub/grubx64_standalone.efi" "boot/grub/grub.cfg"
La razón de usar cd
en /home/user/Desktop/boot/grub/
es que hace pasar la ruta del archivo como boot/grub/grub.cfg
(nótese la ausencia de una barra - boot/ vs /boot/) y ello por que dir1/dir2/file
se incluye como (memdisk)/dir1/dir2/file
por el script grub-mkstandalone
.
Si pasa /home/user/Desktop/grub.cfg
en el archivo se incluirá como (memdisk)/home/user/Desktop/grub.cfg
. Si pasa /home/user/Desktop/boot/grub/grub.cfg
en el archivo se incluirá como (memdisk)/home/user/Desktop/boot/grub/grub.cfg
. Esa es la razón para ejecutar cd en /home/user/Desktop/boot/grub/
que pasa a boot/grub/grub.cfg
, para incluir el archivo como (memdisk)/boot/grub/grub.cfg
, que es lo que grub.efi
espera que el archivo sea.
Ahora tendrá que crear una entrada en UEFI Boot Manager para /boot/efi/EFI/arch_grub/grubx64_standalone.efi
usando efibootmgr
. Consulte Cómo crear una entrada de GRUB en el gestor de arranque del firmware.
Multiarranque en sistemas UEFI
Ejecutar la carga de Microsoft Windows en sistemas de UEFI-GPT
Se puede encontrar el UUID del sistema de archivos FAT32 en la partición UEFI del sistema, donde residen los archivos del gestor de arranque UEFI de Windows. Por ejemplo, si el archivo bootmgfw.efi
se encuentra en /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi
(se ignora la diferencia entre letras mayúsculas y minúsculas, dado que son irrelevantes en un sistema de archivos FAT), ejecute:
# grub-probe --target=fs_uuid /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi 1ce5-7f28
# grub-probe --target=hints_string /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi --hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt
A continuación, agregue el siguiente código a /etc/grub.d/40_custom
para ejecutar la carga de Windows x86_64 (Vista SP1+, 7 o 8) instalado en el sistema UEFI-GPT:
menuentry "Microsoft Windows Vista/7/8 x86_64 UEFI-GPT" { insmod part_gpt insmod fat insmod search_fs_uuid insmod chain search --fs-uuid --set=root --hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1 1ce5-7f28 chainloader /efi/Microsoft/Boot/bootmgfw.efi }
Por último, regenere /boot/grub/grub.cfg
# grub-mkconfig -o /boot/grub/grub.cfg
Configuración
Es posible generar grub.cfg
de forma automática o modificarlo manualmente.
- Para sistemas EFI, si GRUB se ha instalado con la opción de
--boot-directory
activa,grub.cfg
debe ser colocado en el mismo directorio degrubx64.efi
. De lo contrario,grub.cfg
se posicionará en/boot/grub
, al igual que ocurre con la versión BIOS de GRUB. - Aquí puede encontar una guía completa sobre cómo configurar GRUB.
Generación automática utilizando grub-mkconfig
El equivalente del viejo menu.lst
está representado por los archivos /etc/default/grub
y /etc/grub.d/*
. Estos archivos son utilizados generalmente por grub-mkconfig
para generar /boot/grub/grub.cfg
. Por defecto, las fuentes del script para la salida estándar. Para generar un archivo grub.cfg
use la siguiente orden:
# grub-mkconfig -o /boot/grub/grub.cfg
/etc/grub.d/10_linux
se establece para agregar automáticamente las entradas del menú para Arch Linux que funcionan una vez instalado, en cualquier configuración. Para otros sistemas operativos puede ser necesario añadir entradas a /etc/grub.d/40_custom
o /boot/grub/custom.cfg
.
Argumentos adicionales
Si necesita pasar parámetros especiales a la imagen del kernel, es necesario colocarlos en la variable GRUB_CMDLINE_LINUX
contenida en el archivo /etc/default/grub
. Esto es análogo a colocar los parámetros directamente en la línea del kernel, como ocurría con el antiguo GRUB Legacy.
Por ejemplo, para permitir restaurar el sistema después de la hibernación, se utilizará el parámetro GRUB_CMDLINE_LINUX="resume=/dev/sdaX"
, donde sdaX
muestra la partición swap.
También es posible usar GRUB_CMDLINE_LINUX="resume=/dev/disk/by-uuid/${swap_uuid}"
, donde ${swap_uuid}
se refiere a UUID de la propia partición swap.
Si necesita pasar más de un parámetro, se separan las opciones con un espacio: por ejemplo, si desea utilizar las funciones «resume» y «systemd», tendremos:
GRUB_CMDLINE_LINUX="resume=/dev/sdaX init=/bin/systemd"
Consulte el artículo sobre los parámetros del kernel para obtener más información.
Creación manual de grub.cfg
Un archivo grub.cfg
básico contendrá las siguientes opciones:
-
(hdX,Y)
indica la partición Y en el disco X. La numeración de partición comienza en 1, mientras que la del disco comienza en 0 -
set default=N
le permite elegir qué entrada se inicia por defecto -
set timeout=N
indica el límite de tiempo en segundos antes que la elección predefinida se inicie -
menuentry "title" {opciones
} es una entrada de arranque de nombretitle
-
set root=(hdX,Y)
establece la partición de arranque, es decir, la que contiene el kernel y los módulos de GRUB (no es necesario una partición separada:/boot
puede estar contenido dentro de la partición root).
Un ejemplo de configuración:
/boot/grub/grub.cfg
# Config file for GRUB - The GNU GRand Unified Bootloader # /boot/grub/grub.cfg # DEVICE NAME CONVERSIONS # # Linux Grub # ------------------------- # /dev/fd0 (fd0) # /dev/sda (hd0) # /dev/sdb2 (hd1,2) # /dev/sda3 (hd0,3) # # Timeout for menu set timeout=5 # Set default boot entry as Entry 0 set default=0 # (0) Arch Linux menuentry "Arch Linux" { set root=(hd0,1) linux /vmlinuz-linux root=/dev/sda3 ro initrd /initramfs-linux.img } ## (1) Windows #menuentry "Windows" { #set root=(hd0,3) #chainloader +1 #}
Arranque dual
Utilizar grub-mkconfig
La mejor manera de agregar más entradas es modificar el archivo /etc/grub.d/40_custom
o /boot/grub/custom.cfg
, de modo que se agregan automáticamente al archivo grub.cfg
cuando se lanza grub-mkconfig
. Después de hacer los cambios, ejecute:
# grub-mkconfig -o /boot/grub/grub.cfg
para generar un archivo grub.cfg
actualizado.
Con GNU/Linux
Si la otra distribución está en /dev/sda2
:
menuentry "Other Linux" { set root=(hd0,2) linux /boot/vmlinuz (añadir aquí otras opciones necesarias al kernel) initrd /boot/initrd.img (si otro kernel usa/necesita una) }
Con FreeBSD
Requiere que FreeBSD está instalado en una partición formateada con UFS. Si FreeBSD está en sda4
:
menuentry "FreeBSD" { set root=(hd0,4) chainloader +1 }
Con Windows
Partimos de la base de que la partición de windows es sda3
. Recuerde que es necesario señalar la partición reservada del sistema a la orden set root
y chainloader
, es decir, la que crea Windows durante la instalación, y que no es la partición en la que Windows en realidad reside. El ejemplo propuesto solo funciona si la partición reservada es sda3
.
# (2) Windows XP menuentry "Windows XP" { set root="(hd0,3)" chainloader +1 }
Si el bootloader de Windows está en otro disco duro diferente que GRUB, puede que tenga que engañar a Windows haciéndole creer que reside en la primera unidad. Esto fue posible con el antiguo GRUB Legacy con drivemap
. Suponiendo que GRUB se encuentra en hd0
y Windows en hd2
, debe agregar la siguiente línea después de set root
:
drivemap -s hd0 hd2
Con Windows usando EasyBCD y NeoGRUB
Puede que NeoGRUB no entienda el nuevo formato del menú de GRUB, por lo que será necesario efectuar la carga de GRUB, reemplazando el contenido de su C:\NST\menu.lst
con:
default 0 timeout 1
title Chainload into GRUB v2 root (hd0,7) kernel /boot/grub/i386-pc/core.img
Configuración del aspecto
En GRUB puede cambiar el aspecto del menú.
Asegúrese de haber inicializado el terminal gráfico de GRUB (gfxterm), utilizando una modalidad de vídeo adecuado (gfxmode). Para más información se puede consultar este apartado. La modalidad de vídeo establecida a continuación, se pasará al kernel a través de gfxpayload
; por lo tanto, esta solicitud asegurará que cada configuración del aspecto tenga efecto.
Ajustar la resolución del framebuffer
GRUB permite ajustar el framebuffer tanto para él mismo como para el kernel. El antiguo parámetro vga=
está en desuso. El método recomendado es modificar /etc/default/grub
de la siguiente manera:
GRUB_GFXMODE=1024x768x32 GRUB_GFXPAYLOAD_LINUX=keep
Para que los cambios tengan efecto, ejecute:
# grub-mkconfig -o /boot/grub/grub.cfg
La opción gfxpayload
se asegurará de que la resolución se mantendrá y pasará al kernel.
- Si este ejemplo no funciona, pruebe a sustituir
gfxmode="1024x768x32"
convbemode="0x105"
. - Para una lista de todos las modalidades de vídeo disponibles es suficiente ejecutar la orden
hwinfo --framebuffer
(hwinfo está disponible en [community], mientras que para el prompt de GRUB se utiliza la ordenvbeinfo
(es necesario cargar el módulo vbe en primer lugar).
Si este método falla, la antigua opción vga=
sigue siendo válida. Añadimos vga=
a la opción GRUB_CMDLINE_LINUX_DEFAULT
en /etc/default/grub
. Por ejemplo: "GRUB_CMDLINE_LINUX_DEFAULT="quiet splash vga=792"
establece una resolución de 1024x768
Puede elegir entre las siguientes resoluciones: 640×480
, 800×600
, 1024×768
, 1280×1024
, 1600×1200
, 1920×1200
Introducir 915resolution
Si está usando tarjeta de vídeo de Intel, puede ocurrir que ni # hwinfo --framebuffer
ni vbeinfo
muestre la resolución deseada. En este caso, puede utilizar este arreglo, para cambiar temporalmente la BIOS de la tarjeta de vídeo mediante la adición de la resolución requerida. Consulte la página 915resolution.
En primer lugar, debe elegir un modo de vídeo para editar más tarde. Para ello necesitamos utilizar la shell de órdenes de GRUB:
sh:grub> 915resolution -l
Intel 800/900 Series VBIOS Hack : version 0.5.3 [...] Mode 30 : 640x480, 8 bits/pixel [...]
La salida será similar a la siguiente:
Intel 800/900 Series VBIOS Hack : version 0.5.3 ... Mode 30 : 640x480, 8 bits/pixel ...
La orden antes descrita sobreescribirá la modalidad 30
con la resolución de 1440x900
.
/etc/grub.d/00_header
[...] 915resolution 30 1440 900 # Inserted line set gfxmode=${GRUB_GFXMODE} [...]
Ahora tendrá que establecer el valor en GRUB_GFXMODE
, como se explicó anteriormente, reconstruir el archivo de configuración de GRUB y reiniciar para comprobar cómo han salido los cambios:
# grub-mkconfig -o /boot/grub/grub.cfg # reboot
Imagen de fondo y fuentes bitmap
GRUB es compatible con imágenes de fondo y fuentes de mapa de bits en el formato pf2
. la fuente unifont está incluida en el paquete grub-common con el nombre unicode.pf2
o, solo para carácteres ASCII, con el nombre ascii.pf2
.
Los formatos de imagen soportados incluyen tga, png e jpeg siempre que los respectivos módulos se cargan. La resolución máxima aplicable depende del hardware en uso.
Antes de continuar, siga las disposiciones indicadas en este apartado.
A continuación, edite el archivo /etc/default/grub
como sigue:
GRUB_BACKGROUND="/boot/grub/miaimmagine" #GRUB_THEME="/path/to/gfxtheme" GRUB_FONT="/path/to/font.pf2"
/boot/grub/mi_imagen
se convierte en /grub/mi_imagen
Para aplicar los cambios a grub.cfg
, ejecute:
# grub-mkconfig -o /boot/grub/grub.cfg
Si la inserción de la imagen se realiza correctamente, debería ver el mensaje Found background image...
, al ejecutar la orden anterior. Si no, quiere decir que la imagen no se ha incorporado en el archivo grub.cfg
.
En este caso, compruebe que:
- La ruta y el nombre de la imagen en
/etc/default/grub
es correcta. - La imagen tiene un tamaño y formato adecuados (tga, png, jpg a 8 bits)
- La imagen se guarda en modo RGB y no indexado.
- La modalidad consola no está habilitada en el archivo
/etc/default/grub
. - La orden de
grub-mkconfig
se ha hecho para poner la información relativa en un segundo plano en el archivo/boot/grub/grub.cfg
.
Temas
A continuación se muestra un ejemplo para la configuración propuesta con el tema Starfield, incluido en el paquete suministrado con Arch.
Modifique /etc/default/grub
:
GRUB_THEME="/boot/grub/themes/starfield/theme.txt"
Aplique los cambios:
grub-mkconfig -o /boot/grub/grub.cfg
Si el tema se ha configurado correctamente, aparecerá en el terminal el mensaje Found theme: /boot/grub/themes/starfield/theme.txt
. La imagen de fondo, por lo general, no se visualiza cuando se utiliza un tema.
Colores del menú
Como sucedía con GRUB Legacy, se pueden cambiar los colores del menú de GRUB. La lista de colores disponibles se pueden encontrar aquí. A continuación, un ejemplo:
Modifique /etc/default/grub
de la siguiente manera:
GRUB_COLOR_NORMAL="light-blue/black" GRUB_COLOR_HIGHLIGHT="light-cyan/blue"
Para hacer efectivos los los cambios, ejecute:
# grub-mkconfig -o /boot/grub/grub.cfg
Menú oculto
Una de las características de GRUB es la capacidad de ocultar el menú y hacer que sea visible pulsando la tecla Template:Keypress, si es necesario. También puede decidir si se debe mostrar la cuenta atrás.
Modifique el archivo /etc/default/grub
como sigue. En el siguiente ejemplo, la cuenta atrás se establece en 5 segundos y se hace visible para el usuario:
GRUB_HIDDEN_TIMEOUT=5 GRUB_HIDDEN_TIMEOUT_QUIET=false
Y, luego, ejecute:
# grub-mkconfig -o /boot/grub/grub.cfg
Desactivar el framebuffer
Si utiliza el controlador propietario de NVIDIA, puede que tenga que desactivar el framebuffer de GRUB, ya que podría interferir con el controlador.
Para desactivarlo, edite /etc/default/grub
y descomente la siguiente línea:
GRUB_TERMINAL_OUTPUT=console
A continuación, ejecute:
grub-mkconfig -o /boot/grub/grub.cfg
Otra opción, si desea conservar el framebuffer para GRUB, es revertir al modo de texto justo antes de iniciarse el kernel. Para conseguir esto, modifique la variable en /etc/default/grub
:
GRUB_GFXPAYLOAD_LINUX=text
y reconstruya el archivo de configuración como se indicó antes.
Otras opciones
LVM
Si utiliza LVM para su /boot
, añada la siguiente línea antes de las diversas entradas:
insmod lvm
y especifique su root en menuentry de este modo:
set root=lvm/lvm_group_name-lvm_logical_boot_partition_name
Ejemplo:
# (0) Arch Linux menuentry "Arch Linux" { insmod lvm set root=(VolumeGroup-lv_boot) # you can only set following two lines linux /vmlinuz-linux root=/dev/mapper/VolumeGroup-root ro initrd /initramfs-linux.img }
RAID
GRUB permite tratar los volúmenes en una configuración RAID de una manera sencilla. Añadimos insmod raid
a grub.cfg
que hará referencia al volumen de forma nativa. Por ejemplo, /dev/md0
se convierte en:
set root=(md0)
mientras que un volumen RAID particionado (por ejemplo, /dev/md0p1
) se convierte en:
set root=(md0,1)
Nomenclatura permanente de dispositivos de bloque
Un esquema de nomenclatura de nombres persistentes para dispositivos de bloque es usar UUID, que son únicos y globales, para detectar particiones, en lugar de la «vieja» nomenclatura /dev/sd*
. Las ventajas de este método están tratadas en el artículo anteriormente enlazado.
La nomenclatura persistente a través de las UUID del sistema de archivos se utiliza por defecto en GRUB.
/boot/grub.cfg
necesita regenerarse con las UUID nuevas en /etc/default/grub
cada vez que se redimensiona o se formatea una partición. Recuerde esto al modificar las particiones y sistemas de archivos con un CD-Live.Cuando se usan las UUID son controladas por una opción en /etc/default/grub
:
# GRUB_DISABLE_LINUX_UUID=true
En cualquier caso, no se olvide de aplicar los cambios:
# grub-mkconfig -o /boot/grub/grub.cfg
Utilizar etiquetas
Puede utilizar las etiquetas (cadenas que identifican particiones de una manera legible por el usuario), usando la opción --label
con la orden search
. En primer lugar, coloque una etiqueta a las particiones:
# tune2fs -L a <ETIQUETA><PARTICIÓN>
A continuación, agregue una entrada usando la etiqueta:
menuentry "Arch Linux, session texte" { search --label --set=root archroot linux /boot/vmlinuz-linux root=/dev/disk/by-label/archroot ro initrd /boot/initramfs-linux.img }
Recordar el último sistema arrancado
GRUB puede recordar el último sistema arrancado y utilizarlo por defecto la próxima vez que ejecute el arranque. Esta característica es útil si tiene varios kernels (por ejemplo, el kernel actual de Arch y el LTS como fallback) o más sistemas operativos. Modifique /etc/default/grub
y cambie el valor de GRUB_DEFAULT
:
GRUB_DEFAULT=saved
Esto permitirá que GRUB arranque el sistema operativo guardado. Para activar la recuperación de la entrada seleccionada, añada la siguiente línea a /etc/default/grub
:
GRUB_SAVEDEFAULT=true
/etc/grub.d/40_custom
o /boot/grub/custom.cfg
(para Windows, por ejemplo) necesitan ir acompañadas de la opción savedefault
. Recuerde regenerar (#Crear_un_archivo_de_configuración) el archivo de configuración.Cambiar la entrada por defecto del menú
Para cambiar la entrada seleccionada por defecto, edite /etc/default/grub
y cambie el valor de GRUB_DEFAULT
:
Utilizar números consecutivos :
GRUB_DEFAULT=0
Grub identifica las entradas generadas en el menú contando desde cero. Eso significa que 0 se refiere a la primera entrada, la cual es el valor predeterminado, 1 para la segunda y así sucesivamente.
O utilizar los nombres en el menú :
GRUB_DEFAULT='Arch Linux, with Linux core repo kernel'
Seguridad
Si desea hacer GRUB más seguro, de modo que nadie pueda cambiar los parámetros de arranque o utilizar la línea de órdenes, puede agregar un nombre de usuario y contraseña para los archivos de configuración de GRUB. Para ello, ejecute grub-mkpasswd_pbkdf2
. Es necesario introducir una contraseña y confirmarla:
grub-mkpasswd-pbkdf2
[...] Your PBKDF2 is grub.pbkdf2.sha512.10000.C8ABD3E93C4DFC83138B0C7A3D719BC650E6234310DA069E6FDB0DD4156313DA3D0D9BFFC2846C21D5A2DDA515114CF6378F8A064C94198D0618E70D23717E82.509BFA8A4217EAD0B33C87432524C0B6B64B34FBAD22D3E6E6874D9B101996C5F98AB1746FE7C7199147ECF4ABD8661C222EEEDB7D14A843261FFF2C07B1269A
Después, añada las siguientes cadenas a /etc/grub.d/0_header
:
/etc/grub.d/00_header
cat << EOF set superusers="username" password_pbkdf2 username <password> EOF
Donde <password> corresponde a la cadena generada por grub-mkpasswd_pbkdf2
.
Hay que regenerar el archivo de configuración. La línea de órdenes y los parámetros de arranque de grub ahora estarán protegidos.
Los ajustes anteriores se pueden hacer menos restrictivos y personalizar mediante la adición de más usuarios, como se explica en el capítulo sobre «Seguridad» del manual de GRUB.
Partición root cifrada
Para asegurarse de que GRUB pasa automáticamente los parámetros al kernel necesarios para cifrar la partición root, agregue cryptdevice=/dev/device:etichetta
a GRUB_CMDLINE_LINUX
en /etc/default/grub
.
Un ejemplo con root mapeado en /dev/mapper/root
:
GRUB_CMDLINE_LINUX="cryptdevice=/dev/sda2:root"
También, desactive el uso de la UUID para el sistema de archivos root:
GRUB_DISABLE_LINUX_UUID=true
A continuación, tiene que volver a generar el archivo de configuración de grub.
Efectuar el arranque de una entrada no predeterminada por una sola vez
La orden grub-reboot
es muy útil para arrancar otra entrada distinta de la predeterminada solo por una vez. GRUB carga la entrada especificada como primer argumento de la orden, de modo que la próxima vez, cuando el sistema reinicie, arrancará el sistema operativo indicado. Lo más importante es que GRUB vuelve a cargar la entrada por defecto para todos los sucesivos arranques. Por tanto, no es necesario cambiar el archivo de configuración o seleccionar una entrada en el menú de GRUB.
GRUB_DEFAULT=saved
en /etc/default/grub
(y después regenerar el archivo grub.cfg
) o, en el caso de un archivo grub.cfg
configurado manualmente, la línea set default="${saved_entry}"
.Ocultar GRUB y hacerlo aparecer mediante la tecla shift
Para reducir al mínimo el tiempo de arranque es posible ocultar el menú de GRUB durante el tiempo de espera, lo que permite a GRUB ocultar el menú, haciéndolo aparecer unicamente cuando se presione la tecla Template:Keypress durante la fase de inicio de GRUB.
Para obtener este comportamiento, añada lo que sigue al archivo /etc/default/grub
:
GRUB_FORCE_HIDDEN_MENU="true"
Y, a continuación, se debe crear el siguiente archivo:
/etc/grub.d/31_hold_shift
#! /bin/sh set -e # grub-mkconfig helper script. # Copyright (C) 2006,2007,2008,2009 Free Software Foundation, Inc. # # GRUB is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # GRUB is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GRUB. If not, see <http://www.gnu.org/licenses/>. prefix="/usr" exec_prefix="${prefix}" datarootdir="${prefix}/share" export TEXTDOMAIN=grub export TEXTDOMAINDIR="${datarootdir}/locale" . "${datarootdir}/grub/grub-mkconfig_lib" found_other_os= make_timeout () { if [ "x${GRUB_FORCE_HIDDEN_MENU}" = "xtrue" ] ; then if [ "x${1}" != "x" ] ; then if [ "x${GRUB_HIDDEN_TIMEOUT_QUIET}" = "xtrue" ] ; then verbose= else verbose=" --verbose" fi if [ "x${1}" = "x0" ] ; then cat <<EOF if [ "x\${timeout}" != "x-1" ]; then if keystatus; then if keystatus --shift; then set timeout=-1 else set timeout=0 fi else if sleep$verbose --interruptible 3 ; then set timeout=0 fi fi fi EOF else cat << EOF if [ "x\${timeout}" != "x-1" ]; then if sleep$verbose --interruptible ${GRUB_HIDDEN_TIMEOUT} ; then set timeout=0 fi fi EOF fi fi fi } adjust_timeout () { if [ "x$GRUB_BUTTON_CMOS_ADDRESS" != "x" ]; then cat <<EOF if cmostest $GRUB_BUTTON_CMOS_ADDRESS ; then EOF make_timeout "${GRUB_HIDDEN_TIMEOUT_BUTTON}" "${GRUB_TIMEOUT_BUTTON}" echo else make_timeout "${GRUB_HIDDEN_TIMEOUT}" "${GRUB_TIMEOUT}" echo fi else make_timeout "${GRUB_HIDDEN_TIMEOUT}" "${GRUB_TIMEOUT}" fi } adjust_timeout cat <<EOF if [ "x\${timeout}" != "x-1" ]; then if keystatus; then if keystatus --shift; then set timeout=-1 else set timeout=0 fi else if sleep$verbose --interruptible 3 ; then set timeout=0 fi fi fi EOF
Iniciar una imagen ISO directamente desde GRUB
Modifique los archivos /etc/grub.d/40_custom
o /boot/grub/custom.cfg
mediante la adición de una entrada que permita arrancar la ISO que desea iniciar. Una vez hecho esto, actualice el menú de GRUB con la conocida orden grub-mkconfig -o /boot/grub/grub.cfg
(hecho como root).
ISO de Arch Linux
/archives
en hd0,6
.Ejemplo usando x86_64
menuentry "Archlinux-2013.01.04-dual.iso" --class iso { set isofile="/archives/archlinux-2013.01.04-dual.iso" loopback loop (hd0,6)$isofile linux (loop)/arch/boot/x86_64/vmlinuz archisolabel=ARCH_201301 img_dev=/dev/sda6 img_loop=$isofile earlymodules=loop initrd (loop)/arch/boot/x86_64/archiso.img }
Ejemplo usando i686
menuentry "Archlinux-2013.01.04-dual.iso" --class iso { set isofile="/archives/archlinux-2013.01.04-dual.iso" loopback loop (hd0,6)$isofile linux (loop)/arch/boot/i686/vmlinuz archisolabel=ARCH_201301 img_dev=/dev/sda6 img_loop=$isofile earlymodules=loop initrd (loop)/arch/boot/i686/archiso.img }
ISO de Ubuntu
/archives
de hd0,6
. Será necesario modificar la ubicación y el disco duro/partición de las líneas siguientes para adaptarlos a su caso particular.menuentry "ubuntu-13.04-desktop-amd64.iso" { set isofile="/archives/ubuntu-13.04-desktop-amd64.iso" loopback loop (hd0,6)/$isofile linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile quiet noeject noprompt splash -- initrd (loop)/casper/initrd.lz }
menuentry "ubuntu-12.04-desktop-amd64.iso" { set isofile="/archives/ubuntu-12.04-desktop-amd64.iso" loopback loop (hd0,6)/$isofile linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile quiet noeject noprompt splash -- initrd (loop)/casper/initrd.lz }
Otras ISO
Otras configuraciones funcionales están disponibles en link Source.
Utilizar la shell
Dado que el MBR es demasiado pequeño para contener todas los módulos de GRUB, solo el menú y los comanos básicos residen allí. La mayor parte de la funcionalidad de GRUB está contenida en los módulos ubicados en /boot/grub
, que se cargan cuando son necesarios. En caso de errores (por ejemplo, si la tabla de particiones se altera), GRUB puede fallar al arrancar, e lanzar una shell en lugar del clásico menú.
GRUB ofrece diferentes tipos de shell. Si tiene problemas para leer el menú, pero el gestor de arranque es todavía capaz de encontrar el disco donde GRUB reside, es probable que lance una shell «normal»:
sh:grub>
En caso de problemas más serios (GRUB no puede encontrar los archivos necesarios), puede aparecer la shell de emergencia:
grub rescue>
La shell de emergencia es una versión reducida de la normal, y ofrece, por lo tanto, un número reducido de funcionalidades. Trate de cargar el módulo normal
, e iniciar la shell clásica:
grub rescue> set prefix=(hdX,Y)/boot/grub grub rescue> insmod (hdX,Y)/boot/grub/normal.mod rescue:grub> normal
Soporte para Pager
GRUB apoya pager (paginador o localizador) que permite la lectura de las órdenes que proveen «salidas» extensas (como la orden help
). Tenga en cuenta que esta característica solo está disponible en la consola normal, y no en una de emergencia. Para activar pager, escriba en una shell de órdenes de GRUB:
sh:grub> set pager=1
Herramientas GUI de configuración
Es posible obtener estas herramientas gráficas instalando los siguientes paquetes:
- grub-customizer — Para personalizar el gestor de arranque (GRUB o BURG)
- grub2-editor — Módulo de control de KDE4 para configurar el gestor de arrranque GRUB
- kcm-grub2 — Este módulo Kcm permite gestionar los ajustes más comunes de GRUB
- startupmanager — Aplicación gráfica para cambiar la configuración de GRUB Legacy, GRUB, Usplash y Splashy
parttool para mostrar/ocultar particiones
Si tiene instalado Windows 9x con el disco C:\
oculto, GRUB dispone de las opciones hide/unhide
usando parttool
. Por ejemplo, para efectuar el arranque del tercer disco C:\
de tres sistema Windows 9x instalados, se inicia la consola y:
parttool hd0,1 hidden+ boot- parttool hd0,2 hidden+ boot- parttool hd0,3 hidden- boot+ set root=hd0,3 chainloader +1 boot
Utilizar la consola de emergencia
Véase primero cómo utilizar la shell más arriba. Si no es capaz de iniciar la shell estándar, una posible solución es arrancar un LiveCD o algún otro disco de reparación para corregir los errores de configuración y reinstalar GRUB. Sin embargo, un disco de recuperación no siempre es posible (ni necesario), y la consola de emergencia es sorprendentemente robusta.
Las órdenes disponibles en esta modalidad incluyen insmod
, ls
, set
e unset
. Este ejemplo utiliza set
y insmod
. set
cambia el valor de las variables, mientras que insmod
añade nuevos módulos para ampliar la funcionalidad básica.
Antes de comenzar, es necesario que conozca la ubicación de la partición de /boot
(ya esté separada o en un subdirectorio de la partición de root):
grub rescue> set prefix=(hdX,Y)/boot/grub
Donde X es el número de la unidad y la Y de la partición.
Para ampliar las capacidades de la consola, inserte el módulo linux
.
grub rescue> insmod (hdX,Y)/boot/grub/linux.mod
/boot
en la ruta. (Ejemplo: set prefix=(hdX,Y)/grub
y insmod (hdX,Y)/grub/linux.mod
).Esto proporciona órdenes de linux
y initrd
, con las que debe estar familiarizado (véase #Configuración).
Un ejemplo de inicio de Arch Linux:
set root=(hd0,5) linux /boot/vmlinuz-linux root=/dev/sda5 initrd /boot/initramfs-linux.img boot
De nuevo, en el caso de partición de arranque separada, cambie las órdenes en consecuencia:
set root=(hd0,5) linux /vmlinuz-linux root=/dev/sda6 initrd /initramfs-linux.img boot
Tras el lanzamiento de una instalación correcta de Arch Linux, puede arreglar grub.cfg
y proceder a la reinstalación de GRUB.
Para reinstalar GRUB en el MBR, cambie /dev/sda
de acuerdo a sus propias necesidades. Consulte el apartado sobre instalación del gestor de arranque para más detalles.
Combinar UUID y scripting
Si desea utilizar la asignación de UUID para superar los mapeados poco fiables de los dispositivos realizadas por la BIOS, o si está teniendo dificultades con la sintaxis de GRUB, aquí hay un ejemplo que utiliza las UUID, y un pequeño script para GRUB para que apunte a las particiones correspondientes. Todo lo que uno debe hacer, es sustituir el ejemplo con las UUID correctas para su sistema (el ejemplo se aplica a sistemas con una partición de arranque separada y debe modificarse en consecuencia en caso de particiones adicionales).
menuentry "Arch Linux 64" { # Set the UUIDs for your boot and root partition respectively set the_boot_uuid=ece0448f-bb08-486d-9864-ac3271bd8d07 set the_root_uuid=c55da16f-e2af-4603-9e0b-03f5f565ec4a # (Note: This may be the same as your boot partition) # Get the boot/root devices and set them in the root and grub_boot variables search --fs-uuid $the_root_uuid --set=root search --fs-uuid $the_boot_uuid --set=grub_boot # Check to see if boot and root are equal. # If they are, then append /boot to $grub_boot (Since $grub_boot is actually the root partition) if [ $the_boot_uuid == $the_root_uuid ] ; then set grub_boot=($grub_boot)/boot else set grub_boot=($grub_boot) fi # $grub_boot now points to the correct location, so the following will properly find the kernel and initrd linux $grub_boot/vmlinuz-linux root=/dev/disk/by-uuid/$the_root_uuid ro initrd $grub_boot/initramfs-linux.img }
Solución de problemas
Algunas Bios de Intel no efectúan el arranque de la partición GPT
Algunas BIOS de Intel requieren, al menos, una partición MBR marcada como booteable en el arranque, cosa no habitual en las configuraciones basadas en GPT, que causan que la partición GPT no se inicie.
Es posible solucionar el problema mediante el uso de (por ejemplo) fdisk para marcar como bootable en el MBR una de las particiones GPT (preferiblemente la partición de 1007KiB que ya se ha creado para GRUB). Esto se puede lograr, utilizando fdisk, mediante las siguientes órdenes: Inicie fdisk sobre el disco donde va a realizar la instalación, por ejemplo fdisk /dev/sda
, presione Template:Keypress y seleccione la partición que desea marcar como booteable (seguramente #1) pulsando el número correspondiente, para terminar pulse Template:Keypress para escribir los cambios en el MBR.
fdisk
o similar, no se puede hacer con GParted o equivalentes, ya que estos últimos no establecen el indicador de booteable en el MBR.Para más información consulte esto
Activar mensajes de depuración en GRUB
Añada:
set pager=1 set debug=all
en grub.cfg
.
Corregir el error de GRUB: «no suitable mode found»
Si recibe este error en la elección de una opción de arranque:
error: no suitable mode found Booting however
A continuación, se debe iniciar el terminal gráfico GRUB (gfxterm
), utilizando un modo de vídeo adecuado (gfxmode
). Este se transmite de GRUB al kernel de Linux usando la opción gfxpayload
.
En sistemas UEFI, si la modalidad de video de GRUB no está inicializada, se mostrarán los mensajes de arranque del kernel (al menos hasta la activación de KMS).
Ahora, copie /usr/share/grub/unicode.pf2
en ${GRUB2_PREFIX_DIR
} (/boot/grub
de los sistema BIOS y UEFI. Si GRUB UEFI se instala con la opción --boot-directory
habilitada, entonces la ruta es /boot/efi/EFI/grub
).
# cp /usr/share/grub/unicode.pf2 ${GRUB2_PREFIX_DIR}
Si el archivo /usr/share/grub/unicode.pf2
no existe, instale el paquete bdf-unifont y proceda a la creación y copia del mismo en ${GRUB2_PREFIX_DIR
}.
# grub-mkfont -o unicode.pf2 /usr/share/fonts/misc/unifont.bdf
En el archivo grub.cfg
, agregue las líneas siguientes para permitir a GRUB que pase correctamente la modalidad de vídeo al kernel, de lo contrario obtendrá una pantalla en negro, aunque el arranque se haga periódicamente, sin que el sistema se bloquee:
Sistemas BIOS:
insmod vbe
Sistemas UEFI:
insmod efi_gop insmod efi_uga
A continuación, agregue el siguiente código (común a los sistemas BIOS y UEFI)
insmod font
if loadfont ${prefix}/fonts/unicode.pf2 then insmod gfxterm set gfxmode=auto set gfxpayload=keep terminal_output gfxterm fi
Como puede ver, para que gfxterm
funcione correctamente, la fuente unicode.pf2
debe existir en ${GRUB2_PREFIX_DIR
}.
Mensaje de error msdos-style
grub-setup: warn: This msdos-style partition label has no post-MBR gap; embedding won't be possible! grub-setup: warn: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However, blocklists are UNRELIABLE and its use is discouraged. grub-setup: error: If you really want blocklists, use --force.
Este problema se produce cuando se intenta instalar GRUB en VMWare. Más información aquí. Se espera una solución pronto.
También puede ocurrir cuando la partición comienza justo después del MBR (bloque 63), sin dejar un espacio de alrededor de 1 MB (2048 bloques) antes de la primera partición. Véase #Instrucciones específicas para Master Boot Record (MBR)
GRUB UEFI vuelve a la shell
Si GRUB se carga, pero vuelve a regresar a la shell, sin arrojar error, el archivo grub.cfg
pueden estar en una posición incorrecta o no existir en absoluto. Este problema puede producirse si GRUB UEFI se ha instalado con la opción --boot-directory
activada, y el archivo no existe, o si el número identificativo de la partición de arranque ha cambiado (este valor es, de hecho, «codificado» en el archivo grubx64.efi
).
GRUB UEFI no se carga
He aquí un ejemplo de EFI funcional:
# efibootmgr -v
BootCurrent: 0000 Timeout: 3 seconds BootOrder: 0000,0001,0002 Boot0000* Grub HD(1,800,32000,23532fbb-1bfa-4e46-851a-b494bfe9478c)File(\efi\grub\grub.efi) Boot0001* Shell HD(1,800,32000,23532fbb-1bfa-4e46-851a-b494bfe9478c)File(\EfiShell.efi) Boot0002* Festplatte BIOS(2,0,00)P0: SAMSUNG HD204UI
Si la pantalla deviene en negro durante unos segundos y GRUB pasa a la siguiente opción del arranque, como se describe en este post, mover GRUB a la partición raíz podría ayudar. La opción de arranque debería ser eliminada y recreada después de la operación. El campo relativo a grub debería ahora ser similar a esto:
Boot0000* Grub HD(1,800,32000,23532fbb-1bfa-4e46-851a-b494bfe9478c)File(\grub.efi)
Invalid signature
Si recibe el error «invalid signature» al intentar iniciar Windows, por ejemplo, si se ha alterado la tabla de particiones después de agregar otras particiones o discos duros, trate de eliminar la configuración de los dispositivos de GRUB y deje que la regenere él mismo:
# mv /boot/grub/device.map /boot/grub/device.map-old # grub-mkconfig -o /boot/grub/grub.cfg
grub-mkconfig
debería ahora mostrar todas las opciones de arranque, incluyendo Windows. Si el problema está resuelto, elimine /boot/grub/device.map-old
.
Bloqueos al arrancar
Si el arranque se bloquea sin ningún mensaje de error después de que GRUB cargue el kernel y el ramdisk inicial, prueble eliminado add_efi_memmap
de los parámetros del kernel.
Restaurar GRUB Legacy
- Mueva los archivos de GRUB Legacy o GRUB:
# mv /boot/grub /boot/grub.nonfunctional
- Restaure la copia de seguridad de GRUB Legacy en
/boot
:
# cp -af /boot/grub-legacy /boot/grub
- Sustituya el MBR y los siguientes 62 sectores del disco sda con la anterior copia de seguridad:
# dd if=/path/to/backup/first-sectors of=/dev/sdX bs=512 count=1
Una solución más segura es restaurar solo el códio de arranque del MBR con la orden:
# dd if=/path/to/backup/mbr-boot-code of=/dev/sdX bs=446 count=1
Arch no es detectado por otros Sistemas Operativos
Algunos usuarios han informado que otras distribuciones tienen problemas para encontrar Arch Linux automáticamente con os-prober
. Si surge este problema, es posible mejorar la detección con la creación del archivo /etc/lsb-release
. Este archivo y las herramientas de actualización están disponibles con el paquete {pkg|lsb-release}} de los repositorios oficiales.
Referencias
- Manual Oficial de GRUB - http://www.gnu.org/software/grub/manual/grub.html
- Página wiki de Ubuntu sobre GRUB - https://help.ubuntu.com/community/Grub
- Página wiki de GRUB donde explica cómo compilarlo para sistemas UEFI - http://help.ubuntu.com/community/UEFIBooting
- Página de Wikipedia sobre la partición de inicio del BIOS.