¿Es posible una memoria USB híbrida de Linux para UEFI y BIOS heredado?

14

mi idea es crear un USB-Boot-Stick con Lubuntu que pueda arrancar en un BIOS BIOS más antiguo y en un sistema UEFI más nuevo.

Esto sería bastante fácil, cuando el Stick se configuraría como un dispositivo de arranque heredado, pero quiero que sea un dispositivo compatible con UEFI.

  1. ¿Eso tiene sentido? ¿O entendí el concepto UEFI horriblemente mal?
  2. Si es necesario, puede haber dos instalaciones de Linux diferentes (una para UEFI, otra para heredada pero ambas en la misma unidad)
  3. Arrancar un dispositivo GPT en BIOS antiguo: ¿funcionará?

No puedo ver claro, podría ser una mejor idea tener un stick de arranque Linux separado, pero tengo curiosidad por explorar los límites :)

Entonces, ¿es posible mi idea de un híbrido linux-uefi-boot-usb-stick que funcione con biografías heredadas?


(3) parece posible para linux con grub http://www.rodsbooks.com/gdisk/booting.html

Además, tengo una Partición EF00 lista en ese stick, aparte de una partición Swap, Fat32 y dos particiones Ext4.


(1) parece ser posible también http://www.rodsbooks.com/bios2uefi/

Sin embargo, estas instrucciones son de 2012, han pasado algún tiempo desde entonces: ¿alguien tiene un ejemplo de trabajo que sea más fácil?


Para otros investigadores de este tema:

Arranque de Windows 7 desde el disco GPT en una placa base que no sea EFI ¿Hay alguna forma de arrancar Windows 7/8 usando BIOS en GPT?

http://www.borncity.com/blog/2012/07/25/uefi-emulation-auf-pcs/


ACTUALIZAR:

He logrado crear la parte UEFI, incluida la configuración de arranque segura con rEFInd.

Siguiendo los consejos dados, solía ddcopiar gptmbr.binen mi disco, que ahora parece hacer al menos algo en un BIOS-System: "Este no es un disco de arranque"

Sin embargo, he seguido el consejo y configuré el pmbrindicador para el disco y el legacy bootindicador gpt . Todavía tengo este error, ¿alguna idea?

Mi partición ESP es la segunda partición en el disco y está configurada con archivos efi.

La puesta en marcha:

  • 64GB de espacio
  • GPT Partitiontable
  • El disco tiene establecido el indicador pmbr
  • La primera partición comienza en 16MiB y tiene aproximadamente 45 GB, un fat32 primario para datos
  • 2nd Partition comienza alrededor de 45 GB y es el sistema EFI (fat32) con una configuración de rEFInd que funciona
  • 3rd - 5th Partition es home (ext4), swap y root (ext4) de mi Lubuntu 14.04.1 en funcionamiento

Utilizando ddhe copiado el gptmbr.binSyslinux 6.02 compilado a los primeros 440bytes.

Bajo parted 3.2 puedo ver que mi partición 2 tiene una booty una legacy_bootbandera.

Durante el arranque, no se encuentra ningún disco de arranque ; si configuro mi quinta en lugar de la segunda partición, legacy_bootme falta el sistema operativo

¡Está vivo!

