Чтобы chroot работал, вам также необходимо привязать файловые системы ядра, такие как procfs, sysfs и /dev.
Для этого вы обычно выполняете перед chrooting:
cd /path/to/chroot/destination
mount -o bind /proc proc
mount -o bind /sys sys
mount -o bind /dev dev
И только тогда вы делаете chroot в /path/to/chroot/destination
.
Однако это не эквивалентно запуску linux под виртуальной машиной, поскольку у него нет собственного ядра. Вы можете использовать еще два уровня изоляции, один из них - LXC Containers (также без собственного ядра), а второй - настоящая виртуальная машина.
Оба могут управляться libvirt, и я предлагаю вам взглянуть на libvirt для этой цели, с драйвером qemu и драйвером lxc.
С помощью libvirt вы также можете монтировать файловые системы хоста в качестве гостевых файловых систем (см. Конфигурацию домена ¹). Тем не менее, в целом может быть разумнее просто передать весь раздел libvirt и позволить ему сделать все остальное. Это имеет ограничение, согласно которому вы не можете получить доступ к файлам напрямую из хост-системы во время работы виртуальной машины².
Простой пример конфигурации:
<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>
Если вам нужно использовать несколько разделов, создайте несколько разделов, дублируя раздел disk
. Для более подробной информации смотрите документацию по формату домена XML . Он также содержит информацию о том, как настроить сеть.
После настройки домена вы можете определить его в libvirt с помощью:
virsh define path/to/domain.xml
И начать это с:
virsh start my_fancy_vm # that is the name chosen in the xml
Чтобы подключиться к поддельной последовательной консоли, определенной в xml, вы можете использовать:
virsh console my_fancy_vm
Обратите внимание, что ничего не может появиться - возможно, вам придется настроить свой archlinux для его использования. Для гостей lxc может быть более простой способ, чем привязка консоли для получения оболочки, но я не пробовал. Хотя есть руководства по использованию libvirt с lxc.
- Один домен - это одна виртуальная машина, если вы не знаете.
- Ну, вы можете, но вы действительно, действительно не должны. Конечно, вы можете смонтировать его через sshfs для гостя.