Como devo configurar o grub para inicializar o kernel do Linux a partir de um disco rígido USB?

15

Eu tenho um disco rígido de laptop em um gabinete externo que uso como um pendrive grande. Para uma reviravolta adicional, instalei o Linux nele, assim posso inicializar qualquer máquina com a minha distribuição de escolha (por exemplo, para recuperação de dados ou conserto de um sistema b0rked ou apenas usando um laptop emprestado sem destruir o Windows pré-instalado). O problema é que, dependendo da configuração do hardware, o disco rígido USB pode estar visível em caminhos diferentes. Para configuração do grub eu uso apenas (hda0,0) como é relativo ao dispositivo do qual o grub foi lançado. Eu tenho entradas UUID em /etc/fstab . Eu também especifico rootwait nos parâmetros do kernel para que ele aguarde o subsistema USB se estabilizar antes de tentar montar o dispositivo.

O que devo passar para o kernel como root= ? Inicialmente, inicialize a partir do pendrive uma vez, verifique as mensagens de depuração para ver qual /dev/sdX device foi atribuído à unidade USB pelo kernel, em seguida, reinicialize e edite a configuração do grub. Não consigo alterar nada no PC, além de ativar Boot from USB hard drive no BIOS e defini-lo para uma prioridade mais alta do que os discos rígidos internos.

Existem vários scripts de geração de initrd que incluem suporte para UUID no caminho do dispositivo raiz, infelizmente o nativo do Gentoo (genkernel) não suporta rootwait e eu não tive sorte em usar outros.

O processo de inicialização é assim ( é bastante similar no Windows ):

  1. O BIOS escolhe o dispositivo de inicialização e carrega qualquer que seja seu MBR (que é o grub stage-1).
  2. O Grub carrega seus arquivos de configuração e de estágio 2 do dispositivo que configurou como root , usando (hd0) para o dispositivo do qual foi carregado pela BIOS.
  3. O Grub carrega e inicia um kernel (ainda a mesma numeração, então eu posso usar (hd0,0) novamente).
  4. O Kernel inicializa todos os dispositivos integrados ( rootwait é mágico agora).
  5. O
  6. Kernel monta a partição que foi passada como root (este é um parâmetro do kernel, não o parâmetro grub).
  7. init.d inicia o processo de inicialização do usuário, incluindo a montagem de coisas de /etc/fstab .

A parte 5 é a que me causa problemas.

    
por skolima 27.08.2008 / 16:42

3 respostas

5

Acho que a resposta deveria ser usar root = LABEL = ... ou root = UUID = ...

Mas você indica que isso não funciona para você. Eu sugiro investigar se houver algum problema com as ações do seu initrd.

    
por 30.09.2008 / 22:15
1

Eu poderia estar enganado ou possivelmente apenas tê-lo entendido errado, mas a escolha do dispositivo de inicialização não é algo que seria configurado a partir do BIOS da máquina que você está inicializando?

Eu acho que seria uma questão de escolher o drive USB, que teria o GRUB instalado como seu bootloader, e então escolher qual distro você quer inicializar a partir do menu do GRUB.

    
por 27.08.2008 / 16:57
1

Você pode usar:

set root='(hd0,msdos5)'
    
por 29.05.2013 / 10:39