Ir para o conteúdo

Marco Aurelio Padilha Cassilha

Voltar para as versões
Todas as versões Ir para a versão mais nova

Como carregar o boot do FreeBSD no Grub2

Versão 2 - Marco Aurelio Padilha Cassilha em 31 de Julho de 2015, 4:54

Essa não é a versão mais nova desse conteúdo.

Licenciado sob CC (by)

Como bootar o FreeBSD com Linux, usando GRUB2, mas antes é preciso ter uma noção de configuração do GRUB, para entender seu funcionamento.

*A primeira coisa que chama a atenção é sua forma de trabalhar com os discos rígidos do computador. Ao invés de referenciar esses dispositivos como /dev/hda1, /dev/hda2, etc, ele o faz através dos termos (hd0,0), (hd0,1) e assim por diante. Observe a tabela abaixo para um melhor entendimento:

Padrão GRUB
/dev/hda1 (hd0,0)
/dev/hda2 (hd0,1)
/dev/hdb1 (hd1,0)
/dev/hdb2 (hd1,1)

O GRUB chama o HD principal do computador de hd0 (enquanto o Linux o chama de hda). Um disco secundário recebe o nome de hd1 (o Linux o chama de hdb) e assim segue. Para trabalhar com as partições do HD, o GRUB as referencia através de um número inserido após uma vírgula. Assim, a primeira partição recebe o número 0 (zero) - hd0,0 -, à segunda partição é atribuído o número 1 - hd0,1 - e assim por diante. É importante frisar que, nesse caso, o GRUB não faz distinção entre discos IDE e SCSI.

Repare que neste arquivo 40_custom a lista de sistemas operacionais é mostrada depois da quarta linha de configuração. O primeiro sistema da lista é o FreeBSD:

menuentry "FreeBSD" {
set root=(hd0,1)
chainloader +1
}

A primeira linha acima mostra o título que o sistema recebe no GRUB. É esse nome que será exibido quando o GRUB mostrar a lista de sistemas operacionais que o usuário pode escolher. Pode-se usar qualquer frase depois de title. Obviamente, informe algo relacionado ao sistema operacional em questão.

A segunda linha - set root (hd0,1) - informa ao GRUB onde o sistema operacional está instalado. No exemplo, ele se encontra na segunda partição do HD. A palavra root tem a função de indicar que aquela é a partição principal do sistema (ou a partição-raiz) e que, portanto, deverá ser montada.

A terceira, como o FreeBSD trabalha de maneira diferente do Linux, a opção de carregar o kernel também não se aplica ao sistemas BSDs. No lugar desse parâmetro, geralmente é usado chainloader +1, que "chama" o carregador de boot do BSD, deixando a esse a tarefa de iniciar o sistema. Note que em nosso exemplo, há um parâmetro na linha acima de chainloader +1.*
 

GPT

Ao usar uma tabela de partições GPT, descobri que isso funcionou:

  menuentry "FreeBSD" {
     insmod UFS2
     raiz set = (hd0, gpt3)
     kfreebsd / boot / loader
  }

Eu tive dificuldade em primeira descobrir qual partição para definir a raiz. Root deve prepare-se para a partição FreeBSD-ufs, não o FreeBSD-boot um. Se você substituir o set root linha com search --no-floppy --file /boot/loader , então ele deve dizer-lhe a partição. Aparentemente, essa linha é suposto deixá-lo descobrir a partição e bota direita por si só. No entanto, para mim, seria imprimir o nome da partição e, em seguida, falhar. (Ele falhou cedo o suficiente para que eu ainda estava em Grub, que é conveniente.) Se Então, usei a partição que pegou em um set root= linha, ele iniciou muito bem.

MBR

Quando eu usei uma tabela de partição MBR msdos, a entrada acima (bem, com raiz alterado para (hd0,msdos4) ) me pousar no "FreeBSD bootstrap loader". Ele me deixou em um prompt de comando com um número de comandos possíveis. Correr ls lá me informou que não poderia montar o sistema de arquivos.

Eventualmente, eu tentei a versão do chainloader essa pergunta Stackexchange, e funcionou. Para ser mais específico, eu usei:

  menuentry "FreeBSD" {
     raiz set = (hd0, msdos4a)
     chainloader + 1
  }