Comment savoir si mon système a été démarré en tant que EFI / UEFI ou BIOS?

120

Comment déterminer si un système particulier en cours d'exécution a été démarré à l'aide de EFI / UEFI ou du BIOS?

Oméga
la source
Question interessante. Pas dupe exacte mais essayez la réponse ici , à une question similaire.
Tom Brossman
1
unix.stackexchange.com/questions/148356/…
Ciro Santilli a dévoilé le

Réponses:

133

Le moyen le plus simple est de vérifier si /sys/firmware/efiexiste. Il n'apparaît pas si vous avez démarré avec le BIOS traditionnel.

#!/bin/bash
[ -d /sys/firmware/efi ] && echo UEFI || echo BIOS
Colin Ian King
la source
Testé sur QEMU 2.0.0, OVFM et Ubuntu 14.04: github.com/cirosantilli/runlinux/tree/…
Ciro Santilli a écrit:
Fonctionne sur Ubuntu 16.04, et Fedora 24
geek1011
16

Obsolète

La réponse ci-dessous est une méthode qui peut ne pas toujours fonctionner.
Utilisez plutôt la réponse de Colin basée sur /sys/firmware/efi.


Il est très facile de savoir si un système a été démarré dans EFI (ou non, auquel cas il doit s'agir du BIOS):

Juste utiliser dmesg | grep "EFI v"

  • Cela retournera une ligne comme celle-ci, si le système a été démarré depuis EFI:

    [0.000000] EFI v2.00 par American Megatrends
  • Ou ne retourne rien si ce n'était pas le cas, auquel cas il a été démarré à partir du BIOS

Exemple d'utilisation du script bash basé sur le code de sortie de grep :

...
dmesg | grep -q "EFI v" # -q dire à grep de ne rien afficher
si [$? -eq 0] # vérifier le code de sortie; si 0 EFI, sinon BIOS
ensuite
    echo "Vous utilisez le démarrage EFI."
  autre
    echo "Vous utilisez le démarrage du BIOS"
Fi
...

Source: pour savoir si un système EFI utilise une émulation BIOS héritée ou non, ainsi que pour plus d’informations sur les tests de compatibilité EFI et EFI, ainsi que les chaînes d’un certain nombre de fournisseurs / versions d’EFI, veuillez consulter cette page à partir de le Sommet des développeurs Ubuntu pour Precise .

ish
la source
2
Je simplifierais cela à if dmesg | grep -Fq "EFI v"; then .... Inutile d'exécuter la [commande en plus, juste pour tester le succès / l'échec. $?est principalement utile pour vérifier des erreurs spécifiques.
geirha
3
Ceci est fragile, car rien ne garantit que la chaîne recherchée est générée par la fonctionnalité souhaitée.
Thorbjørn Ravn Andersen
1
@izx, n'importe quel script peut arriver à écrire "EFI v" dans le cadre de quelque chose d'autre. Si cela se produit sur une machine BIOS, il s'agirait d'un faux positif.
Thorbjørn Ravn Andersen
2
Mieux vaut ne pas grep pour le texte dans le journal du noyau, il est sujet à changement. Le mieux est de regarder / sys / firmware / efi
Colin Ian King
1
J'aimerais toutefois mentionner que c'est un excellent moyen d'obtenir la version EFI!
Omega
0

Code Python pour vérifier si le système est démarré avec le BIOS UEFI ou ROM:

import os, sys
def main ():
    if (os.path.exists ("/ sys / firmware / efi")):
        print "\ n \ n Le système est démarré avec uefi!"
    autre:
        print "\ n \ n Le système est démarré avec un bios ROM"
principale()
sys.exit (0)
Shruti B
la source