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

30

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 sobre o que quero fazer (por exemplo, chroot'int na minha nova raiz apenas confunde todos os scripts).

Background Estou executando o Debian Squeeze em um NAS de baixa potência sem cabeça. Minha configuração atual está /ligada sda0e /bootativada sde0(um cartão CF): eu precisava do separado /bootporque sd[a-d]precisava fazer uma rotação atrasada. Agora eu encontrei um disco IDE antigo de 2,5 "para usar como /incluso /bootpara permitir que eu gire todos os grandes discos.

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. Em seguida, fiz uma tentativa tímida de configurar /mnt/newroot/grub/grub.cfga imagem do kernel sdf5, seguida de a grub-install --root-directory=/mnt/newroot /dev/sdf. Mas isso me deu um prompt de resgate quando tentei inicializar sdf.

Meu plano de backup é apenas reinstalar, então uma pergunta bônus (sem marcas de seleção para este): O que devo fazer para obter minha configuração de lvm2 e mdadm? Tudo está armazenado nos sistemas de arquivos (e será descoberto automaticamente) ou eu mesmo preciso retirá-lo?

Solução (graças a Maciej Piechotka): Como Maciej aponta, eu preciso de um chroot adequado para que todas as ferramentas do grub funcionem. 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 uma discussão sobre estratégias de cópia). Corrija o novo etc/fstabpara apontar para uma 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

Finalmente, montar dev, syse procpara a 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 .

Agora estamos chrootados para a raiz futura exatamente como ela será. De acordo com Maciej, não há problema em apenas ligar grub-install, mas fiz o update-grubprimeiro para dar uma olhada no gerado /boot/grub/grub.cfgantes de instalar o gerenciador de inicialização. Não tenho certeza de que será atualizado automaticamente?

root@nasguld:/# update-grub
root@nasguld:/# grub-install /dev/sdb
Janus
fonte
Publique o conteúdo /etc/default/grube a transcrição exata de update-grub.
Gilles 'SO- stop be evil'
(pensamentos após adicionar a solução): Na verdade, pode ser que o problema não tenha sido atualizado /etc/fstabno chroot(isso seria consistente com a update-grubreclamação de que "\ não está montado"). Se eu fizesse isso novamente, tentaria primeiro sem me preocupar em montar os sistemas de arquivos especiais no chroot.
Janus
apenas uma observação: não esqueça de desmontar / mnt / newroot antes de reiniciar!
Giacomo Tesio
Aqui estão as instruções sobre como mover sua partição raiz / para a nova unidade nvme, mantendo o / home no disco rígido. lucasmanual.com/blog/…
Lucas

Respostas:

20

Monte sistemas de arquivos básicos e copie / modifique arquivos enquanto faz chroot como:

  • / 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 em arco e várias vezes no Gentoo. Depois do chroot to /path/to/chrootcommand era simplesmente:

grub-install /dev/<boot_disk>

A partir do lvm2 (e eu acredito em madm, mas ainda não o usei), a configuração é armazenada em disco. Há uma 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 deve haver problema.


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

  • Esqueceu de mudar /etc/fstab e outros arquivos úteis
  • Arquivos alterados durante o acesso
  • Lidar com o lixo ( /tmpetc.)
Maciej Piechotka
fonte
Obrigado. Então, basicamente, você está dizendo que eu faço um chroot desleixado :) Vou tentar com um chroot adequado. cp -axdeve estar bem (talvez depois de cair para o nível de execução de usuário único) de acordo com este velho COMO: tldp.org/HOWTO/Hard-Disk-Upgrade/copy.html
Janus
Trabalhou um charme! Muito obrigado pela ajuda.
Janus
11
@ Janus: Eu copiava os dados da distribuição Live para estar do lado seguro. Estou feliz, no entanto, funcionou.
Maciej Piechotka
Eu tinha que fazer update-grubantes install-grub.
Aryeh Leib Taurog
3

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

grub-install /dev/hda --root-directory=/mnt/guest/
jato
fonte
Obrigado. Não sei se isso funcionaria aqui: pelo que entendi, grub-installapenas atualiza os arquivos de imagem grub e grava o MBR: Em particular, grub.cfgnão é atualizado. Como comentei acima, montar os diretórios especiais pode ser um exagero, mas ainda acho que o chroot é o caminho para atualizar grub.cfgde uma maneira simples?
Janus
Sim, isso também não funcionou para mim. Você tem que começar update-gruba trabalhar e aquele não tem --root-directoryou algo assim, não?
Mitar
0

BTW, se você estiver adicionando uma partição (como uma janela) na qual você não deseja que o grub escreva um no setor de inicialização, mas deseja que o grub saiba sobre isso quando o computador inicializar, poderá digitalizar novamente as partições e gerar um novo arquivo grub.cfg usando o comando grub_mkconfig da seguinte maneira em uma sessão do terminal

cd / boot / grub

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

sudo grub_mkconfig -o ./grub.cfg

Agora, quando você inicializar sua partição linux atual (que foi inicializada pelo grub), ela agora saberá sobre a outra partição.

user129087
fonte