efibootmgr
crée des entrées non valides dans le menu de démarrage EFI. Par exemple efibootmgr -c -d /dev/sdX -p Y -l /EFI/refind/refind_x64.efi -L "rEFInd Boot Manager"
Ajoute des caractères japonais inébranlables dans le menu de démarrage.
D'autre part bcfg boot add 3 fs0:\EFI\refind\refind_x64.efi "rEFInd"
fonctionne juste bien.
Maintenant, je voudrais démarrer directement sur vmlinuz-linux
Au lieu de passer à travers refind
. Quelqu'un a-t-il une idée sur la façon de passer des paramètres au noyau? Sans les paramattres, il est: bcfg boot add 3 fs0:\vmlinuz-linux "linux"
Mais quelle option dois-je utiliser pour ajouter initrd=\initramfs-linux.img root=/dev/sda2
?
Merci
J'ai eu des problèmes similaires sur une carte mère (Supermicro), et tandis que la suggestion de Steve d'utiliser un fichier texte fonctionne, il y a un peu plus de nuance. J'ai essayé de documenter le processus ci-dessous:
Si vous n'avez pas bcfg
disponible, vous devez d'abord obtenir une copie d'une coquille EFI 2.x. Le firmware de la carte mère a probablement 1.x. Le archi-wiki a plus de détails, mais pour la plupart Systèmes modernes 64 bits que vous voudrez attraper le Shell.efi
de ici et renommez-le shellx64.efi
et placez-le directement à la racine de votre partition système EFI. Si votre carte mère fournit un Launch EFI Shell from filesystem device
, utilise le. Sinon, vous pouvez utiliser la coquille intégrée pour lancer la coque mise à jour. Voir le wiki pour plus d'informations.
Une fois que vous êtes dans le shell 2.x, vous voudrez vous assurer que votre option de démarrage existe. Vous pouvez répertorier des options avec bcfg boot dump -b
(la -b
Permet le pager, comme more
). Si cela n'existe pas, vous devrez en ajouter un, de préférence au sommet de la liste. Vous pouvez parcourir les systèmes de fichiers avec map -b
, recherchez les entrées commençant par fs
comme fs0:
, puis utiliser ls
comme ls fs0:\
, ls fs0:\EFI\
, etc pour explorer les répertoires.
Une fois que vous avez trouvé le chemin de démarrage (et le périphérique correct fs
), ajoutez-le (comme dans la question initiale):
bcfg boot add 3 fs0:\EFI\refind\refind_x64.efi "rEFInd"
Cela l'ajoute comme la 4ème entrée de démarrage (comptage de 0, 1, 2, 3)
Une fois que vous avez ajouté l'option de démarrage (vérifiez avec bcfg boot dump -b
) Vous devez ajouter les données facultatives (paramètres de démarrage). Comme Steve mentionné brièvement, la manière la plus robuste de le faire consiste à enregistrer ces paramètres à un fichier, puis à les importer avec bcfg -opt
. Cependant, à partir de ce que je peux dire, cela ajoute les options, de sorte que vous êtes le meilleur de bcfg boot rm
ing l'option de démarrage en premier et la réduisant en la fois selon l'étape 2. Une fois que vous avez une entrée propre, vous pouvez ajouter les données facultatives. Par example:
edit fs0:\EFI\refind\options.txt
Cela ouvrira un éditeur de fichiers. Tapez vos options (sur une seule ligne) et appuyez sur F2 pour enregistrer. Appuyez sur F3 pour quitter. Vous pouvez également modifier ce fichier à partir d'un système d'exploitation, mais vous doit Sauvegardez-le comme UTF-16 (Le, Little-Endian). L'éditeur de Shell EFI le fait automatiquement.
La prochaine étape consiste à importer les options:
bcfg boot -opt 3 fs0:\EFI\refind\options.txt
Encore une fois, le 3
Spécifie l'entrée de démarrage. Cela devrait correspondre à celui que vous avez ajouté comme. N'exécutez pas cette commande plusieurs fois - vous devez rm
et re -add
L'entrée avant de pouvoir changer d'options.
Vérifiez les options de démarrage et les données facultatives avec bcfg boot dump -v -b
.
Ma documentation pour efibootmgr
montre que -p
est pour spécifier le numéro de partition, mais dans votre question, il semble que vous utilisiez Y
pour la valeur. Si ce n'était pas une faute de frappe, cela pourrait expliquer pourquoi vous obtenez des caractères étranges dans le menu et que vous avez eu du mal à démarrer.
Quant aux paramètres de passage, il y a un commutateur -@
qui a échappé à mon attention les premiers fois que j'ai lu les docs. Si vous fournissez un nom de fichier, il lit une ligne de paramètres à partir de ce fichier.
Les docs disent également que vous pouvez utiliser -
comme nom de fichier, mais quand j'ai essayé cela, je n'ai pas pu le faire passer après avoir saisi du texte; Appuyez sur enter
ou ^D
semblait n'avoir aucun effet, tandis que ^C
a terminé le programme sans modifier.
Si vous souhaitez expérimenter dans un VM avant de jouer avec votre matériel, vous pouvez être utile: bien que vous ayez besoin d'ajuster les chemins OVMF pour votre distribution:
/usr/share/edk2-ovmf/OVMF_VARS.fd
Pour le répertoire actuel - QEMU écrira des modifications de configuration EFI dans ce fichier.vvfat
). Je vais y réfléchir comme hda
à partir de maintenant.hda
.efibootmgr
, localisez ou construisez un inaitrd qui le fait et placez-le dans hda
. (Un initrd générique peut fonctionner, car ceux-ci vous permettent généralement de saisir un mode d'urgence s'ils ne trouvent pas le volume racine.)démarrer qemu; J'utilise la commande suivante:
qemu-system-x86_64 -drive if=pflash,format=raw,unit=0,readonly=on,file=/usr/share/edk2-ovmf/OVMF_CODE.fd -drive if=pflash,format=raw,unit=1,readonly=off,file=OVMF_VARS.fd -enable-kvm -cpu Host -m 1024 -usb -device usb-tablet -netdev user,id=mynet -device virtio-net-pci,netdev=mynet -hda fat:rw:hda -boot menu=on
hda
dir de l'extérieur du VM - voir l'avertissement ICI .-boot menu=on
partie. Si nécessaire, vous pouvez appuyer sur ESC
tandis que c'est le démarrage et vous entrerez dans la configuration UEFI. De là, vous pouvez démarrer des entrées particulières ou créer/supprimer/éditer.Vous allez tomber dans une coquille EFI s'il ne trouve pas de fichier à démarrer.
bcfg
pour afficher/modifier les entrées.Ou, vous pouvez démarrer votre noyau Linux:
fs0:
bzImage.efi initrd=\absolute\path\to\initrd arg arg arg
/sys/firmware/
, essayer efibootmgr
, etc ... tout sans risquer votre matériel réel. Profitez!Vous devriez l'utiliser comme ceci au lieu de /dev/sda
Vous devez également utiliser partuuid
ou uuid
comme celui-ci:
--disk /dev/sdX --part Y --create --label "Arch Linux" --loader /vmlinuz-linux --unicode 'root=PARTUUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX rw initrd=\initramfs-linux.img' --verbose