È possibile una chiavetta USB ibrida Linux per UEFI e BIOS legacy?


14

la mia idea è quella di creare una chiavetta USB con Lubuntu in grado di avviarsi su un laptop BIOS più vecchio e su un nuovo sistema UEFI.

Questo sarebbe abbastanza facile, quando Stick sarebbe configurato come dispositivo di avvio legacy, ma voglio che sia un dispositivo compatibile con UEFI.

  1. Ha senso ?! O ho capito il concetto UEFI orribilmente sbagliato?
  2. Se necessario, ci possono essere due diverse installazioni Linux (una per UEFI, una per legacy ma entrambe sulla stessa unità)
  3. Avvia un dispositivo GPT su BIOS legacy: funzionerà?

Non riesco a vedere chiaramente, potrebbe essere un'idea migliore avere un boot stick Linux legacy separato, ma sono curioso di esplorare i confini :)

Quindi, è possibile la mia idea di una chiavetta ibrida linux-uefi-boot-usb che funzioni con il BIOS legacy?


(3) sembra essere possibile per Linux con grub http://www.rodsbooks.com/gdisk/booting.html

Inoltre, ho una partizione EF00 pronta su quel bastone, a parte una partizione Swap, Fat32 e due Ext4.


(1) sembra essere possibile anche http://www.rodsbooks.com/bios2uefi/

Queste istruzioni sono comunque del 2012, da allora è passato del tempo: qualcuno ha un esempio funzionante che è più facile?


Per altri ricercatori di questo argomento:

Avvio di Windows 7 dal disco GPT sulla scheda madre non EFI Esiste un modo per avviare Windows 7/8 utilizzando il BIOS su GPT?

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


AGGIORNARE:

Sono riuscito a creare la parte UEFI inclusa la configurazione di avvio sicura con rEFInd.

Seguendo il consiglio dato, ho usato ddper copiare gptmbr.binsul mio disco, che ora sembra fare almeno qualcosa su un sistema BIOS: "Questo non è un disco di avvio"

Tuttavia, ho seguito il consiglio e impostato il pmbrflag per il disco e il legacy bootflag gpt - continui a ricevere questo errore, qualche idea?

La mia partizione ESP è la seconda partizione sul disco ed è configurata con file efi.

Il set up:

  • 64 GB di spazio
  • GPT partizionabile
  • Il disco ha il flag pmbr impostato
  • La prima partizione inizia a 16 MiB ed è di circa 45 GB, un fat32 primario per i dati
  • La seconda partizione inizia intorno a 45 GB ed è il sistema EFI (fat32) con una configurazione rEFInd funzionante
  • 3rd - 5th Partition è home (ext4), swap e root (ext4) del mio Lubuntu 14.04.1 funzionante

Usando ddho copiato il gptmbr.binmio Syslinux 6.02 compilato nei primi 440byte.

Nella parte 3.2 posso vedere che la mia partizione 2 ha un boote un legacy_bootflag.

Durante l'avvio non viene trovato alcun disco di avvio : se imposto il mio 5 ° posto invece della 2a partizione, legacy_bootottengo il sistema operativo mancante

È vivo!

