Tenho uma caixa virtual em execução com CentOS.

Anexei um novo disco virtual à VM CentOS existente e estou agora tentando instalar o GRUB neste disco recém-anexado.

Posteriormente, apresentarei uma segunda VM com um disco rígido inicializável recém-preparado com um sistema de arquivos raiz personalizado e kernel.

I tentei as seguintes etapas:

  • Anexe um novo disco virtual à máquina CentOS existente em funcionamento.
  • Criou uma nova partição com fdisk /dev/sdb. Durante o particionamento, escolhi as opções partição primária, partição número 1 e outras opções padrão.
  • Formatei o disco com mkfs.ext3 /dev/sdb1.
  • Montado o disco em /media/new_drive.
  • GRUB instalado grub-install /dev/sdb1 --root-directory=/media/new_drive/.

Depois disso, a segunda VM com o disco rígido recém-preparado não inicializou; Recebi o erro: could not read from the boot medium. Parece que o MBR não é atualizado após grub-install, mas posso ver o GRUB instalado em /boot/grub na nova unidade.

Mas o pior é que ele corrompeu meu CentOS GRUB existente: o CentOS VM trava mostrando uma tela preta com o único texto sendo GRUB.

Por que grub-install /dev/sdb1 não modifica o MBR de sdb1? Esta não é a maneira certa de instalar o GRUB na nova unidade?

Comentários

  • /dev/sdb1 não é onde o BIOS procura MBR, ele ‘ está em /dev/sdb, ou seja, no primeiro setor do disco.
  • quer dizer que devo usar grub-install /dev/sdb --root-directory=/media/new_drive/ em vez de sdb1
  • sim, é exatamente isso que @wurtel significa
  • Sim. Supondo que você ‘ colocou um sistema de arquivos raiz adequado nesse local (não ‘ não vejo essa etapa mencionada entre a montagem e a execução do grub -instalar).
  • Vou tentar com / dev / sdb, sim, não ‘ t alcance até colocar o sistema de arquivos raiz, pensei em primeiro tentar mostrar tela do grub.

Resposta

Não sou um especialista em grub2 (desculpe), mas tente adicionar --skip-fs-probe para sua linha grub-install, descobri que isso impede a criação de /boot/grub/device.map que pode causar a inicialização em um prompt do grub. Acho que sem isso parâmetro grub-install, em vez de fazer o que você diz, pensa que é mais inteligente do que você e pode fazer algo diferente.

Outra coisa é ter certeza de que você está usando o grub-install correto (ou seja, para grub2 e não para o grub original). Não é um problema se você estiver dentro do Centos, mas com SystemRecoveryCD as duas versões estão disponíveis e então você deve usar grub2-install. Aprendi da maneira mais difícil …

E como @wurtel apontou (parabéns), você deve especificar uma unidade, não uma partição. O Grub2 é instalado no setor 0 de toda a unidade de disco, e este “stub” é o que é executado no momento da inicialização, mas ele precisa saber a localização no disco e deve instalar os arquivos para o próximo estágio de inicialização – é isso que o --root-directory parâmetro é para. (Eu acho.)

Lendo man grub-install e pesquisando no Google, vejo que --root-directory não deve ser usado para grub2 versões 1.99 ++, embora funcione na minha experiência. Você deve usar --boot-directory e referir-se ao diretório de inicialização real, então isso lhe daria:

grub-install /dev/sdb --skip-fs-probe --boot-directory=/media/new_drive/boot 

Comentários

  • Minha primeira tentativa foi sem particionar e formatar grub-install /dev/sdb, mas deu um erro. Mais tarde, tentei com disco particionado e formatado, com disco formatado que sempre estava usando / dev / sdb1, vou tentar junto com –skip-fs-probe
  • @Renjith oh e o diretório raiz deve se referir a o ponto de montagem montado quando você executa grub-install, então você precisa montar a partição no novo drive, por exemplo em /mnt/sys2 e, em seguida, em sua linha grub-install, especifique --root-directory=/mnt/sys2. É ‘ é contra-intuitivo (como muitas coisas grub, eu acho), mas ‘ é como funciona.
  • editei minha resposta um pouco …
  • O grub agora estou usando 0,97, que não ‘ suporta –skip-fs-probe . mas sem isso funcionou. sdb1 foi o erro.
  • ok, fico feliz por você ter resolvido, esse é um grub antigo, não o mais novo ‘ brilhante ‘ grub2. Eu não ‘ não percebi que RedHat era tão lento para mudar para grub2. CentOS 7 usa grub2, mas CentOS 6 (e anteriores) usa grub.

