Ich bin kürzlich über das GRUB- ntldr
Modul gestolpert .
Anscheinend kann es als Alternative zum chainloader
Booten der NT> = 6.0-Versionen von Windows wie im folgenden Beispiel verwendet werden. (Sehr praktisch, wenn der Volume Boot Record für eine Windows-Partition beschädigt ist.)
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
}
Wo kann ich mehr darüber erfahren, wie diese Boot-Direktive verwendet werden kann? Ich sah es nicht aufgelistet, als ich in der HTML-Version des GNU GRUB-Handbuchs nachgesehen habe .
Antwort auf die Antwort von ckhan
Vielen Dank! Ich hatte so ziemlich beschlossen, dass ich versuchen müsste, den Quellcode zu durchsuchen, um mehr über den GRUB- ntldr
Befehl / das GRUB- Modul zu erfahren . Aber Sie haben einen viel besseren Job gemacht als ich.
Es wäre mir nie in den Sinn gekommen, in den E-Mail-Archiven nachzuschauen, welche Designdiskussionen die Person, die den Code geschrieben hat, möglicherweise geführt hat. Diese Methode scheint in Zukunft sehr hilfreich zu sein. Danke, dass du es erwähnt hast.
Meine Gedanken zur GRUB- ntldr
Unterstützung
-
Ich bin mir zwar nicht sicher, wie viel die Unterscheidung bedeutet,
ntldr
ist aber ein Modul, kein Befehl. Oder vielleicht ein dynamisch geladener Befehl, wenn Sie möchten.
Wenn Sie Ihrem Quellcode-Link folgen und die Zeilen 152 (GRUB_MOD_INIT
) und 159 (GRUB_MOD_FINI
) betrachten, können Sie den zu ladenden Code sehen und ... Ich vermute ... das Modul entladen.
GRUB implementiert anscheinend viele Funktionen, die Sie für " Befehle " halten, als Module. Der einzige mir bekannte Unterschied in der Verwendung besteht darin, dass vor der Verwendung eines Moduls sichergestellt werden muss, dass es mit dem Befehl geladen wurdeinsmod ntldr
.
Nebenbei: Ich habe mich immer gefragt, warum GRUB nicht unterstütztreboot
. Es stellt sich heraus, dass der Befehl existiert, aber es ist ein Modul. Wennreboot
zurückkommtunknown command
, danninsmod reboot
Ermöglicht GRUB, sich denreboot
Befehl zu "merken" .
Nebenbei: Wann und warum GRUB ein Modul " entladen " könnte, weiß ich noch nicht. Vielleicht ist es das Ergebnis von etwas ähnlichem wie " Müllabfuhr "? Ich habe festgestellt, dass die Module nach dem Laden scheinbar bestehen bleiben, auch nachdem ein System heruntergefahren und neu gestartet wurde. Natürlich können Sie nicht hängen auf das, aber das zu sein scheint , wie es funktioniert in der Praxis häufig. -
Es ist interessant , dass sie basierend
ntldr
aufchainloader
. Ich habe denchainloader.c
Code nicht angeschaut . Ich vermute, es macht wahrscheinlich auch eine Verlagerung der Last im Intel 16-Bit Real- Modus?
Ich bin eher froh, dass sie nichtntldr
als Option implementiert wurdenchainloader
. Ich stimme Vladimir zu. Unabhängig von den Ähnlichkeiten unter den Deckungen ist die Verwendungssyntax sehr unterschiedlich. Der derzeitige Ansatz ist weniger klug. - Es ist auch interessant zu sehen, dass GRUB anscheinend nicht begeistert ist, diesen Befehl hinzuzufügen. Anscheinend hielten die GRUB-Entwickler eine Beschädigung des Windows Partition Boot Record (PBR) für äußerst unwahrscheinlich. Ich kann jedoch skizzieren, wie dies bei einer normalen Installation zu tun ist.
Beginnen Sie damit, dass ein Benutzer Windows auf seinem System installiert hat. Sie installieren nun Ubuntu (12.04 LTS) " neben " Windows. An einem Punkt während der Ubuntu-Installation können sie offenbar entscheiden, wo GRUB installiert werden soll. Aus Gründen, die ich nicht erraten kann, entscheiden sich einige von ihnen, GRUB auf der Partition zu installieren, auf der Windows installiert ist.
Die Installation ist abgeschlossen und sie können Ubuntu erfolgreich starten. Wenn sie jedoch versuchen, Windows durch Auswahl des Eintrags im GRUB-Menü zu starten, wird Windows nicht gestartet. Wenn Sie stattdessen versuchen, Windows mit GRUB zu starten, wird das GRUB-Menü erneut angezeigt?
Warum? Nun, anscheinend, als sie sich entschieden, GRUB in die Windows-Partition zu installieren, war ein Teil dessen, was tatsächlich passierte, die PBR für die Windows-Partition, die mit der PBR von GRUB überschrieben wurde. Lädtchainloader +1
also keinen Windows-Bootloader in einer Kette, sondern lädt stattdessen GRUB neu.
IMO, der sicherste schnelle Weg , um einen Benutzer zu starten Sie Windows in dieser Situation zu ermöglichen , ist den GRUBs neu zu verwendenntldr
. Ich frage mich, ob dies für die Entwickler von Interesse wäre. Ich gehe davon aus, dass sie dieses Szenario nicht antizipiert haben.
Ich frage mich, welche anderen Bootloader als die Windows-Bootloader ntldr
und bootmgr
der GRUB- ntldr
Befehl möglicherweise geladen werden können.
Antworten:
Erforschung der undokumentierten Funktion
Sie haben Recht, der
ntldr
Befehl (es ist Befehl, nicht Modul) ist nicht dokumentiert. Es ist also eine gute Entschuldigung für einige Abenteuer in der Code-Archäologie .Wann immer ich ein undokumentiertes Feature finde, überprüfe ich zuerst die Quellen.
Aus der Quelle des Savannah Bazaar Repo geht hervor , dass es im August 2010 in die Hauptlinie eingegliedert wurde.
Wenn Sie zurück zum Quell-Zweig gehen, können Sie sehen, dass er Anfang des Jahres , im April 2010, entstanden ist. Der Check-in-Kommentar von "Vladimir 'phcoder' Serbinenko" lautete
Es basiert sehr stark auf dem
chainloader
Befehl, sodass der Dateiname im Kopfkommentar noch nicht aktualisiert wurde.Nachdem wir einen genauen Check-In und einen Namen haben, können wir die Mailing-Archive überprüfen. Sie können sehen, wo die Entwickler ein Jahr zuvor über das Hinzufügen dieser Funktion auf der Grub-Entwickler-Mailingliste diskutiert hatten :
Einige relevante Auszüge aus diesem Thread:
Beantwortung Ihrer Frage
Was wissen wir nach all dem Nachdenken darüber, wie es verwendet werden kann?
Es basiert auf Chainloader.
Es braucht ein einziges Argument: die zu öffnende Datei.
Der Partitionsstartdatensatz wird vermieden, sodass die Beschädigung dort umgangen werden kann. In diesem Beitrag erfahren Sie, wie sie das getestet haben.
Es sind nur etwa 160 Codezeilen , da ist nicht viel anderes zu sehen.
Hoffe das war nützlich!
quelle