Como verificar em quais drives o grub2 instalou um MBR?

17

Eu estou em um sistema Debian / Squeeze (com um histórico que remonta a pelo menos o Woody) que foi atualizado para o grub2 como parte da atualização do Squeeze. Tudo funciona bem, mas estou prestes a mexer com a configuração do disco.

Atualmente, a máquina executa 2 drives de 80 GB com partições RAID1 / ed / / home e / boot (há outro par de drives com RAID1 / ed "" e alguns swaps, caso alguém esteja se perguntando onde a troca é, mas eu não estou tocando esses).

Eu adicionei 2 SSDs de 130 GB, particionei-os para serem pelo menos tão grandes quanto as partições nas unidades de 80 GB e pretendo mudar para as novas unidades SSD aumentando os RAID1s para incluí-los, aguardando a sincronização e depois removendo as unidades antigas dos arrays, então apenas os SSDs são deixados (e então os sistemas de arquivos crescem). Mas a disputa mdadm / ext3 não é o que esta questão é sobre ...

Isso me deixará com 2 unidades obsoletas de 80 GB (IDE) que desejo remover da máquina. Minha preocupação é que removê-los levará algum MBR crucial com eles. Como posso garantir que a máquina permaneça inicializável?

Mais especificamente:

  • Quando fiz o upgrade do Squeeze, lembrei que havia alguma escolha apresentada sobre quais unidades o grub2 deveria instalar (eu fui com o padrão, que era todas as unidades). Os SSDs não estavam na máquina naquele momento; Como posso reexecutar isso para obter grub para instalar nos MBRs SSD? (Eu estou supondo que é uma reconfiguração do dpkg de algum pacote).

  • Como posso encontrar em quais unidades o grub2 acha que está instalado? Boa tristeza, existem quase 200 arquivos em / boot / grub / estes dias! Onde olhar ? Além disso, parece um pouco estranho que /boot/grub/device.map.auto liste apenas 3 unidades atualmente (2 dos 80GBs, mas apenas um dos outros pares de unidades e nenhum dos SSDs). Como faço para atualizar isso? ( Atualização: que era um arenque vermelho; device.map.auto parece ser uma relíquia de anos atrás; device.map parecia sensato em uma atualização do grub-mkdevicemap. Acho que minha paranoia nessa área se origina da BIOS de um mobo antigo que reordenaria a ordem do dispositivo visto pelo GRUB por um capricho).

Resultado: tudo correu bem e agora tenho dois drives IDE antigos de 80GB prontos para uso e um sistema de inicialização rápido e rápido rodando em SSDs RAID1-ed com todos os sistemas de arquivos redimensionados novos tamanhos de partições. A outra "peça que faltava no quebra-cabeça do Grub" que eu estava procurando era dpkg-reconfigure grub-pc , que perguntava em quais discos manter um MBR ativado. A resposta de Aaron, na verdade, fez mais para me assegurar de que isso estava funcionando como esperado, aceitando, portanto, essa resposta.

    
por timday 09.07.2011 / 12:59

2 respostas

16

O MBR tem 512 bytes, então é uma maneira rápida de ver se o GRUB está lá ...

dd if=/dev/sda bs=512 count=1 | xxd

Isso despeja o MBR, eu vejo o "GRUB" no meu em byte 0x17F = 383.

dd if=/dev/sda bs=1 count=4 skip=383

Quando faço isso, imprime ' GRUB ' seguido da dd output.

Você pode agrupar isso em um loop bash for ou algo para passar por mais unidades. se você não quiser fazer isso manualmente.

    
por 10.07.2011 / 05:17
15

Existem várias etapas no processo de inicialização (estou descrevendo um BIOS de PC tradicional):

  1. O BIOS lê o primeiro setor (512 bytes) do disco de inicialização.
  2. O código neste primeiro setor lê dados adicionais e codifica em um local fixo através da interface do BIOS. Essa interface da BIOS expõe apenas dois discos rígidos: o disco 0 é onde quer que o primeiro setor tenha sido lido eo disco 1 é outro disco que não é facilmente previsível se você tiver mais de dois. O setor de inicialização contém um byte que indica em qual disco rígido estão os dados adicionais; este é o disco que contém /boot/grub .
  3. O código carregado no estágio anterior compreende partições, sistemas de arquivos e outras noções de alto nível. Os dados incluem uma localização do sistema de arquivos (ou seja, uma string como (hd0)/boot/grub ) que determina onde encontrar grub.cfg e outros módulos do Grub.
  4. grub.cfg é executado, geralmente para mostrar um menu e inicializar um sistema operacional.

O setor de inicialização é gerado por grub-setup , normalmente chamado por grub-install . O setor de inicialização termina em qualquer disco especificado (na sintaxe do Linux) na linha de comando grub-install ou grub-setup . Você pode verificar se tem um setor de inicialização em um disco executando file -s /dev/sda . Como você está adicionando um novo disco e quer inicializar a partir dele, é necessário executar grub-install no novo disco. Executar grub-install várias vezes no mesmo disco é inofensivo.

A parte difícil está no passo 2 acima. Se possível, coloque o Grub (ou seja, o diretório /boot/grub ) no disco de inicialização do BIOS (ou, ao se aproximar da outra direção, diga ao seu BIOS para inicializar a partir do disco onde /boot/grub é). É aqui que entra em jogo device.map . Certifique-se de que (hd0) esteja mapeado para o disco que contém /boot/grub e, em seguida, execute grub-install nesse disco.

Se os seus dois discos estiverem em uma configuração de software RAID-1, você terá setores de inicialização idênticos. Esse é o comportamento desejável: se o disco que é o disco de inicialização do BIOS falhar, a inicialização do outro apenas funcionará (já que eles contêm os mesmos bytes nos mesmos locais relevantes). Se você tiver espelhado apenas algumas partições, a instalação de um setor de inicialização afeta apenas um dos discos. Você deve executar grub-install novamente no segundo disco, depois de alterar device.map para associar (hd0) ao disco que contém a segunda cópia espelhada de /boot/grub .

O passo 3 é bastante complexo, mas normalmente funciona imediatamente. Na etapa 4, o Grub localiza os sistemas de arquivos pelo UUID ou procura por arquivos nomeados, portanto, você não precisa mais se preocupar com as várias maneiras de designar discos.

    
por 09.07.2011 / 14:29