有没有办法在另一个分区上虚拟化 Linux 安装?

有没有办法在另一个分区上虚拟化 Linux 安装?

基本思想是这样的:运行另一个 Linux 安装,就像在 VirturalBox 或 VM ware 中一样。

使用“chroot”,我可以做类似的事情。例如,我可以挂载安装 Arch Linux 的分区,然后 chroot 到该分区。然后我可以执行一些命令。

但是也有很多限制,比如“pacman -Syu”就不能正常工作(可能我理解错了)。

有没有更好的方法来完成类似的工作?

答案1

为了使 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 容器(也没有自己的内核),一个是实际虚拟机

两者都可以通过 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 客户机,可能有一种比绑定控制台获取 shell 更简单的方法,但我还没有尝试过。不过,有使用 libvirt 和 lxc 的教程。


  1. 如果您不知道的话,一个域就是一台虚拟机。
  2. 嗯,你可以,但你真的不应该。当然,你可以通过 sshfs 将其挂载到客户机上。

相关内容