(Como mi antigua pregunta se eliminó /ubuntu//q/516730/319747 )


Mi conjetura es que tengo que copiar algunos de los *.c32y otros archivos a un syslinux carpeta eighter en mi EFI (donde ?!) o en mi partición raíz ( /boot/syslinuxpara conseguir que funcione?!) - Estoy en lo correcto? ¿Qué archivos son esenciales?

Además, supongo que también necesitaré ese syslinucx.cfgarchivo, ¿verdad?


Mi objetivo sería al menos un arranque directo del sistema lubuntu en la partición ext4 raíz.

Actualizar:

Aunque no tengo idea de por qué, lo hice funcionar, pero no con una instalación manual.

  • la pmbrbandera era mala y prohibía que mi sistema UEFI iniciara el dispositivo como UEFI
  • la legacy_bootbandera era necesaria para mi quinta partición (raíz de Linux)
  • Tuve que usar extlinux --install /path/to/root/parition
  • Tuve que crear un syslinux.cfgarchivo en la carpeta syslinux debajo del arranque de mi partición raíz

Hice todo esto en un segundo dispositivo más pequeño, luego intenté copiar solo la carpeta syslinux, pero no tuve suerte, extlinux --installparece ser obligatorio.

Alguien sabe lo que extlinux --installhace exactamente ? ¿Se puede hacer manualmente o de qué otra manera podría instalar una versión más reciente como 6.02 sin instalarla en su sistema?

Conseguí que mi dispositivo funcionara con las particiones mencionadas en BIOS, UEFI y UEFI SecureBoot, un viaje increíble, aprendí mucho, casi mato a 2TB con la partida, ten cuidado y buena suerte.

Jook
fuente
tu enlace está roto ... ¿tienes tu historia en otro lugar? Me gustaría hacer lo mismo. Gracias.
pvinis
1
@pvinis gracias por la información, he fusionado la pregunta / resultado de askubuntu aquí, ya que se eliminó
Jook

Respuestas:

11

Es posible, y con mucha frecuencia se realiza tanto con memorias USB externas como con unidades internas.

En cuanto a los tipos de tabla de partición:

  • El BIOS normalmente no necesita ninguna tabla de particiones. Solo le interesa la parte del código de arranque que son los primeros 440 bytes de su MBR. (Aunque hay excepciones. Algunas implementaciones de BIOS realmente se rompen si no pueden encontrar un MBR con uno de los tipos de partición habituales. Esperemos que sean raros).

    La tabla de particiones GPT no reemplaza físicamente un MBR, siempre comienza en el sector 1, mientras que el MBR está en el sector 0, por lo que es posible que un disco tenga ambos. De hecho, la mayoría de los discos GPT no tienen un "MBR de protección" que contiene sólo una única partición que cubre todo el disco, para evitar más viejas herramientas de MBR de sólo el reparto de la destrucción accidental de los datos.

    Por lo tanto, puede instalar, por ejemplo, el sector de arranque de Syslinux en su MBR, y se iniciará. (El  syslinux-install_updatescript lo hará por usted, pero puede buscarlo gptmbr.binen su paquete syslinux para hacerlo manualmente).

    Al igual que el indicador "activo" en las particiones MBR, Syslinux buscará el indicador "arranque de BIOS heredado" en las particiones GPT (bit 2 - UEFI spec 2.4 sección 5.3.3, tabla 20); la secuencia de comandos antes mencionada también establece ese indicador automáticamente si tiene sgdisk(desde gptfdisk) instalado.

    GRUB también se puede usar, pero también es un poco más molesto. Dado que GRUB 2 quiere "incrustar" partes de sí mismo en los sectores tradicionalmente no utilizados 1-62, sobrescribiría un GPT que está almacenado en la misma ubicación. Por lo tanto, es posible que deba crear una partición dedicada de 2 a 4 MB y marcarla como BIOS de arranque, de modo que grub-installse encuentre como un lugar de inserción.

  • Por otra parte, la especificación UEFI hace requerir soporte para tipos de partición MBR (sección 12.3.1) y asignar el tipo de partición MBR 0xEFa la partición del sistema EFI (sección 5.2.2).

    Entonces, si por alguna razón no puede hacer que su disco funcione con GPT, aún puede crear una partición del sistema EFI en MBR, y se usará siempre que tenga el sistema de archivos correcto y todos los archivos necesarios (sección 12.3.1.3):

    Para dispositivos de medios extraíbles, debe haber solo una partición del sistema compatible con UEFI, y esa partición debe contener un directorio definido por UEFI en el directorio raíz. Se nombrará el directorio EFI. Todos los cargadores y aplicaciones del sistema operativo se almacenarán en un subdirectorio a continuación EFIllamado BOOT. Solo debe haber una imagen EFI ejecutable para cada arquitectura de procesador compatible en el BOOTdirectorio. Para que los medios extraíbles sean arrancables bajo EFI, deben construirse de acuerdo con las reglas establecidas en la Sección 3.4.1.1.

Con respecto a los sistemas operativos, a Linux generalmente no le importa lo más mínimo si se arranca desde BIOS hoy y desde UEFI mañana. Tuve que reiniciar mi computadora portátil del modo UEFI al modo "Compatibilidad de BIOS" y retroceder tal vez cien veces esta semana, mientras trataba de encontrar un error en el soporte 3.17 UEFI ...


Tenga en cuenta que el artículo "Transformación de BIOS a UEFI" trata sobre algo muy diferente. Describe cómo instalar UEFI en sí mismo , una implementación UEFI llamada "DUET", que se inicia desde un sistema solo de BIOS. No tiene nada que ver con arrancar un sistema operativo directamente desde el BIOS.

usuario1686
fuente
+1 - syslinux_install Investigaré eso, gracias por la confirmación, tranquilidad y nuevos comentarios
Jook
He seguido su consejo, pero estoy atascado con la configuración, mi mbrparece estar bien, pero no encuentra mi EFI Systempartición. ¿Es un problema que sea la segunda partición en el disco que comienza alrededor de 45 GB en el disco? ¿Tengo que configurar una sección espectral en el EFI además de la configuración de EFI que ya funciona allí?
Jook
Lo tengo funcionando :) así que, gracias! syslinux es bastante agradable y me llevó a gPxe y plopkexec, que examinaré más adelante en otra ocasión. Para cualquier otro investigador: askubuntu.com/q/516730/319747
Jook
2