Resposta

Foi assim que movi uma instalação Debian que consistia em uma partição de boot /boot e uma partição raiz / para uma nova unidade e a tornou inicializável usando o GNU GRUB :

Clonar partições

  • Usando o CD ao vivo GParted , crie a partição de inicialização e raiz no novo .
  • Usando um console raiz no GParted, monte a partição de inicialização antiga (digamos “s /dev/sda1) e a nova partição (/dev/sdb1): mount /dev/sda1 /mnt/oldBoot && mount /dev/sdb1 /mnt/newBoot
  • Copie os dados da partição de inicialização antiga para a nova: cp -afv /mnt/oldBoot /mnt/newBoot. Explicação de cp -afv:
    • a significa ” arquivo ” que significa:
      • não desreferencie links
      • copie recursivamente (como -R)
      • preservar todos os atributos (carimbo de data / hora, proprietário, permissão)
    • f: force, se um arquivo de destino existente não pode ser aberto, remova-o e tente novamente
    • v: detalhado, explique o que está sendo feito
  • Isso irá gerar alguma saída em seu console, mostrando qual arquivo está copiado atualmente e se cp faz progresso
  • Monte e copie os arquivos de sua partição raiz antiga para a nova:
    • Por segurança: umount /mnt/oldBoot && umount /mnt/newBoot
    • Monte a partição raiz antiga e a nova (assumindo que “s /dev/sda2 e /dev/sdb2): mount /dev/sda2 /mnt/oldRoot && mount /dev/sdb2 /mnt/newRoot
    • Copie o dat uma da partição raiz antiga para a nova partição raiz: cp -afv /mnt/oldRoot /mnt/newRoot
  • Edite o tabela do sistema de arquivos que define quais partições são montadas na inicialização (vou usar o Vim para isso):
    • vi /etc/fstab

    • Você notará que suas partições antigas são referenciadas aqui. Em vez disso, use os UUIDs das novas partições

    • Você pode inserir temporariamente todos os UUIDs no fstab para copiar e colar mais facilmente com :r !blkid

    • Use os UUIDs de suas novas partições para alterar as entradas no fstab. Eles devem se parecer com isto:

       `# <file system> <mount point> <type> <options> <dump> <pass> # Root partition UUID=76fd1ffd-fb96-4ab4-be1a-42f8e9223983 / ext4 errors=remount-ro 0 1 # Boot partition UUID=e560e29e-8752-4b83-b1ee-4b86c0009f0b /boot ext2 defaults 0 2` 
      • Remova a saída de blkid do fstab que você inseriu anteriormente com :r !blkid

Instalar GRUB

  • Monte os sistemas de arquivos virtuais do live CD do GParted:

    mount --bind /dev /mnt/newRoot/dev mount --bind /proc /mnt/newRoot/proc mount --bind /sys /mnt/newRoot/sys

  • Make os utilitários GRUB do live CD GParted disponíveis para a partição raiz: mount --bind /usr/ /mnt/newRoot/usr

  • Monte a partição de inicialização na partição raiz desde o GRUB armazenará sua configuração em /boot: mount /dev/sdb1 /mnt/newRoot/boot

  • Use chroot /mnt/newRoot para tornar a nova partição raiz temporariamente a raiz do sistema de arquivos

  • Crie um arquivo de configuração GRUB em /boot/grub/grub.cfg usando update-grub2

  • Instale o GRUB na nova unidade: grub-install /dev/sdb. Você não deve especificar um número de partição aqui

  • Retorne ao sistema de arquivos do live CD GParted: exit

  • Desmonte partições: umount /mnt/newRoot/*

  • Desligue a máquina

  • Se você tiver várias unidades conectadas, certifique-se de que a unidade mais recente venha primeiro na ordem de inicialização

  • Iniciar máquina

Estas instruções são inspiradas nas de oaktreepeak.com .

Como alternativa, você pode fornecer Clonezilla uma tentativa de conseguir o mesmo.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *