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.
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 ):
root
, usando (hd0)
para o dispositivo do qual foi carregado pela BIOS. (hd0,0)
novamente). rootwait
é mágico agora). root
(este é um parâmetro do kernel, não o parâmetro grub). 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.
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.
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.
Você pode usar:
set root='(hd0,msdos5)'