Como eu aplico parâmetros a kernels específicos com o GRUB 2?

2

Eu tenho vários kernels em /boot . Um deles, linux-cc , é para computação pesada, ou seja, 100 Hz, sem preempção, sem gráficos. Eu criei uma meta systemd , chamada compute.target , que apenas traz o sistema para cima e, em seguida, inicia um servidor ssh . Estou usando o GRUB2 e gostaria de adicionar o parâmetro systemd.unit=compute somente ao kernel mencionado.

Li Como adiciono xen parâmetros de inicialização do kernel no grub2? , mas isso não se aplica à minha situação (tentei adicionar GRUB_CMDLINE_LINUX_CC="systemd.unit=compute "a /etc/default/grub , mas não funcionou).

Alguém sabe como fazer isso? Estou usando o ArchLinux e gostaria de continuar usando grub-mkconfig se for possível.

P.S .: Talvez eu possa adicionar este parâmetro como uma opção de kernel codificada, mas não parece muito flexível.

    
por Kalrish 08.12.2013 / 16:45

2 respostas

3

Acho que se você mantiver vários kernels com opções diferentes, será mais fácil rolar seu próprio /boot/grub/grub.cfg em vez de usar grub2-mkconfig .

Um exemplo de entrada é:

menuentry 'Linux 3.10.17 (sde) kernel-3.10.17-g' {
    root=hd0,1
    linux /boot/kernel-3.10.17-g domdadm dolvm root=/dev/md3
    initrd /boot/initrd-3.10.17-g
}

Onde tudo após o nome do seu kernel na linha linux são as opções de inicialização que você deseja passar para esse kernel específico. Obviamente, sua configuração será diferente da minha, mas isso é demonstrar que a configuração manual do grub2 realmente não é muito diferente do grub.

Se você quiser combinar este método com a "maneira grub2", você pode colocar entradas personalizadas em /etc/grub.d/XX_custom ou a configuração equivalente em sua distro e o script grub2-mkconfig irá puxá-las para o arquivo de configuração gerado.

    
por 08.12.2013 / 17:39
2

O método de hack não oficial

Quando o GRUB 2 foi lançado, era diferente porque grub.conf não deveria mais ser editado pelo usuário; o gerenciador de pacotes distro faria o que quer que fosse e então deveria haver um meio para o usuário fazer mudanças usando algum tipo de ferramenta que não estava documentada naquela época (tenho certeza que eles têm muitos documentos legais para isso agora, de claro; |).

Acredito que parte do objetivo era simplificar as coisas adicionando uma camada de abstração. Eu não tenho tanta certeza de quão bem isso funcionou, e (divulgação completa) eu nunca me preocupei em fazer as coisas do jeito certo. A maneira "errada" é fácil demais, e funcionará para você aqui:

Apesar do aviso na parte superior do arquivo, você pode editá-lo. O instalador da distro irá modificá-lo quando o kernel for atualizado e deixará suas entradas sozinhas (pelo menos, no Fedora, Ubuntu e eu tenho certeza do Debian), embora possa adicionar um ao topo e torná-lo padrão, então acontecer, você terá que mover algumas entradas ou alterar o índice em set default . Também pode acontecer que, se o instalador encontrar o arquivo alterado, ele não adicione nenhuma nova entrada (Fedora), então preste atenção se você quiser acessar os kernels de distribuição atualizados no menu grub.

É fácil dizer, olhando para o arquivo ( /boot/grub2/grub.conf ), como ele está estruturado em relação ao menu grub que você vê na inicialização. Todo bloco menuentry tem uma linha como essa em algum lugar:

linux /boot/vmlinuz-3.11 root=/dev/sda1 resume=/dev/sda3 fbcon=scrollback:512k

Ele provavelmente terá root=UUID=... e não nós de dispositivo. Se você não estiver usando um initramfs, será a última linha, caso contrário, ela será seguida por uma linha initrd .

De qualquer forma, esta é a linha de comando do kernel; /boot/vmlinuz-3.11 é o caminho para o kernel no sistema de arquivos raiz e depois disso tudo são parâmetros passados para o kernel.

    
por 08.12.2013 / 17:37