Pivot root entre duas instalações do Linux

4

Eu tenho duas distribuições Linux instaladas (Debian e Ubuntu). Cada um com seu próprio usr, swap e o que quer que seja. Ambos são completamente independentes, cada um em sua partição.

De acordo com as páginas do manual, eu poderia girar entre elas com:

cd new_root
pivot_root . put_old
exec chroot . command
umount /old-root

É tão fácil assim? Eu poderia quebrar algo fazendo isso (como arquivos sendo copiados ou sobrescritos em qualquer instalação).

Isso vai parar de executar a distribuição A e começar a executar a distribuição B 'como se eu tivesse reinicializado?

Ambas as distribuições possuem kernels diferentes.

    
por Quora Feans 18.01.2014 / 18:49

2 respostas

4

pivot_root é realmente usado no momento da inicialização para pular de um ramdisk para a raiz real. Isso é fácil. Quando você é gerenciado sem nenhum processo acessando o sistema de arquivos raiz antigo, também é possível desmontar sua raiz antiga.

Também não é possível executar mais de um kernel ao mesmo tempo, exceto pelo uso de algumas técnicas de virtualização.

Se você está no Debian e quer rodar alguns programas no Ubuntu e assumir que você tem um kernel que funciona em ambos, então você pode chroot fácil para ele:

mount /dev/vg/ubuntu-root /mnt/ubuntu
cd /mnt/ubuntu
for p in dev proc sys; do mount --bind /$p $p; done
chroot . /bin/bash --login

ou talvez muito mais fácil

kvm -m 900 -vga std -hda /dev/vg/ubuntu-root
    
por 18.01.2014 / 20:21
2

Is that that easy?

Você terá que ter tudo no sistema A desligado, eu acho, ou você não será capaz de umount da raiz antiga.

Você pode usar chroot sozinho sem pivot_root , caso em que ambos os sistemas podem ser acessados ao mesmo tempo, por exemplo, comutando VTs, ou apenas começando a partir de um terminal GUI (isso significa não , também). Eu recomendo que você experimente isso primeiro.

Could I break something doing this

Não é um risco sério, não.

Will this just stop running the distribution A and start running the distribution B 'as if' I had re-booted?

Não como se você tivesse reiniciado, não. Na verdade, eu nunca tentei isso com uma instalação completa de distro, mas acho que um problema será que os serviços usuais do sistema não serão executados. Nothing estará rodando mas sua instância do shell e init. Então, se você quer tornar as coisas normais, você terá que dizer ao init / startstart algo para que ele inicie os serviços. Esta é uma das razões pelas quais o ferramental com apenas chroot será mais fácil até que você tenha tudo planejado, já que se algo ficar estragado, o sistema A ainda estará rodando e você poderá começar de novo ao invés de ter que reinicializar. Também é fácil copiar coisas da perspectiva do sistema A (apenas seja sensível a isso, por exemplo, não substitua arquivos em uso).

Both distributions have different kernels.

Somente o kernel do sistema A será usado. Eu acho que é possível fazer kernels hot swap (qv kexec ), mas essa é uma outra pergunta, e algo que você provavelmente quer evitar, se possível. Não deve ser necessário de qualquer maneira.

No entanto ...

Certifique-se de colocar uma cópia do diretório /lib/modules/x.x.x para o kernel do sistema A no sistema de arquivos raiz do sistema B, ou você não poderá carregar nenhum módulo do kernel!

    
por 18.01.2014 / 20:15