Syslinux (Español)
| Sumario |
|---|
| Describe la instalación y configuración de Syslinux, una colección de gestores de arranque. |
| Descripción |
| Para iniciar Arch Linux, es necesario tener instalado en el Master Boot Record (MBR) o en la GUID Partition Table (GPT) un gestor de arranque compatible con Linux como GRUB(2), Syslinux, LILO o GRUB Legacy. El gestor de arranque es responsable de cargar el kernel y el ramdisk inicial antes de iniciar el proceso de arranque. |
Syslinux es una colección de cargadores de arranque capaz de iniciar desde discos duros, CDs, y vía network utilizando PXE. Soporta sistema de archivos FAT, ext2, ext3, ext4 y Btrfs.
El proceso de inicio de Syslinux
- Carga del MBR. Durante la fase de arranque, el ordenador lee el contenido del MBR (
/usr/lib/syslinux/mbr.bin). - Búsqueda de la partición activa. El MBR identifica la partición marcada como activa (boot flag).
- Ejecución del volumen boot record. Una vez encontrada la partición, el volumen boot record (VBR) será ejecutado. En el caso de ext2/3/4 y fat12/16/32, el sector de inicio de
ldlinux.sysestá codificado en el VBR. - Ejecución de ldlinux.sys. El VBR se ejecutará (
ldlinux.sys). Por lo tanto, si la ubicación deldlinux.syscambia, Syslinux no arrancará. (En el caso de usar una partición Btrfs, el método anterior no funcionará ya que los archivos se moverán continuamente modificando el sector dondeldlinux.sysreside. Por este motivo, el código entero de Syslinux debe ser escrito fuera del sistema de archivos. El código se almacena en los sectores posteriores del VBR.) - Buscando los archivos de configuración. Una vez Syslinux está totalmente cargado, busca un archivo de configuración, ya sea
extlinux.confosyslinux.cfg. - Cargando los archivos de configuración. Si encuentra un archivo válido se cargará. En su defecto, se le advertirá en el prompt de Syslinux.
Instalación
Instale syslinux desde los repositorios oficiales. Si su partición boot es FAT, necesita también mtools.
Instalación automática
El script syslinux-install_update se ocupará de la instalación de Syslinux, de la copia/creación del enlace simbólico para el módulo *.c32 en /boot/syslinux, de la configuración del flag de arranque y de la instalación del código de arranque en el MBR. Puede gestionar tablas de particiones MBR y GPT, junto con RAID software.
- 1. Si se utiliza una partición boot separada, asegúrese de que está montada. Compruébelo con
lsblk; si no se ve ningún punto de montaje que indique a/boot, monte la partición antes de continuar.
- 2. Ejecute el script
syslinux-install_updatecon los siguientes argumentos:-i(instala los archivos),-a(marca la partición como activa con la etiqueta boot),-m(instala el código de arranque en el MBR):
# syslinux-install_update -i -a -m
- 3. Modifique
/boot/syslinux/syslinux.cfg.
Instalación manual
Asegúrese de tener instalado el paquete syslinux. A continuación instale Syslinux en la partición boot, que debe contener un sistema de archivos fat, ext2, ext3, ext4, o btrfs.
La instalación tiene que hacerse sobre un directorio montado, y no sobre una partición /dev/sdXY. No es necesario instalarlo en el directorio root de un sistema de archivos, por ejemplo, si se ha montado /boot en la partición /dev/sda1, es posible instalar Syslinux en una carpeta propia que podemos llamar syslinux:
# mkdir /boot/syslinux # extlinux --install /boot/syslinux
La orden anterior se basa en el supuesto de que la partición de destino tenga un sistema de archivos ext[234]. Si la partición está formateada en FAT, será necesario utilizar la orden syslinux.
Tabla de particiones MBR
Será necesario marcar la partición boot como activa en la tabla de particiones. Las aplicaciones que incluyen la capacidad de hacer la operación descrita son fdisk, cfdisk, sfdisk, parted/gparted. Debería tener un aspecto como el siguiente:
# fdisk -l /dev/sda
[...] Device Boot Start End Blocks Id System /dev/sda1 * 2048 104447 51200 83 Linux /dev/sda2 104448 625142447 312519000 83 Linux
Instale Syslinux en el MBR:
# dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/mbr.bin of=/dev/sda
Syslinux proporciona un MBR alternativo: altmbr.bin. Este MBR no escanea en busca de particiones booteables, sino que el último byte de la MBR establece un valor que indica la partición desde la cual efectuar el arranque. Aquí está un ejemplo de cómo altmbr.bin puede copiar esa posición:
# printf '\x5' | cat /usr/lib/syslinux/altmbr.bin - | \ dd bs=440 count=1 iflag=fullblock conv=notrunc of=/dev/sda
En este caso, un solo byte de valor 5 se inserta en el contenido del archivo altmbr.bin y los restantes 440 bytes se escriben en el MBR del dispositivo sda. Syslinux será instalado en la primera partición lógica (/dev/sda5) del disco.
Tabla de particiones GUID conocida como GPT
Es necesario ajustar el bit 2 a los atributos relativos a la partición /boot.
# sgdisk /dev/sda --attributes=1:set:2
Esto cambiará el atributo legacy BIOS bootable en la partición 1. Para comprobarlo:
# sgdisk /dev/sda --attributes=1:show
1:2:1 (legacy BIOS bootable)
Instalación en el MBR:
# dd bs=440 conv=notrunc count=1 if=/usr/lib/syslinux/gptmbr.bin of=/dev/sda
Si esto no funciona, pruebe con esto:
# syslinux-install_update -i -m
Reinicio
Si se reinicia el sistema ahora, saldrá el prompt de Syslinux. Para poder arrancar automáticamente el sistema u obtener un menú de arranque, será necesario aún crear un archivo de configuración.
Configuración
El archivo de configuración de syslinux, syslinux.cfg, se debe crear en el mismo directorio donde se ha instalado syslinux. En este caso, /boot/syslinux/.
El gestor de arranque buscará el archivo syslinux.cfg (preferido) o bien extlinux.conf
Ejemplos
Configuración básica
A continuación se presenta un archivo de configuración simple que mostrará el prompt de arranque: y arrancará automáticamente después de 5 segundos.
Configuración:
/boot/syslinux/syslinux.cfg
PROMPT 1
TIMEOUT 50
DEFAULT arch
LABEL arch
LINUX ../vmlinuz-linux
APPEND root=/dev/sda2 ro
INITRD ../initramfs-linux.img
LABEL archfallback
LINUX ../vmlinuz-linux
APPEND root=/dev/sda2 ro
INITRD ../initramfs-linux-fallback.img
Si desea efectuar automáticamente el arranque sin visualizar el prompt, ajuste PROMPT a 0.
Si desea usar la UUID para la nomenclatura permanente de los dispositivos de bloques, modifique la línea APPEND incluyendo la correspondiente UUID de la partición root:
APPEND root=UUID=978e3e81-8048-4ae1-8a06-aa727458e8ff ro
Si se usa el sistema de cifrado LUKS modifique la línea APPEND para que Syslinux utilice el volumen cifrado:
APPEND root=/dev/mapper/<name> cryptdevice=/dev/sda2:<name> ro
Si se utiliza un RAID software mediante mdadm, modifique la línea APPEND de forma que englobe sus matrices RAID. En el ejemplo que sigue vienen utilizadas tres matrices en RAID 1 y ajustadas apropiadamente cada una como root:
APPEND root=/dev/md1 ro md=0,/dev/sda2,/dev/sdb2 md=1,/dev/sda3,/dev/sdb3 md=2,/dev/sda4,/dev/sdb4
Si el arranque desde una partición situada en un RAID software falla usando el método anterior, otra forma alternativa fiable es usando las etiquetas de las particiones:
APPEND root=LABEL=ETIQUETA_DE_LA_PARTICIÓN_ROOT rw
Menú de arranque en modo texto
Syslinux permite usar un menú de arranque. Para utilizarlo, copie el módulo COM32 menu en el directorio de Syslinux:
# cp /usr/lib/syslinux/menu.c32 /boot/syslinux/
Si /boot se encuentra en la misma partición que /usr, bastará utilizar un enlace simbólico:
# ln -s /usr/lib/syslinux/menu.c32 /boot/syslinux/
Configuración:
/boot/syslinux/syslinux.cfg
UI menu.c32
PROMPT 0
MENU TITLE Boot Menu
TIMEOUT 50
DEFAULT arch
LABEL arch
MENU LABEL Arch Linux
LINUX ../vmlinuz-linux
APPEND root=/dev/sda2 ro
INITRD ../initramfs-linux.img
LABEL archfallback
MENU LABEL Arch Linux Fallback
LINUX ../vmlinuz-linux
APPEND root=/dev/sda2 ro
INITRD ../initramfs-linux-fallback.img
Para más detalles sobre el menú, consulte the Syslinux documentation.
Menú de arranque en modo gráfico
Syslinux permite también el uso de un menú de arranque gráfico. Para usarlo, copie el módulo COM32 vesamenu en la carpeta de Syslinux
# cp /usr/lib/syslinux/vesamenu.c32 /boot/syslinux/
Si /boot está en la misma partición que /usr, bastará un enlace simbólico:
# ln -s /usr/lib/syslinux/vesamenu.c32 /boot/syslinux/
Esta configuración usa el mismo diseño del menú del CD de instalación de Arch. El archivo background (para imágenes del fondo) se puede encontrar allí también.
Configuración:
/boot/syslinux/syslinux.cfg
UI vesamenu.c32
DEFAULT arch
PROMPT 0
MENU TITLE Boot Menu
MENU BACKGROUND splash.png
TIMEOUT 50
MENU WIDTH 78
MENU MARGIN 4
MENU ROWS 5
MENU VSHIFT 10
MENU TIMEOUTROW 13
MENU TABMSGROW 11
MENU CMDLINEROW 11
MENU HELPMSGROW 16
MENU HELPMSGENDROW 29
# Refer to http://www.syslinux.org/wiki/index.php/Comboot/menu.c32
MENU COLOR border 30;44 #40ffffff #a0000000 std
MENU COLOR title 1;36;44 #9033ccff #a0000000 std
MENU COLOR sel 7;37;40 #e0ffffff #20ffffff all
MENU COLOR unsel 37;44 #50ffffff #a0000000 std
MENU COLOR help 37;40 #c0ffffff #a0000000 std
MENU COLOR timeout_msg 37;40 #80ffffff #00000000 std
MENU COLOR timeout 1;37;40 #c0ffffff #00000000 std
MENU COLOR msg07 37;40 #90ffffff #a0000000 std
MENU COLOR tabmsg 31;40 #30ffffff #00000000 std
LABEL arch
MENU LABEL Arch Linux
LINUX ../vmlinuz-linux
APPEND root=/dev/sda2 ro
INITRD ../initramfs-linux.img
LABEL archfallback
MENU LABEL Arch Linux Fallback
LINUX ../vmlinuz-linux
APPEND root=/dev/sda2 ro
INITRD ../initramfs-linux-fallback.img
A partir de Syslinux 3.84, vesamenu.c32 soporta la directiva MENU RESOLUTION $WIDTH $HEIGHT.
Para usarla, inserte MENU RESOLUTION 1440 900 para configurar, por ejemplo, una resolución de 1440x900.
La imagen background tendrá que ser de la misma resolución, de otra manera, Syslinux rechazará la carga del menú.
Arranque automático
Si no desea ver el menú de Syslinux en absoluto, comente todas los comandos UI y asegúrese de que hay un DEFAULT configurado en syslinux.cfg.
Chainloading
Si desea cargar en cadena otros sistemas operativos (como Windows) u otros gestores de arranque, copie (o utilice un enlace simbólico) el módulo chain.c32 en el directorio Syslinux (para más detalles, consulte las instrucciones de la sección anterior). A continuación, cree una sección en el archivo de configuración:
/boot/syslinux/syslinux.cfg
...
LABEL windows
MENU LABEL Windows
COM32 chain.c32
APPEND hd0 3
...
hd0 3 representa la tercera partición del primer disco identificado en la BIOS —advierta que, las unidades se cuentan desde cero, pero las particiones se cuentan desde uno—.
Si no está seguro de qué unidad se identifica como la primera de su BIOS, puede utilizar el identificador MBR, o, si utiliza GPT, la etiqueta del sistema de archivos. Para conocer el identificador de MBR, utilice la orden:
# fdisk -l /dev/sdb
Disk /dev/sdb: 128.0 GB, 128035676160 bytes 255 heads, 63 sectors/track, 15566 cylinders, total 250069680 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0xf00f1fd3 Device Boot Start End Blocks Id System /dev/sdb1 2048 4196351 2097152 7 HPFS/NTFS/exFAT /dev/sdb2 4196352 250066943 122935296 7 HPFS/NTFS/exFAT
reemplazando /dev/sdb con la unidad que desea cargar en cadena. Utilizando el número hexadecimal de Disk identifier: 0xf00f1fd3 en este caso, la sintaxis en syslinux.cfg sería:
/boot/syslinux/syslinux.cfg
...
LABEL windows
MENU LABEL Windows
COM32 chain.c32
APPEND mbr:0xf00f1fd3
...
Para más información sobre chainloading, consulte la wiki de Syslinux.
Si tiene GRUB instalado en la misma partición, se puede cargar en cadena utilizando:
/boot/syslinux/syslinux.cfg
...
LABEL grub2
MENU LABEL Grub2
COM32 chain.c32
append file=../grub/boot.img
...
Esto puede ser necesario para el arranque a partir de imágenes ISO.
Chainloading de otros sistemas Linux
Al hacer el chainloading de un gestor de arranque como el de Windows, no hay ningún problema, ya que cuenta con un gestor de arranque para empezar, mientras Syslinux sea capaz de cargar archivos que residan en la misma partición del archivo de configuración. Por lo tanto, si usted tiene otra versión de Linux instalada en una partición diferente y sin /boot compartida, debe utilizar Extlinux. En pocas palabras, se puede instalar este último en el superbloque de la partición para poder ser llamado por Syslinux instalado en el MBR. Extlinux es parte del proyecto Syslinux y está incluida en el paquete syslinux.
Las instrucciones siguientes presuponen que ya ha instalado Syslinux. Estas instruccións también presumen la típica configuración de Arch Linux de que se está utilizando la ruta de acceso a /boot/syslinux y que el chainloaded / está en /dev/sda3.
Una vez que arranque Linux (la distribución que Syslinux inicia por defecto), se monta otra partición root de la otra distribución en un punto de montaje que desee. En este ejemplo vamos a usar /mnt. Tenga en cuenta que si utiliza una partición /boot separada será necesario montarla: El ejemplo supone que ésta es /dev/sda2.
# mount /dev/sda3 /mnt # mount /dev/sda2 /mnt/boot (only necessary for separate /boot)
Instale extlinux y copie los archivos *.c32 necesarios:
# extlinux -i /mnt/boot/syslinux
# cp /usr/lib/syslinux/{chain,menu}.c32 /mnt/boot/syslinux
Crearemos /mnt/boot/syslinux/syslinux.cfg como sigue:
/boot/syslinux/syslinux.cfg on /dev/sda3
timeout 10
ui menu.c32
label Other Linux
linux /boot/vmlinuz-linux
initrd /boot/initramfs-linux.img
append root=/dev/sda3 ro quiet
label MAIN
com32 chain.c32
append hd0 0
Tratado en la página de usuario de Djgera.
Usar memtest
Instale memtest+ desde los repositorios oficiales.
Use la secciónLABEL para lanzar memtest:
/boot/syslinux/syslinux.cfg
...
LABEL memtest
MENU LABEL Memtest86+
LINUX ../memtest86+/memtest.bin
...
HDT
HDT (Hardware Detection Tool) es un instrumento para visualizar información sobre el hardware. Como siempre, el archivo .c32 debe ser copiado o debe crearse un enlace simbólico en /boot/syslinux/.
Para obtener información del dispositivo PCI, o bien copie, o bien cree un enlace simbólico, de /usr/share/hwdata/pci.ids a /boot/syslinux/pci.ids y añada lo siguiente al archivo de configuración:
/boot/syslinux/syslinux.cfg
LABEL hdt
MENU LABEL Hardware Info
COM32 hdt.c32
Reinicio y apagado
Use la siguiente sección para reiniciar o apagar su equipo:
/boot/syslinux/syslinux.cfg
LABEL reboot
MENU LABEL Reboot
COM32 reboot.c32
LABEL poweroff
MENU LABEL Power Off
COMBOOT poweroff.com
Limpiar el menú
Para borrar la pantalla al salir del menú, añada la siguiente línea:
/boot/syslinux/syslinux.cfg
MENU CLEAR
Redistribución del teclado
Si tiene que editar a menudo sus parámetros de arranque, es posible que desee volver a asignar la distribución del teclado. Esto le permite introducir "=", "/" y otros caracteres fácilmente con un teclado no americano.
Primero tiene que crear una distribución de teclado compatible (por ejemplo, con uno español):
# cp /usr/share/kbd/keymaps/i386/qwerty/us.map.gz ./
# cp /usr/share/kbd/keymaps/i386/qwerty/es.map.gz ./
# gunzip {es,us}.map.gz
# mv es.{,k}map
# mv us.{,k}map
# keytab-lilo es > es.ktl
Con privilegios root, copie es.ktl a /boot/syslinux/ y establezca como propietario a root:
# chown root:root /boot/syslinux/es.ktl
Ahora edite syslinux.conf y añada:
/boot/syslinux/syslinux.cfg
KBDMAP es.ktl
Ocultar el menú
Utilice la opción:
/boot/syslinux/syslinux.cfg
MENU HIDDEN
para ocultar el menú mientras se muestra sólo el tiempo de espera. Presione cualquier tecla para que aparezca el menú.
Solución de Problemas
Utilizar el prompt de Syslinux
Es posible escribir el valor del parámetro LABEL correspondiente al sistema operativo que se quiere ejecutar (según su syslinux.cfg). Si ha usado la configuración de ejemplo, escriba:
boot: arch
Si se obtiene un error al cargar el archivo de configuración, es posible pasar manualmente el parámetro del boot, por ejemplo:
boot: ../vmlinuz-linux root=/dev/sda2 ro initrd=../initramfs-linux.img
Si no se tiene acceso a boot: en ramfs, y cuando sea incapaz temporalmente de arrancar el kernel, prosiga como sigue:
- 1. Cree un directorio temporal, donde montar la partición root (si no existe ya):
# mkdir -p /new_root
- 2. Monte
/en/new_root(en el caso de que/boot/esté en una partición separada, tendrá que montar ambas):
# mount /dev/sd[a-z][1-9] /new_root
- 3. Use
vimy modifiquesyslinux.cfgde acuerdo a sus necesidades y guarde el archivo.
- 4. Reinicie.
Fallo de fsck en la partición root
En el caso de una eventual partición root gravemente dañada (con el journal dañado), abra la shell de emergencia de Syslinux y monte el sistema de archivo root:
# mount /dev/root partition /new_root
Y obtenga el ejecutable tune2fs binary que se encuentra en la partición root partition (el cual no está incluido en Syslinux):
# cp /new_root/sbin/tune2fs /sbin/
Siga con las instrucciones descritas en ext2fs: no external journal para crear un journal nuevo para la partición root.
Default o UI no encontrado en su equipo
Algunos fabricantes de placas madre no proporcionan buena compatibilidad para arrancar desde dispositivos USB u otros.
Mientras que una unidad USB con formato ext4 puede permitir el arranque en un equipo más reciente, algunos equipos antiguos pueden bloquearse si la partición de arranque que contiene el kernel y el initrd no está en una partición FAT16. Para evitar que una máquina antigua cargándose con ldlinux falle al leer syslinux.cfg, use cfdisk para crear una partición FAT16 (<= 2GB) y formatearla usando dosfstools:
# mkfs.msdos -F 16 /dev/sda1
a continuación, instale y configure Syslinux.
Missing operating system
Si aparece este mensaje, compruebe si la partición que contiene /boot tiene el flag de arranque habilitado. Si el flag está activado, entonces, tal vez, esta partición comienza en el sector 1 en vez del 63 o 2048. Compruebe esta circunstancia con fdisk -l. Si se inicia en el sector 1, se puede mover la partición(s) con gparted desde un disco de rescate. O bien, si tiene una partición boot separada, puede hacer una copia de seguridad de /boot con:
# cp -a /boot /boot.bak
y luego arrancar con el disco de instalación de Arch. A continuación, use cfdisk para borrar la partición /boot, y volver a crearla. Esta vez se debe comenzar en el sector adecuado, 63. Ahora monte sus particiones y efectue un chroot en el sistema montado, como se describe en la Beginners guide (guía de principiantes). Restaure /boot con la orden:
# cp -a /boot.bak/* /boot
Compruebe que /etc/fstab es correcto. Entonces, ejecute:
# syslinux-install_update -iam
y reinicie.
También recibirá este error si está tratando de arrancar desde una matriz RAID md 1 creada con una versión de los metadatos no soportada por Syslinux. A partir de agosto de 2013 mdadm creará, de forma predeterminada, una matriz con la versión 1.2 de los metadatos, pero Syslinux tan solo soporta la versión 1.0. Si este es el caso, tendrá que volver a crear su matriz RAID pasando la opción --metadata=1.0 para mdadm.
¡Se inicia Windows en vez de Syslinux!
Solución: Asegúrese de que la partición que contiene /boot tiene el indicador (flag) boot activo. También, asegúrese de que el indicador boot no está activado en la partición de Windows. Consulte la sección de instalación anterior.
El MBR que viene con Syslinux busca la primera partición activa que tiene el flag boot habilitado. Es probable que Syslinux encontrase primero la partición de Windows y que la misma tuviese el flag boot activo. Si lo desea, es posible utilizar tambien el MBR porporcionado por Windows o MS-DOS fdisk.
Entradas del menú sin ningún efecto
Si se selecciona una entrada del menu de arranque y no sucede nada, tan sólo "refresca" el menú, probablemente signifique que tiene un error en el archivo syslinux.cfg. Presione Tab y modifique los parámetros del boot. Alternativamente, pulse Esc y escriba en el LABEL de su entrada de arranque (por ejemplo, arch).
Imposible eliminar ldlinux.sys
El archivo ldlinux.sys tiene establecido el atributo de inmutable, para prevenir que pueda ser borrado o sobreescrito. Esto implica que el sector en el que reside el archivo en cuestión no debe cambiar, de lo contrario Syslinux tendrá que ser reinstalado. Para ello tendrá que eliminarlo, ejecutando las siguientes órdenes:
# chattr -i /boot/syslinux/ldlinux.sys # rm /boot/syslinux/ldlinux.sys
Problemas: A partir de linux-3.0, el controlador de modesetting trata de mantener el contenido actual de la pantalla después de cambiar la resolución (por lo menos, lo hace con mi Intel, al tener Syslinux en modo texto). Parece que esto va mal cuando se combina con el módulo vesamenu en Syslinux (el bloque blanco es, en realidad, un intento de mantener el menú de Syslinux, pero el controlador no logra captar la imagen de la modalidad gráfica vesa).
Si tiene una resolución personalizada y se utiliza vesamenu junto con modesetting, pruebe insertando lo siguiente en syslinux.cfg para remover el bloque blanco y continuar el arranque en modo gráfico:
APPEND root=/dev/sda6 ro 5 vga=current quiet splash