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.
- Um domínio é uma máquina virtual, caso você não saiba.
- Bem, você pode, mas você realmente não deveria. Você pode, claro, montá-lo via sshfs para o hóspede.