Como verificar em quais unidades o grub2 realmente instalou um MBR?

17

Estou em um sistema Debian / Squeeze (com um histórico que remonta a pelo menos 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 duas unidades de 80 GB com partições RAID1-ed /, / home e / boot (há outro par de unidades com um "/ data" RAID1-ed e algumas trocas, caso alguém esteja se perguntando onde está a troca. , mas não estou tocando neles).

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 sincronização e removendo os antigos unidades a partir das matrizes para restarem apenas os SSDs (e depois aumentar os sistemas de arquivos). Mas mdadm / ext3 wrangling não é o que esta pergunta é sobre ...

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

Mais especificamente:

  • Quando fiz a atualização do Squeeze, lembro que havia alguma opção 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 no momento; como posso executar novamente isso para instalar o grub nos MBRs SSD? (Eu estou supondo que é um dpkg-reconfigure de algum pacote).

  • Como posso encontrar em quais unidades o grub2 pensa que está instalado? Boa sorte, existem quase 200 arquivos em / boot / grub / nos dias de hoje! Onde olhar ? Além disso, parece um pouco estranho o fato de o /boot/grub/device.map.auto listar apenas três 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: isso 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 paranóia nessa área se origina do BIOS de um mobo antigo que reordene a ordem do dispositivo vista pelo GRUB por capricho).

Resultado: tudo correu bem e agora tenho as duas antigas unidades IDE de 80 GB prontas para uso e um sistema de inicialização rápido e rápido executando SSDs RAID1-ed com todos os sistemas de arquivos redimensionados para seus novos tamanhos de partição. A outra "peça que faltava no quebra-cabeça do Grub" que eu estava procurando era dpkg-reconfigure grub-pcquais solicitações para quais discos manter um MBR ativado. A resposta de Aaron realmente fez muito para me garantir que isso estava funcionando como o esperado, portanto, aceitando essa resposta.

timday
fonte

Respostas:

17

O MBR tem 512 bytes, portanto, é uma maneira rápida de verificar se o GRUB está lá ...

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

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

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

Quando faço isso, ele imprime ' GRUB' seguido da ddsaída.

Você pode agrupar isso em um forloop bash ou em algo para percorrer mais unidades. se você não quiser fazer isso manualmente.

Aaron D. Marasco
fonte
4
Apenas uma pequena adição - como é provável que a posição do GRUB mude de versão para versão, pode-se usar dd if=/dev/sda bs=1 count=512 | grep -aob GRUB. Isso retornará a posição do marcador dentro do setor de inicialização.
Alessandro Santini
16

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ê mais dados e códigos em um local fixo através da interface do BIOS. Essa interface do BIOS expõe apenas dois discos rígidos: o disco 0 é o local onde o primeiro setor foi lido e o 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 (isto é, uma string semelhante (hd0)/boot/grub) que determina onde encontrar grub.cfge mais módulos do Grub.
  4. grub.cfg é executado, normalmente para mostrar um menu e inicializar um sistema operacional.

O setor de inicialização é gerado por grub-setup, normalmente chamado grub-install. O setor de inicialização termina em qualquer disco que você especificou (na sintaxe do Linux) na linha de comando grub-installou grub-setup. Você pode verificar se possui um setor de inicialização em um disco executando file -s /dev/sda. Como você está adicionando um novo disco e deseja inicializá-lo, é necessário executar grub-installo novo disco. Executar grub-installvárias vezes no mesmo disco é inofensivo.

A parte difícil está na etapa 2 acima. Se possível, coloque o Grub (ou seja, o /boot/grubdiretório) no disco de inicialização do BIOS (ou, aproximando-o da outra direção, diga ao BIOS para inicializar a partir do disco onde /boot/grubestá). É aqui que device.mapentra em jogo. Verifique se (hd0)está mapeado para o disco que contém /boot/grube execute grub-installno disco.

Se 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 um disco que é o disco de inicialização do BIOS falhar, a inicialização pelo outro funcionará (pois eles contêm os mesmos bytes nos mesmos locais relevantes). Se você espelhou apenas determinadas partições, a instalação de um setor de inicialização afeta apenas um dos discos. Você deve executar grub-installnovamente no segundo disco, depois de alterar device.mappara associar (hd0)ao disco que contém a segunda cópia espelhada de /boot/grub.

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

Gilles 'SO- parar de ser mau'
fonte