Grub2 RAID / boot

4

Estou usando o Gentoo no meu HomeServer. Meus HDDs são raid1 espelhados com mdadm.

Meu problema é como inicializar a partição / boot correta?

/dev/md1 consists of /dev/sdc2 & /dev/sdd2 mounted on /boot

No meu grub.cfg eu tenho o uuid de /dev/md1 , mas no momento da inicialização, a matriz não está pronta.

O caminho mais simples seria desassociar as partições / boot, mas isso não é o que eu quero fazer.

então, como eu descubro o UUID dos membros do raid? ls -l /dev/disk/by-uuid mostra apenas o uuid de /dev/md1 . E quando eu não tenho medo dos discos, não consigo montá-los para obter o coeficiente UUID mount: unknown filesystem type 'linux_raid_member'

Então, como eu posso deixar o Grub2 inicializar esses discos, ele será capaz de determinar o conteúdo antes que eles estejam em raid? (eles são na verdade ext2).

Eu devo talvez adicionar que eu uso tabelas de partição gpt, portanto eu tenho uma pequena partição /dev/sdc1 and /dev/sdd1 em ambas as unidades para hospedar a partição bios_grub. aqueles não são invadidos atm.

Como apontado nos comentários abaixo da resposta de Gilles, meu problema persiste. O Grub não encontrará o dispositivo, dizendo-me

error: no such device: 9f81a-(device uuid)-5580.
entering rescue mode...
grub rescue> 

depois eu adicionei as linhas

insmod part_msdos
insmod part_gpt
insmod raid
insmod mdraid

para o meu grub.cfg, logo acima da linha onde root está definido root='(md0)' Eu ainda recebo o mesmo erro.

Eu fiz mais pesquisas e acho que é um erro relacionado aos uuids:

# grub-probe -d --target=fs_uuid /dev/md1
9f81a35d-0813-481f-9ae0-e4fba57c5580
# blkid
/dev/sdc2: UUID="11adb545-0e80-61d1-61f6-565f18e8c3f0" UUID_SUB="88826c5e-d12b-307d-6e54-556d1ebb2458" LABEL="livecd:1" TYPE="linux_raid_member"
/dev/sdd2: UUID="11adb545-0e80-61d1-61f6-565f18e8c3f0" UUID_SUB="15150fb2-5066-edba-d39b-08b63219453c" LABEL="livecd:1" TYPE="linux_raid_member"
/dev/md1: UUID="9f81a35d-0813-481f-9ae0-e4fba57c5580" TYPE="ext2"
(I cut away the other drives here)

como você pode ver as duas partições terem o mesmo UUID, editei o UUID das unidades no meu grub.cfg e fiz grub-install /dev/sdx novamente, mas ainda recebo o erro com o "antigo" / dev / md1 UUID .

    
por Baarn 27.07.2011 / 17:59

3 respostas

4

O Wiki do Gentoo tem informações que discutem tanto o Grub 1 quanto o Grub 2. Note que a situação é completamente diferente no Grub 1 e Grub 2: o Grub 1 não sabe nada sobre RAID, mas pode falsificar a leitura de um dispositivo RAID-1 lendo um dos discos (isso requer um formato de superbloco de 0.9 ou 1.0 mdraid, não 1.1 ou 1.2 ); O Grub 2 suporta nativamente os volumes Linux mdraid.

O Grub 2 funciona em três etapas (consulte aqui para mais detalhes):

  1. O setor de inicialização.
  2. Uma imagem principal, gerada por install-grub in /boot/grub/core.img , capaz de mostrar o prompt de recuperação e carregar módulos, mas não muito mais.
  3. Um sistema completo com módulos carregáveis, que normalmente (através do módulo normal ) mostra um menu de inicialização descrito por /boot/grub/grub.cfg .

Gerando a imagem principal

Execute grub-install /dev/sda para gerar a imagem principal e preencha /boot/grub com os arquivos do módulo. grub-install também instala um setor de inicialização no dispositivo indicado. Execute os dois grub-install /dev/sdc e grub-install /dev/sdd se você quiser ter um setor de inicialização nas duas unidades.

