El arranque UEFI de Linux sin disco falla en pivot_root al querer especificar la raíz, pero ¿cómo puedo determinar el dispositivo raíz?

El arranque UEFI de Linux sin disco falla en pivot_root al querer especificar la raíz, pero ¿cómo puedo determinar el dispositivo raíz?

Necesitamos configurar un servidor EFI PXE. Logré lograr que una máquina de prueba se iniciara completamente hasta llegar a la parte pivot_root del proceso de inicio. Entonces me llega lo temido:

VFS: Cannot open root device "nvram" or unknown-block(0,0)
Please append a correct "root=" boot option; here are the available partitions:

Y sí, la lista de particiones es nil.

¿Alguien puede decirme cómo puedo obtener el dispositivo root= para mi configuración de grub heredada para máquinas centos sin disco? Obviamente ya lo he probado /dev/nvramy /dev/ram.

Cuando arrancamos PXE (modo heredado) no hay ningún problema ni configuraciones especiales que soliciten un dispositivo raíz. Simplemente funciona. Esta es la primera vez que trabajo con el arranque EFI, así que estoy seguro de que me faltan algunos parámetros.

Configuración actual: CentOS 6.8, Legacy Grub (bootx64), ISC DHCP, TFTP

Configuración EFI actual (/EFI/efidefault):

default=0
timeout=3
splashimage=(nd)/splash.xpm.gz
#prompt 0
#ONTIMEOUT default

title Linux
   menu label UEFI Image
   menu default
   root (nd)
   kernel /discovery_images/2.6.32-642.el6.x86_64/vmlinuz-2.6.32-642.el6.x86_64 root=/dev/nvram
   append initrd=/discovery_images/2.6.32-642.el6.x86_64/centos-initramfs-2.6.32-642.el6.x86_64.img.gz rw shell init=/init biosdevname=0 consoleblank=0 vga=773 ramdisk_size=9216

ARREGLO FINAL

Entonces el problema fue que estaba usando la sintaxis incorrecta para la configuración heredada de GRUB. Gracias a #CENTOS en Freenode (IRC), uno de los miembros (disculpas, no recuerdo su nick) señaló que Legacy GRUB no entiende la appenddirectiva. Entonces, moviendo los argumentos en la appendcadena de mi configuración (arriba) a la kerneldirectiva y perdiendo la appendcadena en la initrdlínea, y finalmente, eliminando el =entre initrdy /discover..., solucionó el problema:

default=0
timeout=3
splashimage=(nd)/splash.xpm.gz

title Linux
   menu label UEFI Image
   menu default
   root (nd)
   kernel /discovery_images/2.6.32-642.el6.x86_64/vmlinuz-2.6.32-642.el6.x86_64 rw shell init=/init biosdevname=0 consoleblank=0 vga=773 ramdisk_size=9216
   initrd /discovery_images/2.6.32-642.el6.x86_64/centos-initramfs-2.6.32-642.el6.x86_64.img.gz

Respuesta1

AFAICT (pero mi propio experimento es más con Windows sin disco, incluso si comenzamos a migrar nuestra solución sin disco a Windows antes de que esta gran empresa de TI de dos letras la eliminara...), es posible que necesite algo diferente. 1 - No especifique ningún "root=" en la línea del kernel 2 - use una línea initrd (y la unidad ram de inicio relacionada, que debe compilar) 3 - en este initrd, inicie cualquier dispositivo de bloque y controlador de sistema de archivos que necesite montar su partición raíz (y otras particiones también)

Consulta esta página: http://linux120919.blogspot.fr/2015/01/redhat-65-as-legacy-and-uefi-pxe.html por ejemplo

información relacionada