Podemos trocar a partir de uma instalação do Linux para outra?

5

Eu tenho várias instalações separadas do Linux na minha máquina, e reinicio para o que for apropriado. Eu estou querendo saber se é possível mudar de um para o outro sem uma reinicialização completa, fazendo algo como, digamos, copiar mais fstab com as partições para a nova instalação listada e, em seguida, mount -a .

Obviamente, o kernel não mudaria, mas tudo bem, estou esperando apenas mudar as partições de trabalho. Eu também considero óbvio que isso teria que ser feito a partir da linha de comando sem nada em execução (se é que isso é possível). Ou a ideia é nula e vazia e pura loucura desde o início?

A razão para isto é que eu normalmente experimento com mudanças radicais (como mudar para o kernel 'amd64' no Debian) em uma instalação 'experimental' separada. A reinicialização para iniciá-lo é, naturalmente, muito bem, mas seria legal se eu pudesse pular para essa instalação sem uma reinicialização inteira. Você poderia pensar nisso como apenas mudando a partição raiz em tempo real, mas talvez isso não seja possível.

Sim, é possível, como eu aprendi abaixo. Se você não precisa trocar o próprio kernel use 'chroot'. Se você quiser simular uma reinicialização completa, use 'kexec'.

    
por Ray Andrews 05.10.2014 / 17:45

3 respostas

6

Eu não acho que isso seja possível.

Teoricamente, o que você vai querer fazer é:

  1. Mova o sistema para o nível de execução "único" usando init 1 , em que, teoricamente, você só tem o init e o bash em execução.
  2. Desmonte todas as partições, exceto /. Neste ponto, seu sistema pode parar de funcionar, dependendo se o / usr está na partição raiz.
  3. Monte a raiz do seu outro sistema em algum lugar.
  4. pivot_root para alterar a raiz para a nova partição.
  5. Informe ao init para iniciar o novo sistema executando init 5 (ou 2 ou o que for apropriado).

O problema é que o pivot_root apenas altera a partição raiz para o processo atual, o que significa que ele não afetará o init e quando você informar ao init para iniciar o sistema, ele iniciará o antigo. Você precisaria de uma maneira 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) sob o kernel e isso é realmente desnecessário.

    
por 05.10.2014 / 18:49
1

Se você quiser experimentar kernels diferentes, terá que reinicializá-los ou executá-los em uma máquina virtual. As máquinas virtuais são mais convenientes, mas você não pode testar o kernel em seu hardware real.

Se você quiser configurações diferentes com conjuntos diferentes de programas instalados, também poderá usar uma máquina virtual. Se você quiser evitar a sobrecarga de uma máquina virtual, você pode instalar uma distribuição em um chroot . Costumo fazer isso para ter acesso fácil a programas de 32 bits em uma instalação de 64 bits, ou para ter as coisas mais recentes (como a Debian instável), além de um relase estável (como o Debian estável). Eu escrevi um guia para configurar um chroot para versões Debian / Ubuntu alternativas . Veja também Ambiente linux isolado e leve

    
por 06.10.2014 / 00:10
1

Se você não quiser / precisa alterar os kernels, mas apenas quer usar os outros sistemas de arquivos, como você parece indicar aqui:

Obviously, the kernel would not change, but that's OK, I'm hoping to just change the working partitions.

Então talvez você só precise (montar e) chroot, que, para usar suas palavras,

You could think of this as just changing the root partition on the fly

Eu uso o chroot o tempo todo a partir de sistemas de recuperação (como o clonezilla) para interagir com um sistema de arquivos que normalmente seria usado como um kernel diferente. Eu não espero poder fazer coisas como carregar novos módulos do kernel, mas é bom para ler e escrever arquivos (consertando o fstab, ajustando o grub.conf, etc.).

Você pode usar montagens de ligação para tornar o ambiente chroot mais útil. Eu uso isso o tempo todo para replicar sistemas de arquivos montados dentro de um alvo chroot:

mount /dev/sda1 /mnt
for d in dev sys proc; do mount -obind /$d /mnt/$d; done
chroot /mnt
    
por 06.10.2014 / 03:31

Tags