(Dato che la mia vecchia domanda è stata cancellata /ubuntu//q/516730/319747 )


La mia ipotesi è che devo copiare alcune delle *.c32e altri file in una syslinux cartella eighter sul mio EFI (dove ?!) o sul mio partizione di root ( /boot/syslinuxper farlo funzionare?!) - ho ragione? Quali file sono essenziali?

Inoltre, immagino che avrò bisogno anche di quel syslinucx.cfgfile - giusto?


Il mio obiettivo sarebbe almeno un avvio diretto del sistema lubuntu sulla partizione root ext4.

Aggiornare:

Anche se non ho idea del perché, l'ho fatto funzionare, ma non con un'installazione manuale.

  • la pmbrbandiera era cattiva e proibiva al mio sistema UEFI di avviare lo stick come UEFI
  • il legacy_bootflag era necessario per la mia quinta partizione (root di Linux)
  • Ho dovuto usare extlinux --install /path/to/root/parition
  • Ho dovuto creare un syslinux.cfgnella cartella syslinux all'avvio della mia partizione di root

Ho fatto tutto questo su un secondo stick più piccolo, quindi ho provato a copiare solo la cartella syslinux, ma non ho avuto fortuna - extlinux --installsembra essere obbligatorio.

Qualcuno sa cosa extlinux --installfa esattamente ? Può essere fatto manualmente o in quale altro modo è possibile installare una versione più recente come 6.02 senza installarla sul sistema?

Ho fatto funzionare il mio stick con le partizioni menzionate su BIOS, UEFI e UEFI SecureBoot, un bel giro, ho imparato molto, ho quasi ucciso 2 TB con parted, stai attento e buona fortuna.


il tuo link è rotto .. hai la tua storia da qualche altra parte? vorrei fare lo stesso. Grazie.
pvinis,

1
@pvinis grazie per le informazioni, ho unito la domanda / il risultato di askubuntu qui, come è stato eliminato
Jook

Risposte:


11

È possibile ed è molto frequente con chiavette USB esterne e unità interne.

Per quanto riguarda i tipi di tabella delle partizioni:

  • Il BIOS normalmente non necessita di alcuna tabella delle partizioni. È interessato solo alla parte del codice bootstrap che è i primi 440 byte del tuo MBR. (Anche se ci sono eccezioni. Alcune implementazioni del BIOS in realtà si interrompono se non riescono a trovare un MBR con uno dei soliti tipi di partizione. Speriamo che siano rari.)

    La tabella delle partizioni GPT non sostituisce fisicamente un MBR - inizia sempre dal settore 1, mentre l'MBR si trova nel settore 0 - quindi è possibile che un disco abbia entrambi. Infatti, la maggior parte dei dischi GPT non hanno un "MBR protettivo" contenente la sola partizione che copre l'intero disco, per prevenire vecchi strumenti MBR sola partizionamento di distruggere accidentalmente i dati.

    Quindi puoi installare, ad esempio, il settore di avvio di Syslinux nel tuo MBR e si avvierà. (Lo  syslinux-install_updatescript farà questo per te, ma puoi cercarlo gptmbr.binnel tuo pacchetto syslinux per farlo manualmente.)

    Proprio come il flag "attivo" sulle partizioni MBR, Syslinux cercherà il flag "legacy BIOS bootable" sulle partizioni GPT (bit 2 - UEFI specifica 2.4 sezione 5.3.3 tabella 20); lo script di cui sopra imposta anche quel flag automaticamente se hai sgdisk(da gptfdisk) installato.

    GRUB può anche essere usato, ma è anche un po 'più fastidioso. Poiché GRUB 2 vuole "incorporare" parti di se stesso nei settori tradizionalmente inutilizzati 1-62, sovrascriverebbe un GPT che è memorizzato nella stessa posizione. Quindi potrebbe essere necessario creare una partizione dedicata di 2-4 MB e contrassegnarla come avviabile dal BIOS, in modo da grub-installtrovarsi in un luogo di incorporamento.

  • D'altra parte, la specifica UEFI non richiedono il supporto per i tipi di partizione MBR (sezione 12.3.1) e assegnare il tipo di partizione MBR 0xEFnella partizione di sistema EFI (sezione 5.2.2).

    Quindi, se per qualche motivo non riesci a far funzionare il tuo disco con GPT, puoi comunque creare una partizione di sistema EFI su MBR e verrà utilizzata finché ha il filesystem corretto e tutti i file necessari (sezione 12.3.1.3):

    Per i dispositivi rimovibili, deve esistere solo una partizione di sistema conforme UEFI e tale partizione deve contenere una directory definita UEFI nella directory principale. La directory verrà denominata EFI. Tutti i caricatori e le applicazioni del sistema operativo verranno archiviati in una sottodirectory sotto EFIchiamata BOOT. Nella BOOTdirectory deve essere presente solo un'immagine EFI eseguibile per ciascuna architettura di processore supportata . Perché i supporti rimovibili possano essere avviati in EFI, devono essere costruiti in conformità con le regole stabilite nella Sezione 3.4.1.1.

Per quanto riguarda i sistemi operativi, Linux in genere non si preoccupa minimamente del fatto che sia stato avviato dal BIOS oggi e dall'UEFI domani. Ho dovuto riavviare il mio laptop dalla modalità UEFI alla modalità "Compatibilità BIOS" e tornare forse cento volte questa settimana, mentre cercavo di trovare un bug nel supporto UEFI 3.17 ...


Si noti che l'articolo "Trasformazione da BIOS a UEFI" riguarda una cosa abbastanza diversa. Descrive come installare UEFI stesso - un'implementazione UEFI chiamata "DUET" - da avviare da un sistema solo BIOS. Non ha nulla a che fare con l'avvio di un sistema operativo direttamente dal BIOS.


+1 - syslinux_install Lo esaminerò, grazie per la conferma, la rassicurazione e il nuovo input
Jook,

Ho seguito il tuo consiglio, ma sono bloccato con l'installazione, il mio mbrsembra essere ok ma non trova la mia EFI Systempartizione. È un problema che è la seconda partizione sul disco a partire da circa 45 GB nel disco? Devo impostare una sezione spettacolare su EFI oltre alla configurazione EFI funzionante di alreadz lì?
Jook,

Ha funzionato :) quindi, grazie! syslinux è abbastanza carino e mi ha portato a gPxe e plopkexec, che esaminerò ulteriormente un'altra volta. Per tutti gli altri ricercatori: askubuntu.com/q/516730/319747
Jook,

