Cómo seleccionar un disco de arranque como pxelinux

Cómo seleccionar un disco de arranque como pxelinux

He configurado una computadora con pxelinux y puedo arrancar desde DHCP/TFTP. Puedo recibir el gestor de arranque y luego arrancar desde un disco duro o SSD local. Pero quiero elegir con el gestor de arranque desde qué dispositivo debo arrancar. Por ejemplo, en una computadora con dos dispositivos, quiero elegir desde qué dispositivo debo iniciar. Jugué con la configuración de pxelinux y leí la documentación, pero parece que solo menciona el proceso de arranque en red. Aquí está mi archivo de configuración de ejemplo (predeterminado)

default ssd
prompt 1
ONTIMEOUT local
timeout 3000

MENU TITLE PXE Menu

LABEL hdd
    MENU LABEL Boot local hard drive
    root= (hd0,2)
    kernel /boot/vmlinuz-3.11.6-4-desktop
    initrd=(hd0,2)/boot/initrd-3.11.6-4-desktop

LABEL ssd
    MENU LABEL Boot local hard drive
    LOCALBOOT -1

Tiene pxelinux 6.0.3 y he probado casi todas las combinaciones, pero la única respuesta siempre es que no puede encontrar el kernel o el initrdarchivo, no importa si digo /dev/sda2o (hd0,2)algo así.

¿Me estoy perdiendo algo o esta tarea no es posible con pxelinux?


Para cada opción, la respuesta siempre es "No existe tal archivo o directorio", excepto la opción "dos", que arranca bien. (No pude obtener un registro de la consola). tftp del cliente al servidor funciona sin ningún problema.

default menu.c32
prompt 0
ONTIMEOUT local
timeout 3000

MENU TITLE PXE Menu

LABEL one
        MENU LABEL Boot local hard drive
    root= hd0 2
    kernel /boot/vmlinuz-3.11.6-4-desktop

LABEL two
        MENU LABEL Boot local hard drive
        LOCALBOOT 0

LABEL three
        MENU LABEL Boot local hard drive
    root=/dev/sda2
    kernel vmlinuz-3.11.6-4-desktop
    initrd=/boot/initrd-3.11.6-4-desktop.gz

LABEL four
        MENU LABEL VIER
    root=/dev/sda2 rw
        KERNEL ftp://179.99.99.1/chain.c32

LABEL five
    MENU LABEL Hole chain.c32 uebers Netz
    root hd0 2
    KERNEL chain.c32

LABEL six
        MENU LABEL VIER
    root=(hd0,2) rw
        KERNEL /boot/chain.c32

LABEL seven
    MENU LABEL Hole chain.c32 uebers Netz
    root hd0 2
    KERNEL /boot/chain.c32
    initrd=/boot/initrd-3.11.6-4-desktop.gz 

El estado del demonio xinetd muestra que el cliente tftp está solicitando los archivos del servidor. Parece como si el cliente estuviera obteniendo los archivos del servidor. Pero por qué no lo procesa...

xinetd.service - Xinetd A Powerful Replacement For Inetd
   Loaded: loaded (/usr/lib/systemd/system/xinetd.service; enabled)
   Active: active (running) since Wed 2016-06-29 16:08:46 CEST; 21min ago
 Main PID: 1536 (xinetd)
   CGroup: /system.slice/xinetd.service
           |-1536 /usr/sbin/xinetd -stayalive -dontfork
           `-2938 in.tftpd -s /rde/installation/tftpboot -vvv

Jun 29 16:21:47 uaewg-srv in.tftpd[4161]: RRQ from ::ffff:199.99.99.10 filename menu.c32
Jun 29 16:22:32 uaewg-srv in.tftpd[4279]: RRQ from ::ffff:199.99.99.10 filename chain.c32
Jun 29 16:22:32 uaewg-srv in.tftpd[4280]: RRQ from ::ffff:199.99.99.10 filename chain.c32
Jun 29 16:22:36 uaewg-srv in.tftpd[4288]: RRQ from ::ffff:199.99.99.10 filename chain.c32
Jun 29 16:24:17 uaewg-srv in.tftpd[4544]: RRQ from ::ffff:199.99.99.10 filename pxelinux.0
Jun 29 16:24:17 uaewg-srv in.tftpd[4545]: RRQ from ::ffff:199.99.99.10 filename ldlinux.c32
Jun 29 16:24:17 uaewg-srv in.tftpd[4556]: RRQ from ::ffff:199.99.99.10 filename pxelinux.cfg/default
Jun 29 16:24:17 uaewg-srv in.tftpd[4558]: RRQ from ::ffff:199.99.99.10 filename menu.c32
Jun 29 16:24:34 uaewg-srv in.tftpd[4580]: RRQ from ::ffff:199.99.99.10 filename chain.c32
Jun 29 16:24:38 uaewg-srv in.tftpd[4588]: RRQ from ::ffff:199.99.99.10 filename chain.c32

Respuesta1

Descubrí cómo configurar pxelinux para mis necesidades. tftp ya se estaba ejecutando y funcionando, hice un "tail -f /var/log/messages" para descubrir que chain.c32 no funcionaba (se estaba cargando, pero no pasó nada):

2016-06-29T16:15 uaewg-srv xinetd[1536]: START: tftp from=::ffff:172.99.199.9
2016-06-29T16:15 uaewg-srv in.tftpd[2939]: RRQ from ::ffff:172.99.199.9 filename chain.c32
2016-06-29T16:18 uaewg-srv sshd[3183]: Accepted keyboard-interactive/pam for uae_wg_sim from 127.0.0.1 port 54948 ssh2

Luego podría probarlo con los otros archivos, proporcioné los archivos vmlinuz e initrd en el../tftpboot/pxelinux.cfg/defaultarchivo de configuración:

prompt 0
ONTIMEOUT local
timeout 3000

MENU TITLE PXE Menu

LABEL local
        MENU LABEL Boot local hard drive
        LOCALBOOT 0

LABEL hdd
      kernel vmlinuz-3.11.6-4-desktop
      APPEND initrd=initrd-3.11.10-21-desktop  root=/dev/sda2

chain.c32, menu.c32 tampoco funcionó en el sistema, no sé por qué, tal vez intente averiguar si me queda tiempo, me alegro de que ahora esté funcionando. /var/log/mensajeses una buena ayuda para el diagnóstico de errores, no estaba claro quién era el responsable del tftpd, pero descubrí que presumiblemente fue iniciado por xinetd y no por systemd. Cambié el contenido de/etc/xinetd.d/tftpa :

service tftp
{
#   per_source      = 11
    cps         = 100 2
    socket_type     = dgram
    protocol        = udp
    wait            = yes
    user            = root
    server          = /usr/sbin/in.tftpd
    server_args     = -s /rde/installation/tftpboot -vvv
    flags           = IPv6 IPv4
}

saludos y gracias a cas por su ayuda!

Respuesta2

Necesitas usar el cargador de cadena (cadena.c32) desyslinux. Al igual que con el resto syslinuxde módulos, existen diferentes versiones para BIOS, efi32 y efi64.

LABEL local
    MENU DEFAULT
    MENU LABEL Boot from Local Hard Disk
    KERNEL /path/to/chain.c32
    APPEND hd0 2

Esto está ligeramente adaptado de mi /srv/tftp/defaultarchivo: mi versión tiene KERNEL http://ip.ip.ip.ip/tftp/chain.c32(mi httpd está configurado para servir /tftp/desde /srv/tftp; tftp funcionaría igual de bien) y APPEND hd0 0.

información relacionada