Se grub-install não detectar suas unidades corretamente, crie o script a seguir como /usr/local/sbin/grub-probe-verbose e execute grub-install --grub-probe=/usr/local/sbin/grub-probe-verbose para ver o que está acontecendo.

#!/bin/sh
exec /usr/sbin/grub-probe "$@" | tee /dev/stderr

De sua transcrição de bash -x /sbin/grub-install /dev/sdc , parece que grub-probe não está detectando /dev/md1 como uma matriz RAID ( /sbin/grub-probe --device-map=/boot/grub/device.map --target=partmap --device /dev/md1 e /sbin/grub-probe --device-map=/boot/grub/device.map --target=abstraction --device /dev/md1 não retornam nada). Caso o problema esteja apenas em grub-probe e não no código de inicialização, tente ignorar sua decisão:

grub-install --modules='biosdisk ext2 msdos raid mdraid' /dev/sdc

O suporte a superblocos do mdraid 1.x ainda é recente; não está no Grub 1.98, você precisa de pelo menos Revisão 2550 do Bazar de 2010-07-20 (o código estava em uma ramificação por alguns meses antes). O Debian squeeze e o Ubuntu 10.10 são fornecidos com o suporte ao superbloco 1.x; Eu esperaria que o Gentoo tivesse 1,99 agora.

Gerando o grub.cfg

Execute grub-mkconfig -o /boot/grub/grub.cfg.grub-mkconfig para produzir um arquivo de configuração do Grub provisório. Revise-o e, se parecer correto, renomeie-o para /boot/grub/grub.cfg .

Mapa de dispositivos

Você pode precisar ajustar /boot/grub/device.map para obter a saída de grub-mkconfig correta. Este arquivo será gerado automaticamente por grub-mkdevicemap , se não existir, mas as configurações com muitos discos tendem a confundi-lo. Eu esperaria que ele contivesse algo como

(md0) /dev/md1
(hd0) /dev/sdc
(hd1) /dev/sdd

onde md0 é o nome do volume do Grub e /dev/md1 é o nome no Linux. O Grub precisa acessar /boot/grub para duas coisas:

  • O setor de inicialização do Grub lê a imagem principal em um local fixo em um disco suportado pelo BIOS (não há muita escolha). Com um BIOS para PC, (hd0) é o disco do qual o BIOS lê o setor de inicialização (é o disco que contém o setor de inicialização) e (hd1) é algum outro disco (nem sempre é possível escolher). É mais simples se (hd0) for o disco (ou um disco, com uma matriz RAID-1) que contenha /boot/grub .
  • A imagem principal carrega módulos e grub.cfg e o kernel do Linux a partir de um local do sistema de arquivos determinado por grub-install , normalmente /grub ou /boot/grub de um dispositivo que pode ser uma matriz RAID ou qualquer outro tipo de volume suportado Grub.

Se você alterar device.map , precisará executar grub-install novamente. Você pode precisar executar grub-mkconfig novamente se não estiver contando com o comando search para tudo.

    
por 27.07.2011 / 19:28
0

Para responder à pergunta sobre o UUID: Use blkid

    
por 06.10.2011 / 21:48
-3

livecd ~ # mdadm --create /dev/md1 --level=1 --raid-devices=2 --metadata=0.90 /dev/sdc2 /dev/sdd2

livecd ~ # grub

grub> root (hd0,1)

Filesystem type is ext2fs, partition type 0xfd

grub> setup (hd0)

Checking if "/boot/grub/stage1" exists... yes  
Checking if "/boot/grub/stage2" exists... yes  Checking if
"/boot/grub/e2fs_stage1_5" exists... yes  Running "embed
/boot/grub/e2fs_stage1_5 (hd0)"...  16 sectors are embedded. succeeded
Running "install /boot/grub/stage1 (hd0) (hd0)1+16 p
(hd0,0)/boot/grub/stage2 /boot/ grub/menu.lst"... succeeded Done.
    
por 01.02.2012 / 10:29