Si, esto es posible.

La idea básica es dividir en GPT su memoria USB de esta manera:

  1. Partición de arranque del BIOS (tipo GPT 1686148-6449-6E6F-744E-656564454649): 1 MiB, sin sistema de archivos
  2. Partición del sistema EFI (tipo GPT C12A7328-F81F-11D2-BA4B-00A0C93EC93B) - 200 MiB, sistema de archivos VFAT
  3. Partición de arranque de Linux (tipo GPT 0FC63DAF-8483-4772-8E79-3D69D8477DE4) - 1 GiB, sistema de archivos ext4
  4. Sistema de archivos raíz / de inicio de Linux (tipo GPT 0FC63DAF-8483-4772-8E79-3D69D8477DE4): espacio restante, sistema de archivos XFS o Btrfs

Esta partición nos permite arrancar en sistemas Legacy porque con GPT todavía hay espacio para un MBR (por razones de compatibilidad con versiones anteriores) y Grub2 tiene suficiente espacio para instalar alguna etapa intermedia en la partición de arranque del BIOS. Las BIOS heredadas no se preocupan por el esquema de partición y el Kernel Grub2 / Linux no tiene problemas para comprender GPT en sistemas heredados.

En los sistemas UEFI , el firmware UEFI ignora el MBR y utiliza la partición del sistema EFI como punto de entrada.

Por ejemplo, con Fedora, básicamente tienes que hacer lo siguiente:

Asegúrese de que el sistema de archivos de arranque de Linux esté montado debajo /booty que el sistema de archivos de partición del sistema EFI esté montado debajo /boot/efi.

(Re-) Instale los cargadores de arranque heredados y UEFI:

grub2-pc grub2-efi-x64 shim-x64 efibootmgr

(Re-) Genere los archivos de configuración de grub tanto para el arranque UEFI como heredado:

# grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg
# grub2-mkconfig -o /boot/grub2/grub.cfg

Dependiendo de si el sistema arranca en modo heredado o UEFI usted tiene que fijar el primer o segundo archivo y reemplazar (linux|initrd)16con (linux|initrd)efio al revés.

Instale grub en el MBR:

# grub2-install --target=i386-pc /dev/sd_your_usb_stick_device

Voila

maxschlepzig
fuente
PD: Escribí un script de aprovisionamiento que implementa este enfoque híbrido y, por lo tanto, puede usarse para crear automáticamente una memoria USB de este tipo.
maxschlepzig