Por que o kernel não herda as informações do sistema de arquivos do GRUB?

2

Eu li que o GRUB entende o sistema de arquivos e pode acessar o kernel olhando / boot, então ele carrega o kernel que por sua vez carrega alguns drivers para montar o sistema de arquivos com o auxílio do initrd.

Então, minha pergunta é: por que o kernel precisa montar o sistema de arquivos, enquanto o GRUB sabe por que ele não herda diretamente do GRUB ou algo assim? Talvez a questão seja realmente sobre o conceito de montar o que realmente significa, é algum mapeamento entre a hierarquia de arquivos e os endereços de disco?

    
por OMar Mohamed 13.08.2017 / 11:00

2 respostas

0

Tanto o gerenciador de inicialização (Grub) quanto o sistema operacional (Linux) têm um driver para o sistema de arquivos, ou seja, uma parte de código que entende comandos como “ler dados de um arquivo”. O sistema operacional não pode usar o driver do bootloader porque, uma vez que o gerenciador de inicialização tenha carregado o sistema operacional na memória, o bootloader é apagado da memória. (E também porque o driver do bootloader é tipicamente menos capaz do que o sistema operacional - por exemplo, os drivers do sistema de arquivos do Grub só podem ler, não escrever).

Montando um sistema de arquivos em um caminho /some/where significa que acessos a arquivos sob /some/where são roteados para esse sistema de arquivos. Quando o kernel executa um comando em um nome de arquivo (abrir, excluir, renomear etc.), ele analisa o caminho para o arquivo, determina em qual sistema de arquivos o arquivo está baseado na lista de sistemas de arquivos atualmente montados e despacha o pedido para o driver apropriado. A montagem é interna ao sistema operacional, não afeta o hardware de forma alguma, portanto, não há como o estado de montagem ser transferido do carregador de inicialização para o sistema operacional.

    
por 14.08.2017 / 02:19
1

A tarefa do GRUB é carregar o kernel (e initrd), passar alguns argumentos para o kernel e iniciá-lo. Para poder fazer isso, ele sabe sobre partições de disco e pode ler sistemas de arquivos. Montar um sistema de arquivos envolve o preenchimento de estruturas de dados no kernel, para permitir que o kernel acompanhe a estrutura da hierarquia de arquivos. O GRUB não faz parte do kernel e realmente não sabe nada sobre essa hierarquia. É dito para procurar coisas em um sistema de arquivos em uma determinada partição, mas ele não sabe que vai ser chamado de /boot ou onde será montado pelo kernel. (Ok, pode passar parâmetros para o kernel dizendo isso, mas isso não é realmente "sabendo").

A tarefa do GRUB é "fazer uma coisa e fazer bem". O GRUB também não é o único gerenciador de inicialização capaz de iniciar o kernel do Linux, e nem está disponível na maioria das arquiteturas, então o kernel não pode depender dele.

    
por 13.08.2017 / 12:11