Recientemente me topé con el ntldr
módulo GRUB .
Aparentemente, una de las cosas para las que se puede usar es como una alternativa chainloader
para arrancar las versiones NT> = 6.0 de Windows como en el ejemplo a continuación. (Muy útil si el registro de inicio de volumen para una partición de Windows está, uh, dañado).
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
}
¿Dónde puedo obtener más información sobre cómo se puede usar esta directiva de arranque? No lo vi en la lista cuando busqué en la versión HTML del manual de GNU GRUB .
En respuesta a la respuesta de ckhan
¡Muchas gracias! Casi había decidido que tendría que intentar buscar en el código fuente para obtener más información sobre el ntldr
comando / módulo GRUB . Pero has hecho un trabajo mucho mejor de lo que yo hubiera hecho.
Nunca se me habría ocurrido mirar los archivos de correo electrónico para ver qué discusiones de diseño podría haber tenido la persona que escribió el código. Parece que ese método podría ser muy útil en el futuro. Gracias por mencionarlo.
Mis pensamientos sobre el ntldr
soporte GRUB
- Si bien no estoy realmente seguro de cuánto significa la distinción,
ntldr
es un módulo, no un comando. O tal vez un comando cargado dinámicamente si lo desea.
Siguiendo el enlace del código fuente y mirando las líneas 152 (GRUB_MOD_INIT
) y 159 (GRUB_MOD_FINI
), puede ver el código para cargar y ... supongo ... descargar el módulo.
GRUB aparentemente implementa muchas funciones que podría pensar que son " comandos " como módulos. La única diferencia en el uso que conozco es que antes de usar un módulo, uno debe asegurarse de que se haya cargado con el comando y le permite a GRUB "recordar" el comando. Aparte: cuándo y por qué GRUB podría " descargarinsmod ntldr
.
Aparte: siempre me pregunté por qué GRUB no es compatiblereboot
. Resulta que el comando existe, pero es un módulo. Sireboot
vuelveunknown command
, entoncesinsmod reboot
reboot
"un módulo, aún no tengo idea. Quizás sea el resultado de algo similar a" recolección de basura "? Me di cuenta de que una vez cargados, los módulos parecen persistir, incluso después de que un sistema se apaga y se reinicia. Por supuesto, no puede depender de eso, pero parece que así es como a menudo funciona en la práctica. - Es interesante que se basaron
ntldr
enchainloader
. No he mirado elchainloader.c
código. Supongo que probablemente también hace una carga de reubicación en el modo real de Intel de 16 bits .
Yo soy más bien contento de que no implementanntldr
como una opción dechainloader
. Estoy de acuerdo con Vladimir. Cualesquiera que sean las similitudes en las cubiertas, la sintaxis de uso es muy diferente. El enfoque actual es menos torpe. - También es interesante ver la aparente falta de entusiasmo por agregar este comando a GRUB. Aparentemente, los desarrolladores de GRUB pensaron que el daño al Registro de arranque de partición de Windows (PBR) era extremadamente improbable. Sin embargo, puedo esbozar cómo hacerlo durante una instalación bastante normal. La instalación se completa y pueden iniciar con éxito Ubuntu. Sin embargo, cuando intentan iniciar Windows seleccionando la entrada en el menú de GRUB, Windows no se inicia. En lugar de intentar iniciar Windows con GRUB, ¿simplemente vuelve a mostrar el menú de GRUB? ¿Por qué? Bueno, aparentemente cuando eligieron instalar GRUB en la partición de Windows, parte de lo que realmente sucedió fue que el PBR para la partición de Windows se sobrescribió con el PBR de GRUB. Entonces
Comience asumiendo que un usuario tiene Windows instalado en su sistema. Ahora instalan Ubuntu (12.04 LTS) " junto " a Windows. En un momento durante la instalación de Ubuntu, aparentemente pueden decidir dónde quieren que se instale GRUB. Por razones que no puedo comenzar a adivinar, algunos de ellos deciden instalar GRUB en la partición en la que está instalado Windows.
chainloader +1
no carga en cadena un gestor de arranque de Windows, sino que vuelve a cargar GRUB.
OMI, el más seguro rápida de permitir que un usuario inicie Windows en esa situación es usar el nuevo GRUBntldr
. Me pregunto si esto sería de interés para los desarrolladores. Espero que no hayan anticipado este escenario.
Me pregunto qué cargadores de arranque además de los de Windows ntldr
y bootmgr
GRUBntldr
podría cargar comando ?
Respuestas:
Investigando la característica no documentada
Tienes razón, el
ntldr
comando (es un comando, no un módulo) no está documentado. Es una gran excusa para algunas aventuras en arqueología de códigos. .Cada vez que encuentro una característica no documentada, lo primero que debe hacer es verificar las fuentes.
La fuente en el repositorio git de Savannah muestra que se fusionó con la línea principal en agosto de 2010.
La rama fuente ya no parece, pero aún se puede ver que se creó a principios de ese año , en abril de 2010. El comentario de registro, de "Vladimir 'phcoder' Serbinenko" fue
Se basa muy estrechamente en el
chainloader
comando, tanto que el nombre del archivo en el comentario del encabezado aún no se ha actualizado.Ahora que tenemos un registro exacto y un nombre, podemos verificar los archivos de correo. Puede ver dónde discutieron los desarrolladores sobre agregar esta característica un año antes en la lista de correo de grub-devel :
Algunos extractos relevantes de ese hilo:
Respondiendo tu pregunta
Después de analizar todo eso, ¿qué sabemos sobre cómo se puede usar?
Se basa en el cargador de cadenas.
Se necesita un solo argumento: el archivo para abrir.
Evita el registro de arranque de la partición: por lo que puede evitar la corrupción allí. Vea esta publicación que detalla cómo probaron eso.
Son solo 160 líneas de código , puedes ver que no hay mucho más allí.
¡Espero que esto haya sido útil!
fuente