O GRUB é a melhor solução de carregamento de inicialização? Existe uma alternativa mais fácil?

26

Eu tive algumas experiências bastante ruins com GRUB2. Eu poderia dizer (e já disse) algumas coisas desagradáveis ​​sobre seu processo de design e desenvolvimento. Eu particularmente não gosto de seus meios de atualização: por qualquer motivo, ele deve atualizar semi-automaticamente vários scripts - um indiretamente através de outro em cadeia - para cada atualização do kernel - ou muitas outras alterações de configuração menores (e aparentemente não relacionadas) .

Isso é diretamente contrastado pelas experiências anteriores que tive LILO- para as quais estou seriamente considerando reverter - porque nunca tive problemas com ele e sua configuração era bastante simples. Por um lado, como eu me lembro, eu tinha apenas que atualizar (ou melhor, apenas atualizar) um único arquivo de texto de configuração gerenciado com simplicidade por atualização do kernel.

Então, como o LILO funciona em hardware moderno com os kernels de hoje? Como o GRUB? Como outros gerenciadores de inicialização? Preciso cumprir quaisquer pré-condições ou se trata apenas de gravar o arquivo de configuração e executar o lilocomando, como me lembro com carinho nos velhos tempos? O pacote de kernel atualiza (Debian / Ubuntu) atualiza o LILO como no GRUB2?

Comunidade
fonte
Dependendo se você tem ou não um tipo de firmware EFI, você poderia ficar sem isso se gostasse e carregasse o kernel Linux do firmware. Mas você ainda pode usar o LILO com EFI (eLILO de qualquer maneira) ou BIOS. Está na árvore de fontes do kernel e é mantido. Se você quiser saber como fazer a coisa da EFI, posso responder isso, mas não tenho experiência pessoal com o LILO, apenas saiba que ele é mantido e funciona.
mikeserv
Lembro-me de usar o LILO por volta de 2010 ou 2011 em um Core 2 Duo atual. Eu acho que ainda deve funcionar (desconsiderando UEFI etc.), a arquitetura do PC não mudou muito.
Renan
@mikeserv, escreva tudo o que você sabe sobre o dueto LILO-EFI. Quaisquer informações sobre este tópico são bem-vindas.
Na verdade, escrevi algo que você pode achar útil aqui antes, que lida em breve com as diferenças entre uefi / bios. O ponto é que o uefi inclui um gerenciador de inicialização para que o grub / lilo / qualquer coisa seja redundante. O que muitas vezes does not include é um gerenciador de boot - para os menus e outras coisas - então eu recomendo que você vá para rodsbooks.com/refind
mikeserv
3
Ainda é o que acompanha o Slackware. Isso dificilmente é uma pequena comunidade.
28514 Bandrami

Respostas:

28

ELILO

Gerenciando carregadores de inicialização EFI para Linux: usando o ELILO

É realmente difícil para mim decidir qual parte disso copiar + colar, porque tudo é muito bom, então peço que você leia.

Rod Smith

Criou e mantém ambos gdiske rEFInd.

Mas antes de fazer, gostaria de comentar um pouco sobre isso. O link ELILO acima é para uma das muitas páginas sobre inicialização UEFI que você encontrará no rodsbooks.com, escrito por Rod Smith. Ele é um escritor técnico talentoso, e se você já pesquisou o tópico de inicialização da UEFI e acabou não lendo algo dele, provavelmente foi porque você pulou os principais resultados.

Inicialização Linux UEFI

Basicamente, o kernel do Linux pode ser executado diretamente pelo firmware.

No link acima, ele menciona o stub loader EFI do kernel do Linux - é isso que você deve usar, na minha opinião, pois permite que o kernel do linux seja chamado diretamente pelo próprio firmware. Independentemente do que você está fazendo, algo está sendo executado pelo firmware - e parece que algo está acontecendo grub. Se o firmware puder carregar diretamente o kernel do sistema operacional, de que serve um gerenciador de inicialização? O firmware UEFI monta uma partição GPT formatada em FAT sinalizada esp pela tabela de partições e executa um caminho onde ele salvou como uma variável de inicialização UEFI em um módulo de memória flash onboard. Então, uma coisa que você pode fazer é colocar o kernel do linux nessa partição FAT e armazenar seu caminho nessa variável de inicialização. De repente, o kernel é próprio carregador de inicialização.

Carregadores de inicialização

Nos sistemas UEFI, os gerenciadores de inicialização são redundantes - incluído o ELILO.

O problema que os gerenciadores de inicialização foram projetados para resolver é que os sistemas BIOS apenas lêem no primeiro setor da partição sinalizada de inicialização e a executam. É um pouco difícil fazer algo significativo com um kernel de 512 bytes, então a coisa mais comum a fazer era escrever um pequeno utilitário que pudesse montar um sistema de arquivos onde você mantinha o kernel real e o carregava em cadeia.

De fato, os 512 bytes muitas vezes não eram suficientes, mesmo para os gerenciadores de inicialização. grub, por exemplo, na verdade, carrega-se em cadeia antes de carregar seu kernel em cadeia, porque ocupa seu segundo estágio no espaço vazio entre o setor de inicialização e o primeiro setor do seu sistema de arquivos. É uma espécie de truque sujo - mas funcionou.

Gerenciadores de inicialização

Porém, para facilitar a configuração, alguns intermediários podem ser úteis.

O que o rEFInd de Rod Smith faz é lançar como um aplicativo EFI - este é um conceito relativamente novo. É um programa que é executado a partir do disco - e que retorna ao - firmware. O que o rEFInd faz é permitir que você gerencie os menus de inicialização e, em seguida, retorne sua seleção de inicialização ao firmware para executar. Ele vem com drivers do sistema de arquivos UEFI - então, por exemplo, você pode usar o carregador EFI-stub do kernel em uma partição não-FAT (como a atual /boot). É simples de gerenciar - se é necessário - e adiciona a simplicidade de um kernel de sistema executável à conveniência de um gerenciador de inicialização configurável.

Indirecionamento atômico

O kernel não precisa de links simbólicos - pode mount --bind.

Se houver algum caminho no seu /local em que você deve proibir a ligação simbólica, é /boot. Um link simbólico órfão não/boot é o tipo de problema que você deve ter para solucionar problemas. Ainda assim, é uma prática bastante comum configurar indiretos elaborados em várias distribuições - mesmo que seja uma ideia horrível - para lidar com atualizações in loco do kernel e / ou várias configurações do kernel./boot

Esse é um problema para sistemas EFI não configurados para carregar drivers do sistema de arquivos (como os fornecidos com o pacote rEFInd) porque o FAT é um sistema de arquivos bastante estúpido em geral e não os entende.

Eu não uso pessoalmente os drivers do sistema de arquivos UEFI fornecidos com o rEFInd, embora a maioria das distribuições inclua um pacote rEFInd que possa ser instalado via gerenciador de pacotes e esquecido de usar sua própria /bootconfiguração horrível e com links simbólicos e os drivers do sistema de arquivos UEFI do rEFInd.

My Config

Certa vez, escrevi um conjunto de instruções e publiquei aqui , mas parece:

% grep esp /etc/fstab && 
> ls /esp/EFI

LABEL=ESP          /esp  vfat defaults      0 1
/esp/EFI/arch_root /boot none bind,defaults 0 0 

arch_root/  arch_sqsh/  arch_xbmc/  BOOT/  ipxe/

Então, eu apenas coloquei essas duas linhas no meu /etc/fstabapontador para uma pasta que pretendo conter as novas instalações do linux /boote estou quase terminando de me preocupar com tudo isso. Eu também tenho que fazer:

cat /boot/refind_linux.conf 

"Arch" "root=LABEL=data rootflags=subvol=arch_root,rw,ssd,compress-force=lzo,space_cache,relatime"

Além de instalar o refind-efipacote via pacmanpara o primeiro, é tudo o que é necessário para instalar quantas instalações / configurações separadas eu desejar. Observe que a maioria dessa string acima consiste em opções de montagem específicas do btrfs especificadas como parâmetros do kernel. Um mais típico /boot/refind_linux.confprovavelmente se pareceria com:

"Menu Entry" "root=/dev/sda2"

E isso é tudo o que é preciso.

rodsbooks.com

