Je suis récemment tombé sur le ntldr
module GRUB .
Apparemment, l'une des choses pour lesquelles il peut être utilisé est une alternative chainloader
au démarrage des versions NT> = 6.0 de Windows, comme dans l'exemple ci-dessous. (Très pratique si l'enregistrement de démarrage de volume pour une partition Windows est, euh, corrompu.)
menuentry "Windows 7 (bootmgr on /dev/sda1)" --class windows --class os {
insmod part_msdos
insmod ntfs
insmod ntldr
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set=root 1EA0019AA0017A13
ntldr ($root)/bootmgr
}
Où puis-je en savoir plus sur l'utilisation de cette directive de démarrage? Je ne l'ai pas vu répertorié lorsque j'ai regardé dans la version HTML du manuel GNU GRUB .
En réponse à la réponse de ckhan
Merci beaucoup! J'avais à peu près décidé que je devrais essayer de fouiller dans le code source pour en savoir plus sur la ntldr
commande / module GRUB . Mais vous avez fait un bien meilleur travail que moi.
Il ne m'était jamais venu à l'esprit de consulter les archives des e-mails pour voir quelles discussions de conception la personne qui avait écrit le code aurait pu avoir. Cette méthode semble pouvoir être très utile à l'avenir. Merci de l'avoir mentionné.
Mes réflexions sur le ntldr
support GRUB
- Bien que je ne sois pas vraiment sûr de la signification de la distinction,
ntldr
c'est un module, pas une commande. Ou peut-être une commande chargée dynamiquement si vous le souhaitez.
En suivant votre lien de code source et en regardant les lignes 152 (GRUB_MOD_INIT
) et 159 (GRUB_MOD_FINI
), vous pouvez voir le code à charger et ... je suppose ... décharger le module.
GRUB implémente apparemment de nombreuses fonctions que vous pourriez penser être des " commandes " en tant que modules. La seule différence d'utilisation à ma connaissance est qu'avant d'utiliser un module, il faut s'assurer qu'il a été chargé avec la commandeinsmod ntldr
.
En plus: je me suis toujours demandé pourquoi GRUB ne supporte pasreboot
. Il s'avère que la commande existe, mais c'est un module. Sireboot
revientunknown command
, alorsinsmod reboot
permet à GRUB de "mémoriser" lareboot
commande.
En plus: Quand et pourquoi GRUB pourrait " décharger " un module, je n'en ai pas encore la moindre idée. C'est peut-être le résultat de quelque chose de similaire à la " collecte des ordures " ?? J'ai remarqué qu'une fois chargés, les modules semblent persister, même après la mise hors tension et le redémarrage d'un système. Bien sûr, vous ne pouvez pas dépendre de cela, mais cela semble être la façon dont cela fonctionne souvent dans la pratique. - Il est intéressant qu'ils se soient basés
ntldr
surchainloader
. Je n'ai pas regardé lechainloader.c
code. Je suppose qu'il fait probablement aussi une relocalisation de la charge en mode réel Intel 16 bits ?
Je suis plutôt content qu'ils n'aient pas misntldr
en œuvre en optionchainloader
. Je suis d'accord avec Vladimir. Quelles que soient les similitudes sous les couvertures, la syntaxe d'utilisation est très différente. L'approche actuelle est moins délicate. - Il est également intéressant de voir le manque apparent d'enthousiasme pour l'ajout de cette commande à GRUB. Apparemment, les développeurs de GRUB pensaient que des dommages au PBR ( Windows Partition Boot Record) étaient extrêmement improbables. Cependant, je peux esquisser comment le faire lors d'une installation assez ordinaire.
Commencez par supposer qu'un utilisateur a installé Windows sur son système. Ils installent désormais Ubuntu (12.04 LTS) " aux côtés " de Windows. À un moment donné lors de l'installation d'Ubuntu, ils peuvent apparemment décider où ils souhaitent installer GRUB. Pour des raisons que je ne peux pas deviner, certains d'entre eux décident d'installer GRUB dans la partition dans laquelle Windows est installé.
L'installation est terminée et ils peuvent démarrer Ubuntu avec succès. Toutefois, lorsqu'ils essaient de démarrer Windows en sélectionnant l'entrée dans le menu GRUB, Windows ne démarre pas . Au lieu de cela, essayer de démarrer Windows avec GRUB ré-affiche simplement le menu GRUB?
Pourquoi? Eh bien, apparemment, quand ils ont choisi d'installer GRUB dans la partition Windows, ce qui s'est réellement passé, c'est que le PBR pour la partition Windows a été remplacé par le PBR de GRUB. Donc,chainloader +1
ne charge pas en chaîne un chargeur de démarrage Windows, mais recharge à la place GRUB.
IMO, le moyen rapide le plus sûr pour permettre à un utilisateur de démarrer Windows dans cette situation est d'utiliser le nouveau GRUBntldr
. Je me demande si cela pourrait intéresser les développeurs. J'espère qu'ils n'ont pas anticipé ce scénario.
Je me demande quels chargeurs de démarrage autres que ceux de Windows ntldr
et bootmgr
la ntldr
commande GRUB pourrait être capable de charger?
Réponses:
Recherche de la fonctionnalité non documentée
Vous avez raison, la
ntldr
commande (c'est la commande, pas le module) n'est pas documentée. C'est donc une excellente excuse pour certaines aventures en archéologie du code .Chaque fois que je trouve une fonctionnalité non documentée, la première chose à faire est de vérifier les sources.
La source du dépôt git Savannah montre qu'il a été fusionné dans la ligne principale en août 2010.
La branche source ne semble plus, mais vous pouvez toujours voir qu'elle a vu le jour plus tôt cette année , en avril 2010. Le commentaire d'enregistrement, de "Vladimir 'phcoder' Serbinenko" était
Il est basé très étroitement sur la
chainloader
commande, à tel point que le nom de fichier dans le commentaire d'en-tête n'a toujours pas été mis à jour.Maintenant que nous avons un enregistrement exact et un nom, nous pouvons vérifier les archives de mailing. Vous pouvez voir où les développeurs ont discuté de l'ajout de cette fonctionnalité un an plus tôt sur la liste de diffusion grub-devel :
Quelques extraits pertinents de ce fil:
Répondre à votre question
Après avoir réfléchi à tout cela, que savons-nous de la façon dont il peut être utilisé?
Il est basé sur un chargeur de chaîne.
Il faut un seul argument: le fichier à ouvrir.
Il évite l'enregistrement de démarrage de la partition: il peut donc contourner la corruption. Voir cet article détaillant comment ils ont testé cela.
C'est seulement environ 160 lignes de code , vous pouvez voir qu'il n'y a pas grand-chose d'autre.
J'espère que cela a été utile!
la source