Once upon a time we had legacy GRUB, The Grand Unified Linux Bootloader version 0.97. Legacy GRUB tinha muitas virtudes, mas tornou-se Velho e seus desenvolvedores ansiavam por mais funcionalidade, e assim GRUB 2 veio ao mundo.
GRUB 2 é uma grande reescrita com várias diferenças significativas. Ele boots mídia removível, e pode ser configurado com uma opção para entrar em seu sistema BIOS. É mais complicado de configurar, com todos os tipos de scripts para percorrer, e em vez de ter um bom bastante simples /boot/grub/menu.lst
arquivo com todas as configurações em um único lugar, o padrão é /boot/grub/grub.cfg
. Que você não edita diretamente, oh não, pois isso não é para meros humanos tocarem, mas apenas outros scripts. Nós, humanos humildes, podemos editar /etc/default/grub
, que controla principalmente a aparência do menu GRUB. Também podemos editar os scripts em /etc/grub.d/
. Estes são os scripts que inicializam seus sistemas operacionais, controlam aplicações externas como memtest
e os_prober
, e temagem./boot/grub/grub.cfg
é construída a partir de /etc/default/grub
e /etc/grub.d/*
quando você executa o update-grub
comando que você deve executar cada vez que você fizer alterações.
a boa notícia é que o programaupdate-grub
é fiável para encontrar kernels, ficheiros de arranque e adicionar todos os sistemas operacionais ao seu menu de arranque GRUB, por isso não tem de o fazer manualmente.vamos aprender a corrigir duas das falhas mais comuns. Quando você inicia o seu sistema e ele pára no grub>
prompt, que é a shell de comando GRUB 2 completo. Isso significa que o GRUB 2 iniciado normalmente e carregado normal.mod
módulo (e outros módulos que estão localizados no /boot/grub//
), mas não encontro o grub.cfg
arquivo. Se você ver grub rescue>
isso significa que ele não poderia encontrar, então provavelmente não poderia encontrar nenhum dos seus arquivos de boot.como é que isto acontece? O kernel pode ter mudado as atribuições do disco rígido ou você moveu seus discos rígidos, você mudou algumas partições, ou instalou um novo sistema operacional e moveu as coisas ao redor. Nesses cenários, seus arquivos de inicialização ainda estão lá, mas GRUB não pode encontrá-los. Então você pode procurar seus arquivos de inicialização no prompt GRUB, definir suas localizações, e então iniciar o seu sistema e corrigir a sua configuração GRUB.
GRUB 2 Shell de comando
a shell de comando GRUB 2 é tão poderosa como a shell na GRUB legacy. Você pode usá-lo para descobrir imagens de arranque, kernels e sistemas de arquivos de raiz. Na verdade, ele lhe dá acesso completo a todos os sistemas de arquivos na máquina local, independentemente de permissões ou outras proteções. O que alguns podem considerar um buraco de segurança, mas você sabe o velho ditado Unix: quem tem acesso físico à máquina é dono dela.
Quando você está na linha de comandos grub>
, você tem uma série de funcionalidades semelhantes a qualquer linha de comandos, como histórico e completação de páginas. O modo
é mais limitado, sem histórico e sem completação de tabulações.se estiver a praticar num sistema funcional, carregue em C quando o seu menu de arranque do GRUB aparecer para abrir a linha de comandos do GRUB. Você pode parar a contagem decrescente para o arranque se deslocar para cima e para baixo os itens do menu com as teclas de cursores. É seguro experimentar na linha de comando GRUB porque nada do que você faz lá é permanente. Se você já está olhando para ogrub>
ougrub rescue>
então você está pronto para rock.
Os próximos comandos funcionam com ambos grub>
e grub rescue>
. O primeiro comando que deverá executar invoca o pager, para chamar as saídas de comandos longas:
grub> set pager=1
não deverá haver espaços de ambos os lados do sinal de igual. Agora vamos explorar um pouco. Type ls
to list all partitions that GRUB sees:
grub> ls(hd0) (hd0,msdos2) (hd0,msdos1)
What’s all thismsdos stuff
? Isso significa que este sistema tem a tabela de partições MS-DOS de estilo antigo, ao invés da tabela de partições de identificadores globalmente novos (GPT). (See Using the New GUID Partition Table in Linux (Goodbye Ancient MBR). Se você estiver executando o GPT, ele dirá (hd0,gpt1)
. Agora vamos bisbilhotar. Use o comando ls
para ver que ficheiros estão no seu sistema:
grub> ls (hd0,1)/lost+found/ bin/ boot/ cdrom/ dev/ etc/ home/ lib/lib64/ media/ mnt/ opt/ proc/ root/ run/ sbin/ srv/ sys/ tmp/ usr/ var/ vmlinuz vmlinuz.old initrd.img initrd.img.old
Hurrah, encontrámos o sistema de ficheiros raiz. Você pode omitir as etiquetasmsdos
egpt
. Se você deixar de fora a barra, ele irá imprimir informações sobre a partição. Você pode ler qualquer arquivo no sistema com o comando cat
:
grub> cat (hd0,1)/etc/issueUbuntu 14.04 LTS n l
leitura /etc/issue
pode ser útil num sistema de arranque múltiplo para identificar as suas várias Linuxas.
arranque a partir do grub >
Esta é a forma de definir os ficheiros de arranque e arrancar o sistema a partir do grub>
prompt. Sabemos por executar o comando ls
que existe um sistema de ficheiros raiz Linux em (hd0,1)
, e você pode continuar a procurar até verificar onde está /boot/grub
. Em seguida, execute esses comandos, usando sua própria partição de raiz, kernel e imagem initrd:
grub> set root=(hd0,1)grub> linux /boot/vmlinuz-3.13.0-29-generic root=/dev/sda1grub> initrd /boot/initrd.img-3.13.0-29-genericgrub> boot
a primeira linha define a partição em que o sistema de arquivos de raiz está. A segunda linha diz ao GRUB a localização do kernel que deseja usar. Comece a escrever /boot/vmli
, e então use tab-completion para preencher o resto. Type root=/dev/sdX
to set the location of the root filesystem. Sim, isto parece redundante, mas se deixares isto de fora vais ter um pânico no kernel. Como você sabe a partição correta? hd0, 1 = / dev / sda1. hd1, 1 = / dev / sdb1. hd3, 2 = / dev / sdd2. Acho que podes extrapolar o resto.
a terceira linha define o ficheiro initrd
, que deve ser o mesmo número de versão do kernel.a quarta linha liga o seu sistema.
em alguns sistemas Linux os kernels e os initrds actuais estão ligados ao nível superior do sistema de ficheiros de raiz:
para que possa arrancar a partir de grub>
assim:
grub> set root=(hd0,1)grub> linux /vmlinuz root=/dev/sda1grub> initrd /initrd.imggrub> boot
a Inicialização Do grub-rescue>
Se você está no GRUB rescue shell de comandos são diferentes, e você tem que carregar o normal.mod
elinux.mod
módulos:
grub rescue> set prefix=(hd0,1)/boot/grubgrub rescue> set root=(hd0,1)grub rescue> insmod normalgrub rescue> normalgrub rescue> insmod linuxgrub rescue> linux /boot/vmlinuz-3.13.0-29-generic root=/dev/sda1grub rescue> initrd /boot/initrd.img-3.13.0-29-genericgrub rescue> boot
Guia-conclusão deve começar a trabalhar depois de carregar os módulos.
a fazer reparações permanentes
quando tiver iniciado com sucesso o seu sistema, execute estes comandos para corrigir permanentemente a GRUB:
# update-grubGenerating grub configuration file ...Found background: /usr/share/images/grub/Apollo_17_The_Last_Moon_Shot_Edit1.tgaFound background image: /usr/share/images/grub/Apollo_17_The_Last_Moon_Shot_Edit1.tgaFound linux image: /boot/vmlinuz-3.13.0-29-genericFound initrd image: /boot/initrd.img-3.13.0-29-genericFound linux image: /boot/vmlinuz-3.13.0-27-genericFound initrd image: /boot/initrd.img-3.13.0-27-genericFound linux image: /boot/vmlinuz-3.13.0-24-genericFound initrd image: /boot/initrd.img-3.13.0-24-genericFound memtest86+ image: /boot/memtest86+.elfFound memtest86+ image: /boot/memtest86+.bindone# grub-install /dev/sdaInstalling for i386-pc platform.Installation finished. No error reported.
Quando você executar o grub-install
lembre-se que você está instalando para o setor de inicialização da unidade de disco rígido e não para uma partição, então não use um número de partição, como /dev/sda1
.
mas ele ainda não funciona
Se o seu sistema está tão confuso que nada disso funciona, tente o disco de resgate Super GRUB2 ao vivo. O manual oficial GNU GRUB 2.00 também deve ser útil.