Se você ainda deseja o ELILO, pode encontrar as instruções de instalação no link acima. Se você deseja refR, encontrará links para ele no primeiro parágrafo. Basicamente, se você deseja fazer qualquer configuração de inicialização UEFI, leia rodsbooks.com primeiro.

mikeserv
fonte
3

Eu uso o LILO em vez do GRUB2. Para ser sincero, não foi minha escolha - a instalação do GRUB2 falhou no instalador do Debian Live CD, mas foi a opção de instalar o LILO com êxito. Eu tenho um laptop de 2 anos executando o Debian Stable. LILO funciona perfeitamente para mim.

Larsoden
fonte
1

O LILO ainda é utilizável, mesmo com BIOS UEFI. O UEFI pode carregar o kernel do Linux diretamente, normalmente. Isso depende da própria UEFI, no entanto.

No entanto, se você precisar de uma tela de seleção de inicialização, por exemplo, se estiver inicializando em vários sistemas operacionais em uma máquina, um pequeno carregador de inicialização poderá ser útil.

Eu consideraria o uso do EXTLINUX , no entanto. É uma variante do SYSLINUX, mas reside em extpartições de tipo.

A beleza do EXTLINUX é que, embora seja mais expansível e tenha muito mais opções que o LILO, pode ser tão simples quanto ser mantido ativamente.

polemon
fonte
-1 O pacote do kernel (deb / ubuntu) não atualiza o EFI. (A EFI não lê fs que suportam links simbólicos, então você não pode simplesmente usar minha resposta). +1 para EXTLINUX como uma alternativa mais recente ao LILO. Seu link mostra que ele suporta vários outros sistemas de arquivos, o que é um bom sinal. O suporte da EFI parece um pouco novo, onde é necessário.
sourcejedi
@sourcejedi - você está errado. Um sistema EFI no qual os drivers adequados do sistema de arquivos EFI são carregados pode lidar com links simbólicos facilmente.
mikeserv
Por alguma razão, vincular diretamente ao syslinux.com parece ser proibido.
Polemon
@ MikeServ eu sei, mas carregar um driver de sistema de arquivos me pareceu um pouco obscuro para a maioria dos casos. Você precisaria instalar algum tipo de script EFI (terminologia?) Para carregar o driver e o kernel. Ah, e aposto que ninguém tem assinaturas de inicialização segura do MS para esses drivers, então esse é outro wormcan: p.
sourcejedi
@sourcejedi - por favor, leia a resposta que escrevi aqui? E sim - você precisaria de alguns meios para carregar o driver.
mikeserv
1

Não me lembro de nenhum equivalente update-grub. No entanto, existe um sistema mais antigo que ainda é suportado no Debian. (É usado para uboot no meu servidor ARM).

O kernel mais recente é vinculado /boot/vmlinuze initrd para /boot/initrd.img. É atualizado pelo pacote do kernel. O carregador de inicialização é apontado para essas referências e faz referência ao link simbólico em cada inicialização.

Portanto, você pode não ter uma opção de recuperação. De qualquer forma, essa não será a opção mais amplamente testada, por isso é ainda mais aconselhável manter um disco de inicialização funcionando :-).


Atualização: Se o seu objetivo é algo que não seja literalmente executar o LILO em um computador moderno, provavelmente existem alternativas melhores, conforme descrito pelas outras respostas aqui :).

O exemplo acima só faz sentido para a versão original do LILO baseada em BIOS. O hardware moderno fornece compatibilidade com o BIOS em cima do EFI, se você não deseja uma inicialização segura ou a inicialização do Windows 8 no mesmo menu. Teoricamente, você poderia fazer o ELILO funcionar, mas ele não suporta inicialização segura ou carregamento do Windows 8. O ELILO não faz mais sentido em geral, então acho que não há muita comunidade por trás disso.

sourcejedi
fonte
ugh. links simbólicos em / de /bootsão uma solução imunda para qualquer problema.
mikeserv
O Welp Lilo está morto (e o uboot está obsoleto) então sim. Qual o problema que você tinha em mente? As pessoas ainda não estão usando o FAT para / boot ... O BootLoaderSpec é um bom projeto, mas ainda não existe ... e há uma boa razão para isso (patentes ruins, licença compatível com FLOSS concedida apenas para interoperabilidade EFI).
sourcejedi
Essa foi uma boa edição.
Mikeerv