2

Sì, questo è possibile.

L'idea di base è quella di partizionare GPT la chiavetta USB in questo modo:

  1. Partizione di avvio del BIOS (tipo GPT 1686148-6449-6E6F-744E-656564454649) - 1 MiB, nessun filesystem
  2. Partizione di sistema EFI (tipo GPT C12A7328-F81F-11D2-BA4B-00A0C93EC93B) - 200 MiB, filesystem VFAT
  3. Partizione di avvio Linux (tipo GPT 0FC63DAF-8483-4772-8E79-3D69D8477DE4) - 1 GiB, filesystem ext4
  4. File system root / home Linux (tipo GPT 0FC63DAF-8483-4772-8E79-3D69D8477DE4) - spazio rimanente, file system XFS o Btrfs

Questo partizionamento ci consente di avviare i sistemi legacy perché con GPT c'è ancora spazio per un MBR (per motivi di compatibilità con le versioni precedenti) e Grub2 ha abbastanza spazio per installare un livello intermedio nella partizione di avvio del BIOS. I BIOS legacy non si preoccupano dello schema di partizionamento e il kernel Grub2 / Linux non ha problemi a comprendere GPT sui sistemi legacy.

Sui sistemi UEFI , il firmware UEFI ignora l'MBR e utilizza la partizione di sistema EFI come punto di ingresso.

Ad esempio, con Fedora, in pratica devi fare quanto segue:

Assicurarsi che il filesystem di avvio Linux sia montato sotto /boote che il filesystem di partizione di sistema EFI sia montato sotto /boot/efi.

(Ri) Installa sia i boot loader legacy che quelli UEFI:

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

(Ri-) Genera i file di configurazione di grub sia per il legacy che per l'avvio UEFI:

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

A seconda che il sistema sia avviato in modalità legacy o UEFI, è necessario correggere il primo o il secondo file e sostituirlo (linux|initrd)16con (linux|initrd)efio viceversa.

Installa grub nell'MBR:

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

Ecco.


PS: ho scritto a script di provisioning che implementa questo approccio ibrido e quindi può essere utilizzato per creare automaticamente una tale chiavetta USB.
maxschlepzig
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.