Debian / Grub2: Movendo a partição raiz para a nova unidade?

31

Alguém tem uma sugestão de como mover a partição raiz para uma nova unidade e configurar o grub2 para inicializar nessa unidade? Parece que não tenho sorte em instruir o grub-mkconfig o que eu quero fazer (por exemplo, chroot'int em minha nova raiz apenas confunde todos os scripts).

Background Estou executando o Debian Squeeze em um NAS de baixo consumo de energia. Minha configuração atual é / on sda0 e /boot on sde0 (um cartão CF): Eu precisava do /boot separado porque sd[a-d] precisa fazer um aumento atrasado. Agora, encontrei um disco IDE de 2,5 "antigo para usar como / , incluindo /boot , para permitir que eu desative todos os discos grandes.

O que eu tentei Basicamente eu fui

mount -o rw /dev/sdf5 /mnt/newroot
cp -ax / /mnt/newroot
cp -ax /boot /mnt/newroot/boot

Então eu tentei

chroot /mnt/newroot
update-grub

Mas isso falhou com o grub perguntando se o root estava montado. Então, fiz uma tentativa fraca de configurar o /mnt/newroot/grub/grub.cfg para encontrar a imagem do kernel em sdf5 , seguida por um grub-install --root-directory=/mnt/newroot /dev/sdf . Mas isso acabou me levando um prompt de resgate grub quando tentei arrancar a partir de sdf .

Meu plano de backup é apenas reinstalar, portanto, uma pergunta bônus (sem marcas de verificação para este): O que devo fazer para configurar minha configuração de lvm2 e mdadm? Tudo é armazenado nos sistemas de arquivos (e será descoberto automaticamente), ou eu preciso tirar isso sozinho?

Solução (graças a Maciej Piechotka): Como Maciej aponta, eu preciso de um chroot adequado para todas as ferramentas do grub funcionarem. Para referência, é assim que eu fiz:

janus@nasguld:/mnt/newroot$ sudo cp -ax / /mnt/newroot
janus@nasguld:/mnt/newroot$ sudo cp -ax /boot /mnt/newroot

Todos os arquivos agora são copiados (veja aqui para uma discussão das estratégias de cópia). Corrija o novo etc/fstab para apontar para a nova raiz:

janus@nasguld:/mnt/newroot$ diff -u etc/fstab.old  etc/fstab
    -UUID=399b6a6d-c067-4caf-bb3e-85317d66cf46 /     ext3 errors=remount-ro         0 1
    -UUID=b394b614-a977-4860-bbd5-7862d2b7e02a /boot ext3 defaults                  0 2
    +UUID=b9d62595-e95c-45b1-8a46-2c0b37fcf153 /     ext3 noatime,errors=remount-ro 0 1

Por fim, monte dev , sys e proc na nova raiz e chroot:

janus@nasguld:/mnt/newroot$ sudo mount -o bind /dev /mnt/newroot/dev
janus@nasguld:/mnt/newroot$ sudo mount -t proc none  /mnt/newroot/proc
janus@nasguld:/mnt/newroot$ sudo mount -t sysfs none /mnt/newroot/sys
janus@nasguld:/mnt/newroot$ sudo parted /dev/sdb set 5 boot on 
janus@nasguld:/mnt/newroot$ sudo chroot .

Estamos agora fazendo um croquete para a futura raiz exatamente como ela será. De acordo com Maciej, não há problemas em chamar apenas grub-install , mas eu fiz um update-grub primeiro para ver o /boot/grub/grub.cfg gerado antes de instalar o gerenciador de inicialização. Não tenho certeza se será atualizado automaticamente?

root@nasguld:/# update-grub
root@nasguld:/# grub-install /dev/sdb
    
por Janus 01.01.2011 / 16:38

3 respostas

21

Monte sistemas de arquivos básicos e copie / modifique arquivos enquanto executa o chrooting:

  • / dev ( mount -o bind /dev/ /path/to/chroot/dev )
  • / proc ( mount -t proc none /path/to/chroot/proc )
  • / sys ( mount -t sysfs none /path/to/chroot/sys )

IIRC que funcionou para mim enquanto instalava o Grub 2 no arco e várias vezes no Gentoo. Então, depois que o comando chroot to /path/to/chroot foi simplesmente:

grub-install /dev/<boot_disk>

A partir do lvm2 (e acredito no madm mas não usei) a configuração é armazenada em disco. Existe configuração que deve ser lida para descobrir dispositivos. Supondo que seus dispositivos estejam em locais padrão ( /dev/sd* ou /dev/hd* ), não haverá problemas.

PS. Eu não confiaria em simples CPs do sistema live, pois existem vários lugares onde isso pode dar errado:

  • Esqueceu de alterar /etc/fstab e outros arquivos úteis
  • Arquivos alterados durante o acesso
  • Lidando com lixo ( /tmp etc.)
por 02.01.2011 / 01:31
3

você pode instalar o grub a partir da distribuição ao vivo sem executar o chrooting:

grub-install /dev/hda --root-directory=/mnt/guest/
    
por 03.01.2011 / 18:31
0

BTW se você está adicionando uma partição (como uma janela) na qual você não quer que o grub escreva no setor de inicialização, mas você quer que o grub fique sabendo quando o seu computador inicializa, você pode escanear o partições e gerar um novo arquivo grub.cfg usando o comando grub_mkconfig da seguinte forma em uma sessão de terminal

cd /boot/grub

sudo cp grub.cfg ./grub.cfg.old

sudo grub_mkconfig -o ./grub.cfg

Agora, quando você inicializa a sua partição linux atual (que tinha o grub inicializando), ela agora saberá sobre a outra partição.

    
por 16.02.2013 / 22:55

Tags