Como o grub2 processa essas entradas?

2

Estou tentando fazer com que o grub2 inicialize a imagem xen de um pendrive USB. No entanto, não está funcionando por algum motivo.

Minha entrada original no grub foi a seguinte, e isso funciona fora de um HDD de partições LVM:

menuentry 'Xen 4 (Linux 2.6.32.50-xen)' --class ubuntu --class gnu-linux --class gnu --class os --class xen {
        recordfail
        insmod ext2
        set root='(hd0,1)'
        search --no-floppy --fs-uuid --set 6542fe50-82e2-467a-b832-7cf92f71bc98
        multiboot /xen.gz placeholder noreboot
        module  /vmlinuz-2.6.32.50-xen placeholder root=/dev/mapper/xenserver-root ro
        module  /initrd.img-2.6.32.50-xen
}

Mas, não fora do pen drive que é particionado como ext2 sem LVM.

Atualmente, é assim:

menuentry 'Xen 4 (Linux 2.6.32.50-xen)' --class ubuntu --class gnu-linux --class gnu --class os --class xen {
        recordfail
        insmod ext2
        set root='(hd0,1)'
        search --no-floppy --fs-uuid --set 55425e50-82e2-4c74-b860-7cf92f91b423
        multiboot /xen.gz placeholder noreboot
        module  /vmlinuz-2.6.32.50-xen placeholder root=/dev/sda1 ro
        module  /initrd.img-2.6.32.50-xen
}

A maneira que eu entendo isso é que set root = '(hd0,1)' define a variável de ambiente raiz como o primeiro disco rígido, primeira partição. Agora, o que a linha de pesquisa faz?

De acordo com a documentação do grub2 para o comando de busca e se eu estiver entendendo corretamente, se um disco com esse uuid for encontrado, ele irá setar o root para esse uuid ... ou é a primeira partição daquele disco? Então, se ele não encontrar, isso significa que o padrão é (hd0,1)?

Atualmente, isso não funciona para mim, pois eu preciso carregar um kernel de inicialização múltipla primeiro. Então é obviusly não encontrar xen.gz. Será que preciso remover o --no-floppy? Eu sei que alguns BIOS tratam pen drives USB como disquetes. Embora no meu sistema esteja chegando como / dev / hda. Se inserir um disco rígido, será / dev / hdb. Isso ainda vai funcionar? O que devo definir a raiz = linha para dado que o LVM não está instalado e / dev / mapper / xenserver-root não existe. Eu vi algumas pessoas configurando isso para / dev / hdb1, mas eu gostaria de descobrir isso automaticamente ou ser gerado pelo update-grub.

Como eu conseguiria isso funcionar? Eu tentei muitas opções, mas obviamente não a certa.

    
por Matt H 15.03.2012 / 02:20

1 resposta

0

Depois de muita experimentação, eu realmente consegui que funcionasse. E no processo, descobri o que a pesquisa faz e aprendi muito sobre o grub e a linha de comando do grub no processo. Não é tão difícil quanto parece.

O problema com minhas entradas é que eu precisei prefixar / boot / no nome do arquivo para ambos os arquivos multiboot & amp; entradas do módulo.

Eu também descobri que a pesquisa faz o que eu acho que faz. Ele procura o uuid do arquivo ou do sistema de arquivos (dependendo da opção) e define o root como a localização do disco & amp; número de partição.

Portanto, a linha inicial set root = '(hd0,1)' é um pouco redundante. Parece que será padronizado se a pesquisa falhar.

    
por Matt H 15.03.2012 / 19:19