Como inicializar o GRUB2 para montar “root” em uma unidade diferente (servidor remoto sem comutador kvm)

2

Resumo: Eu criei uma cópia do sistema de arquivos raiz em uma matriz de raid (com um disco sobre ele), e estou tentando obter o sistema para arrancar essa unidade recém-copiada.

Histórico:

  • 2 discos do mesmo tamanho no servidor (sda, sdb)
  • sdb não está sendo usado
  • estou tentando fazer a transição de tudo para um espelho raid1
  • partições ativas atuais:
    • sda1 - boot
    • sda2 - troca
    • sda3 - root (montado em "/")

Não tenho certeza se é possível fazer um sistema raid1 completo que possa ser inicializado em qualquer uma das unidades, já que não tenho acesso ao kvm (só posso dizer a eles para me ajudar a sair de um congestionamento via troubleticket)

Feito até agora:

  • Criadas partições em sdb para corresponder sda
  • Criado novo array raid1 (com 1 disco)
  • / dev / md3 consiste em 1 disco: / dev / sdb3
  • mount / dev / md3 / mnt / md3
  • cp -ax / mnt / md3
  • Agora, tenho cópias de dados correspondentes em / e / dev / md3

Posso apenas editar o GRUB2 para fazer / dev / md3 a raiz, e tudo deve ficar bem, certo?

Eu preciso ter certeza absoluta, já que não tenho acesso ao kvm. Eu olhei para /boot/grub/grub.cfg e vejo esta entrada:

menuentry 'Ubuntu, with Linux 2.6.32-28-generic-pae' --class ubuntu --class gnu-linux --class gnu --class os {
    recordfail
    insmod ext2
    set root='(hd0,1)'
    search --no-floppy --fs-uuid --set 18de6bbd-e46d-4f89-a2c9-fa2e7fa718b7
    linux   /vmlinuz-2.6.32-28-generic-pae root=/dev/sda3 ro   
    initrd  /initrd.img-2.6.32-28-generic-pae
}

Portanto, observe a parte " root = / dev / sda3 ". Posso apenas substituir isso com "root = / dev / md3", então reinicie ??

    
por timh 25.05.2012 / 21:31

2 respostas

1

Assumindo que o sistema de arquivos está diretamente em / dev / md3 (e você não está particionando-o ou usando o LVM), sim, configurar root=/dev/md3 é o que você deseja. Coisas que você deve verificar:

  1. Reconstrua o initrd e verifique se ele contém suporte a RAID (talvez seja necessário persuadi-lo, pois a raiz atual não está no RAID, adicionando raid1 a /etc/initramfs-tools/modules ).
  2. Certifique-se de que a inicialização a partir de um array degradado [0] esteja habilitada (o Ubuntu desabilita isso por padrão: set BOOT_DEGRADED=true in /etc/initramfs-tools/conf.d/mdadm )
  3. Duplique a entrada do GRUB e defina uma entrada fallback no GRUB para que ela ( esperançosamente) inicializa o disco não-RAID se o disco RAID falhar ao inicializar (adicione uma linha set fallback="2" a /etc/grub.d/40_custom , onde o número é o número da entrada do menu contada a partir de 0).
  4. Possivelmente também use grub-set-default --once em vez de definir o padrão explicitamente para que a reinicialização da máquina seja suficiente para inicializar o não -RAID disco.

[0]: seu array pode não estar degradado, mas você provavelmente quer isso de qualquer maneira.

    
por 25.05.2012 / 23:20
1
Infelizmente, seguir o conselho do mgorvens provavelmente levará a um sistema não inicializável, os dispositivos em / dev podem não corresponder ao seu ambiente de inicialização atual, além do qual você deve configurar root para o UUID do seu disco RAID, NÃO entrada dev. Felizmente, apesar de o grub lidar com tudo isso para você automaticamente, faça o seguinte:

sh -c /etc/grub.d/30_os-prober

Supondo que você veja uma entrada de menu contendo seu dispositivo de ataque, atualize o grub2 fazendo:

grub2-mkconfig > /boot/grub2/grub.cfg

Isto irá atualizar o seu menu de inicialização do grub da maneira certa, você não quer editar o arquivo grub.cfg manualmente de qualquer maneira, já que ele provavelmente será sobrescrito quando o grub for atualizado.

    
por 25.09.2012 / 20:28