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?
Respostas:
Pesquisando o recurso não documentado
Você está certo: o
ntldr
comando (é comando, não módulo) não está documentado. Portanto, é uma ótima desculpa para algumas aventuras na arqueologia de código .Sempre que encontro um recurso não documentado, a primeira coisa a fazer é verificar as fontes.
A fonte no Savannah git repo mostra que foi incorporada pela linha principal em agosto de 2010.
O ramo fonte parece não existir mais, mas você ainda pode vê-lo existir no início daquele ano , em abril de 2010. O comentário do check-in, de "Vladimir 'phcoder' Serbinenko", foi
É baseado muito de perto no
chainloader
comando, tanto que o nome do arquivo no comentário do cabeçalho ainda não foi atualizado.Agora que temos um check-in exato e um nome, podemos verificar os arquivos de correspondência. Você pode ver onde os desenvolvedores discutiram sobre a adição desse recurso um ano antes na lista de discussão do grub-devel :
Alguns trechos relevantes desse segmento:
Respondendo sua pergunta
Depois de analisar tudo isso, o que sabemos sobre como ele pode ser usado?
É baseado no carregador de corrente.
É preciso um único argumento: o arquivo a ser aberto.
Evita o registro de inicialização da partição: para evitar a corrupção lá. Veja este post detalhando como eles testaram isso.
É apenas cerca de 160 linhas de código , você pode ver que não há muito mais lá.
Espero que isso tenha sido útil!
fonte