1

Основная идея такова: запустить другую установку Linux, как если бы она была в VirturalBox или VMware.

С "chroot" я могу сделать нечто подобное. Например, я могу смонтировать раздел, на котором установлен Arch Linux, и подключиться к нему. Затем я могу выполнить несколько команд.

Но есть и много ограничений. Например, «pacman -Syu» не может работать должным образом (может быть, я что-то не так).

Есть ли лучший способ сделать подобную работу?

1 ответ1

2

Чтобы 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.


  1. Один домен - это одна виртуальная машина, если вы не знаете.
  2. Ну, вы можете, но вы действительно, действительно не должны. Конечно, вы можете смонтировать его через sshfs для гостя.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .