Existe alguma maneira de virtualizar uma instalação do Linux em outra partição?

1

A ideia básica é a seguinte: executar outra instalação do Linux como se estivesse no VirturalBox ou no VMware.

Com o "chroot", posso fazer algo semelhante. Por exemplo, posso montar a partição em que o Arch Linux foi instalado e fazer o chroot para ela. Eu então posso executar alguns comandos.

Mas também há muitas restrições. Por exemplo, "pacman -Syu" não pode funcionar corretamente (talvez eu consiga algo errado).

Existe alguma maneira melhor de fazer o mesmo trabalho?

    
por Lagrange 12.02.2014 / 07:12

1 resposta

2

Para que o chroot funcione, você também precisa ligar os sistemas de arquivos dos kernels, como procfs, sysfs e / dev.

Para fazer isso, você normalmente executa antes do chrooting:

cd /path/to/chroot/destination
mount -o bind /proc proc
mount -o bind /sys sys
mount -o bind /dev dev

E só então você faz o chroot em /path/to/chroot/destination .

No entanto, isso não é equivalente a executar o Linux em uma VM, porque ele não possui seu próprio kernel. Há mais duas camadas de isolamento que você pode usar, uma é Contêineres LXC (também sem seu próprio kernel) e uma é uma VM real .

Ambos podem ser gerenciados pelo libvirt, e eu sugiro que você dê uma olhada no libvirt para esse propósito, com o driver do qemu e o driver lxc .

Com o libvirt, você também pode montar sistemas de arquivos host como sistemas de arquivos guest (veja a configuração do domínio ¹). No entanto, em geral, pode ser mais sensato apenas entregar a partição inteira para libvirt e deixar que ela faça o resto. Isso tem a restrição de que você não pode acessar os arquivos diretamente do sistema host enquanto a VM estiver em execução².

Uma configuração de exemplo simples seria:

<domain type='qemu'> <!-- if you have kvm, put kvm here instead of qemu -->
  <name>my_fancy_vm</name>
  <memory unit='KiB'>524288</memory>
  <vcpu placement='static'>1</vcpu>
  <features>
    <acpi/>
    <apic/>
  </features>
  <os>
    <type arch='x86_64' machine='pc-i440fx-1.6'>hvm</type>
    <boot dev='cdrom' />
    <boot dev='hd' />
  </os>
  <cpu mode='custom'>
    <model>kvm64</model>
  </cpu>
  <pm>
    <suspend-to-mem enabled='no' />
    <suspend-to-disk enabled='no' />
  </pm>
  <devices>
    <!-- for kvm, you have to put /usr/bin/qemu-kvm here -->
    <emulator>/usr/bin/qemu-system-x86_64</emulator>
    <!-- to directly use a filesystem here, please see the documentation -->
    <disk type='block' device='disk'>
      <driver name='qemu' type='raw' />
      <target dev='vda' bus='virtio' />
      <source dev='/dev/partition_used_by_the_other_linux' />
    </disk>
    <serial type='pty'>
      <target port='0' />
    </serial>
    <console type='pty'>
      <target type='serial' port='0' />
    </console>
  </devices>
  <seclabel type='none' />
</domain>

Se você tiver várias partições para usar, crie várias delas duplicando a seção disk . Para mais detalhes, consulte a documentação no formato XML do domínio . Ele também contém informações sobre como configurar a rede.

Depois de configurar o domínio, você pode defini-lo no libvirt com:

virsh define path/to/domain.xml

E comece com:

virsh start my_fancy_vm  # that is the name chosen in the xml

Para se conectar ao console serial falso definido no xml, você pode usar:

virsh console my_fancy_vm

Note que nada pode aparecer - você pode ter que configurar o seu archlinux para usá-lo. Para convidados lxc, pode haver uma maneira mais fácil do que ligar um console para obter um shell, mas eu não tentei. Existem tutoriais para usar o libvirt com o lxc.

  1. Um domínio é uma máquina virtual, caso você não saiba.
  2. Bem, você pode, mas você realmente não deveria. Você pode, claro, montá-lo via sshfs para o hóspede.
por 12.02.2014 / 08:25