Como posso saber se o grub está instalado em um dispositivo?

37

Como posso saber se o grub está instalado em um disco e se é quais configurações ele possui (notadamente, o que ele tem para o parâmetro raiz)

Preciso verificar muitos discos nas matrizes RAID1 de software para garantir que os dois discos tenham o grub instalado, com o grub em cada disco tendo o valor raiz apropriado.

DrStalker
fonte
3
Você pode aceitar a nova resposta abaixo? desde que a resposta aceita está desatualizada por agora
rubo77 15/10
@ rubo77, minha resposta estava correta no momento, quando grub0,9x ou menos estava em uso comum e muito antes de ser renomeado grub-legacy. Se isso o incomoda, sugiro fazer uma nova pergunta especificamente sobre grub2. alternativamente, realize uma campanha corrigindo todas as perguntas e respostas que se tornaram obsoletas ao longo do tempo.
cas 23/03
3
Sem ofensa. Eu acho que SO é uma base de conhecimento e deve mudar ao longo do tempo. As respostas desatualizadas devem ser atualizadas.
rubo77
relacionado: askubuntu.com/questions/444855/… | superuser.com/questions/466086/…
Ciro Santilli Enviado em 15/01

Respostas:

28

ATUALIZAR:

Esta resposta é de 2009 e se aplica ao grub-legacy, não ao grub2.

Você pode usar filepara identificar o GRUB em um MBR. por exemplo

# file -s /dev/sda
/dev/sda: x86 boot sector; GRand Unified Bootloader, stage1 version 0x3
, stage2 address 0x2000, stage2 segment 0x200; partition 1:
ID=0xfd, starthead 1, startsector 63, 1044162 sectors; partition
2: ID=0x82, starthead 0, startsector 1044225, 1028160 sectors;
partition 3: ID=0xfd, starthead 0, startsector 2072385,
1951447680 sectors, code offset 0x48

O root=paramater não é armazenado no MBR, é armazenado no menu.lstarquivo do GRUB que é armazenado em um sistema de arquivos (normalmente no diretório / boot / grub do root fs ou no diretório grub do sistema de arquivos / boot - mas nem sempre, ele pode estar em qualquer lugar).

Você terá que analisar a saída do arquivo acima, determinar em qual disco / partição o menu.lstarquivo está, montá-lo, lê-lo e analisá-lo. Você também desejará ler o arquivo grub / padrão para descobrir qual entrada do menu grub é a padrão, porque provavelmente é aquele que possui o parâmetro root = no qual você está mais interessado.

cas
fonte
Nesse caso, eu preciso de uma maneira de garantir que o grub esteja procurando o menu.lst no lugar apropriado ... em algum lugar no gerenciador de inicialização deve ser informado em qual disco e partição ele deve ir para que ele possa acessar o menu de inicialização.
DrStalker 02/09/09
há um monte de informações úteis sobre grub na home page grub gnu.org/software/grub , o grub wiki grub.enbug.org , e na wikipedia en.wikipedia.org/wiki/GRUB
cas
8
Isso não está mais correto no grub2. Veja a resposta de @ benrifkah.
Paul Tomblin
52

Método Alternativo

file -snão funcionou para mim no Ubuntu Lucid porque os arquivos mágicos do meu comando file estavam desatualizados . Outra maneira de fazer isso se seus arquivos mágicos não tiverem alcançado as alterações do GRUB é examinar os primeiros 512 bytes do dispositivo usando o ddcomando da seguinte maneira:

user@host:~$ sudo dd bs=512 count=1 if=/dev/sda 2>/dev/null | strings
ZRr=
`|f
\|f1
GRUB
Geom
Hard Disk
Read
 Error

Isso envia a saída do ddcomando através do stringscomando, eliminando caracteres não imprimíveis (as estatísticas de transferência são descartadas /dev/null).

Se você vir alguma mensagem que o GRUB exibirá quando encontrar uma falha, você terá o grub instalado.

Dica para o louib no ubuntuforums.org por responder nesta postagem protegida por senha: http://ubuntuforums.org/showthread.php?t=363372

Para os curiosos, é disso que recebi file -s:

user@host:~$ sudo file -s /dev/sda
/dev/sda: x86 boot sector; partition 1: ID=0x83, active, starthead 32, startsector 20
48, 337211392 sectors; partition 2: ID=0x5, starthead 254, startsector 337215486, 1434214
6 sectors, code offset 0x63

Não há nada sobre o GRUB lá especificamente.

benrifkah
fonte
5
Spot on. A resposta aceita não funcionou para mim em várias máquinas, mas a sua funcionou.
Cerin
13
A resposta aceita foi escrita em 2009 e (como deve ser óbvio pela menção de menu.lst ao invés de grub.cfg) foi para o grub1, também conhecido como "grub-legacy". obviamente as coisas mudaram desde então, e o grub2 não coloca um identificador no MBR. se funcionasse em algumas máquinas para você, mas não em outras, isso implicaria que você tenha o grub1 em algumas e o grub2 em outras.
cas
11
Obrigado pelos esclarecimentos Craig. O sistema em que tentei o file -scomando originalmente usa o grub-pc, que é aparentemente o GRUB2, então parece que você está parcialmente correto. No entanto, eu corri file -sem alguns outros sistemas executando o GRUB 0.97 e em alguns funcionou enquanto em outros não. A diferença entre esses sistemas estava nos números nos arquivos mágicos que acompanham o comando file. A troca de arquivos de números mágicos confirmou que as definições do sistema não funcional causaram falha no sistema ativo.
benrifkah 12/09/11
7

Você pode usar grub-emupara ver o menu que o grub mostrará quando a máquina reiniciar novamente.

$ sudo apt-get install grub-emu
$ sudo grub-emu

Na minha máquina desktop, o menu era exibido conforme o esperado, embora, se eu realmente fingisse inicializar um kernel, recebi um erro "sem esse dispositivo". Eu acho que esse é o comportamento esperado.

No meu DigitalOcean VPS, nenhuma entrada foi exibida no menu grub, embora o servidor realmente tenha reiniciado bem. (Este é um VPS de 2013, portanto, sua milhagem pode variar.)

Algumas notas ao executar grub-emu:

  • Nas janelas X, se você deseja interagir com o grub, precisa que o foco do teclado esteja no terminal a partir do qual você executou o grub-emu, e não na janela que apareceu.
  • Você pode sair do emulador pressionando ce digitando exit.
  • Depois de sair, o emulador de terminal pode estar em um estado ruim (por exemplo, Enter não será exibido em uma nova linha). Corrija isso digitando reset. (Não se preocupe, isso não reiniciará sua máquina. Apenas limpará seu terminal.)
joeytwiddle
fonte
Digitar cseguido de exitnão funcionou para mim.
Faheem Mitha
11
certifique-se o seu tem o foco no terminal original que gerou a janela grub e não da própria janela do grub (Levei um segundo para perceber isso)
Madivad