Script do GRUB 2: converta o nome do dispositivo na notação do GRUB em um nome de dispositivo do Linux

4

Estou tentando usar rótulos de partições (ou UUIDs, isso não importa) para selecionar a partição raiz sem o uso de um initrd / initramfs.

Com o initramfs, isso é bastante fácil: root=LABEL=... ou root=/dev/disk/by-label/... nos argumentos do kernel fazem o trabalho. No entanto, sem o initramfs, o acima não é possível: a notação LABEL= é decodificada pelo script initramfs, e /dev/disk/by-label/... symlinks são criados pelo udev em execução no initramfs. Apenas a notação root=/dev/sdXY é entendida pelo próprio kernel.

No entanto, o GRUB suporta scripting tipo shell, e eu acho que é de alguma forma possível escrever um scriptlet GRUB 2 que irá gerar root=/dev/sdXY string a partir de um rótulo de dispositivo ou UUID.

Especialmente, o comando search --label <label> --set ROOTDEV definirá a variável ROOTDEV com uma string como hd0,gpt5 , que aponta para a partição com o rótulo fornecido. Se bem entendi (por favor me corrija se eu estiver errado) a ordem dos dispositivos no GRUB e no kernel é a mesma, então hd0 é /dev/sda , hd1 is /dev/sdb e assim por diante.

Então, aqui está uma pergunta: existe uma maneira, de dentro do script do GRUB 2, de converter hd0,gpt5 em /dev/sda5 ? Exatamente a parte hd0 into sda - o resto é fácil com regexes.

    
por intelfx 11.01.2014 / 17:58

1 resposta

0

Quando o Grub2 está em um pendrive USB (o pendrive não tem o Linux instalado nele, então o grub.cfg mut é criado e editado manualmente), o literal da partição de dados muda, dependendo de quantos dispositivos internos e externos estão conectados. e se o hardware inicializar nos modos UEFI ou BIOS.

Em algumas linhas eu preciso ter um parâmetro na forma de / dev / sd $ #, não no estilo GRUB, ele deve apontar para tais dados de partição (o literal não é sempre o mesmo, depende muito do computador Eu inicializo com esse USB).

Com o comando de pesquisa do GRUB eu posso obter o literal, mas no estilo GRUB.

Eu não sei como usar expressões regulares dentro do arquivo grub.cfg para alterar o hd # para sd $, nem para alterar ', msdos #' ou ', gpt #' para #.

Talvez um link para expresões regulares no grub.cfg possa ajudar.

    
por 11.06.2018 / 15:22