Eu tropecei recentemente no ntldr
módulo GRUB .
Aparentemente, uma das coisas para as quais ele pode ser usado é uma alternativa chainloader
para inicializar as versões NT> = 6.0 do Windows, como no exemplo abaixo. (Muito útil se o registro de inicialização por volume de uma partição do Windows estiver corrompido.)
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
}
Onde posso aprender mais sobre como essa diretiva de inicialização pode ser usada? Eu não o vi listado quando procurei na versão HTML do manual GNU GRUB .
Respondendo à resposta de ckhan
Muito obrigado! Eu tinha decidido que precisaria tentar pesquisar o código-fonte para aprender mais sobre o ntldr
comando / módulo do GRUB . Mas você fez um trabalho muito melhor do que eu faria.
Nunca me ocorreu olhar os arquivos de e-mail para ver quais discussões de design a pessoa que escreveu o código poderia ter tido. Esse método parece que pode ser muito útil no futuro. Obrigado por mencionar.
Minha opinião sobre o ntldr
suporte ao GRUB
- Embora não tenha muita certeza do quanto a distinção significa,
ntldr
é um módulo, não um comando. Ou talvez um comando carregado dinamicamente, se desejar.
Seguindo o link do código-fonte e olhando as linhas 152 (GRUB_MOD_INIT
) e 159 (GRUB_MOD_FINI
), você pode ver o código para carregar e ... suponho ... descarregar o módulo.
Aparentemente, o GRUB implementa muitas funções que você pode pensar serem " comandos " como módulos. A única diferença de uso que eu tenho conhecimento é que, antes de usar um módulo, é necessário garantir que ele tenha sido carregado com o comandoinsmod ntldr
.
Além: Sempre me perguntei por que o GRUB não suportareboot
. Acontece que o comando existe, mas é um módulo. Sereboot
retornarunknown command
, entãoinsmod reboot
permite ao GRUB "lembrar" oreboot
comando.
Além: Quando e por que o GRUB pode " descarregar " um módulo, ainda não tenho idéia. Talvez seja o resultado de algo semelhante à " coleta de lixo "? Percebi que, uma vez carregados, os módulos parecem persistir, mesmo depois que um sistema é desligado e reiniciado. Obviamente, você não pode depender disso, mas parece que é assim que geralmente funciona na prática. - É interessante que eles baseados
ntldr
emchainloader
. Eu não olhei para ochainloader.c
código. Eu acho que provavelmente também faz uma realocação de carga no modo real de 16 bits da Intel ?
Eu estou bastante feliz que eles não implementountldr
como uma opção dechainloader
. Eu concordo com o Vladimir. Quaisquer que sejam as semelhanças ocultas, a sintaxe de uso é muito diferente. A abordagem atual é menos exigente. - Também é interessante ver a aparente falta de entusiasmo em adicionar este comando ao GRUB. Aparentemente, os desenvolvedores do GRUB acharam que o dano ao Registro de Inicialização da Partição do Windows (PBR) era extremamente improvável. No entanto, posso esboçar como fazê-lo durante uma instalação comum o suficiente.
Comece assumindo que um usuário tenha o Windows instalado em seu sistema. Eles agora instalam o Ubuntu (12.04 LTS) " ao lado " do Windows. Em um ponto durante a instalação do Ubuntu, eles aparentemente podem decidir onde desejam instalar o GRUB. Por razões que não consigo adivinhar, algumas delas decidem instalar o GRUB na partição em que o Windows está instalado.
A instalação é concluída e eles podem iniciar com êxito o Ubuntu. No entanto, quando eles tentam iniciar o Windows selecionando a entrada no menu GRUB, o Windows não inicia. Em vez de tentar iniciar o Windows com o GRUB, apenas exibe novamente o menu do GRUB?
Por quê? Bem, aparentemente quando eles decidiram instalar o GRUB na partição do Windows, parte do que realmente aconteceu foi que o PBR para a partição do Windows foi sobrescrito pelo PBR do GRUB. Portantochainloader +1
, não carrega em cadeia um carregador de inicialização do Windows, mas recarrega o GRUB.
Na IMO, a maneira rápida mais segura de permitir que um usuário inicialize o Windows nessa situação é usar o novo do GRUBntldr
. Gostaria de saber se isso seria do interesse dos desenvolvedores. Espero que eles não tenham antecipado esse cenário.
Gostaria de saber quais gerenciadores de inicialização, exceto os do Windows, ntldr
e bootmgr
o ntldr
comando GRUB pode ser capaz de carregar?