
Tenho várias instalações separadas do Linux em minha máquina e reinicio a que for apropriada. Estou me perguntando se é possível mudar de um para outro sem uma reinicialização completa, fazendo algo como, digamos, copiar o fstab com as partições para a nova instalação listadas e depois mount -a
.
Obviamente, o kernel não mudaria, mas tudo bem, espero apenas mudar as partições de trabalho. Também considero óbvio que isso teria que ser feito na linha de comando sem nada em execução (se isso for possível). Ou a ideia é nula e sem efeito e pura loucura desde o início?
A razão para isso é que normalmente experimento mudanças radicais (como mudar para o kernel 'amd64' no Debian) em uma instalação 'experimental' separada. Reiniciar para iniciá-lo é claro, mas seria legal se eu pudesse pular para essa instalação sem uma reinicialização completa. Você poderia pensar nisso como apenas alterar a partição raiz em tempo real, mas talvez isso não seja possível.
Sim, é possível, como aprendo abaixo. Se você não precisar trocar o kernel, use 'chroot'. Se você quiser simular uma reinicialização completa, use 'kexec'.
Responder1
Eu não acho que isso seja possível.
Teoricamente, o que você deseja fazer é:
- Mova o sistema para o nível de execução "único" usando
init 1
, onde teoricamente você só tem init e bash em execução. - Desmonte todas as partições, exceto / . neste ponto seu sistema pode parar de funcionar, dependendo se /usr está na partição raiz.
- Monte a raiz do seu outro sistema operacional em algum lugar.
- pivot_root para alterar a raiz para a nova partição.
- Diga ao init para iniciar o novo sistema executando
init 5
(ou 2 ou o que for apropriado).
O problema é que pivot_root apenas altera a partição raiz do processo atual, o que significa que não afetará o init e quando você solicitar ao init para iniciar o sistema, ele iniciará o antigo. Você precisaria de alguma forma de dizer ao init para fazer o pivot_root, o que não acho possível.
Ah, e não vamos entrar no que acontece quando seu outro sistema operacional usa um serviço init diferente (por exemplo, o Fedora usa o systemd enquanto o Ubuntu tem o upstart). Você precisaria substituir o processo init (pid 1) no kernel e isso é realmente impossível.
Responder2
Se quiser experimentar diferentes kernels, você terá que reinicializá-los ou executá-los em uma máquina virtual. Máquinas virtuais são mais convenientes, mas você não pode testar o kernel em seu hardware real.
Se quiser ter configurações diferentes com conjuntos diferentes de programas instalados, você também pode usar uma máquina virtual. Se quiser evitar a sobrecarga de uma máquina virtual, você pode instalar uma distribuição em umchroot. Costumo fazer isso para ter acesso fácil a programas de 32 bits em uma instalação de 64 bits ou para ter o material mais recente (como o Debian instável), além de uma versão estável (como o Debian estável). Eu escrevi umguia para configurar um chroot para versões alternativas do Debian/Ubuntu. Veja tambémAmbiente Linux leve e isolado
Responder3
Se vocênãodeseja/precisa alterar os kernels, mas deseja apenas usar o(s) outro(s) sistema(s) de arquivos, como você parece indicar aqui:
Obviamente, o kernel não mudaria, mas tudo bem, espero apenas mudar as partições de trabalho.
Então talvez você só precise de (mount e) chroot, que, para usar suas palavras,
Você poderia pensar nisso como apenas alterar a partição raiz em tempo real
Eu uso chroot o tempo todo em sistemas de resgate (como o clonezilla) para interagir com um sistema de arquivos que normalmente seria usado em um kernel diferente. Não espero poder fazer coisas como carregar novos módulos do kernel, mas é bom para ler e gravar arquivos (consertar fstab, ajustar grub.conf, etc.).
Você pode usar montagens vinculadas para tornar o ambiente chroot mais útil. Eu uso isso o tempo todo para replicar sistemas de arquivos montados dentro de um destino chroot:
mount /dev/sda1 /mnt
for d in dev sys proc; do mount -obind /$d /mnt/$d; done
chroot /mnt