这个问题比较理论化:
假设我有一台 PC,在两个不同的分区上有两个不同的操作系统:OS1 在 sda1 上,OS2 在 sda2 上。是否可以在 OS1 中设置一个类似 VMWare 或 Virtualbox 的程序,该程序访问 sda2、启动它并运行 OS2?另一方面,OS2 也应该可以直接启动。
我意识到模拟的 OS2 会慢得多,而且可能没有人会真正使用这种设置,但我发现这非常有趣。
答案1
它是可能的是的,而且它不一定要慢下来,因为现在它不是仿真不再是虚拟化– 大多数 CPU 都支持硬件辅助虚拟化(VT-x 等),但即使没有这些,VirtualBox 也有很多技巧可以使软件虚拟化的虚拟机快速运行。
无论如何,它不会比启动普通的旧 VM 慢。它甚至可能更快(因为使用原始分区而不是碎片化的磁盘映像)。
但我不太确定如何在 VirtualBox 中执行此操作 – 我认为您必须创建一个指向vboxmanage
真实分区的特殊 .vdi 文件?另外,我不知道如何让引导加载程序在这种情况下工作。
虽然我曾经通过运行当前的操作系统在其内部使用qemu-system-x86_64 -enable-kvm -hda /dev/sda -snapshot -monitor stdio
。
答案2
qemu
可让您使用诸如/dev/sda2
等块设备作为虚拟硬盘。VMWare 也一样。不确定 Virtualbox 是否支持。
当您在虚拟机中启动时/dev/sda2
,其效果类似于您取出硬盘并将其启动到具有不同硬件的另一台计算机中。如果操作系统可以处理这种变化,那么您应该可以在虚拟机和本机中运行操作系统。当然,Windows 会给您带来问题,而 Linux 可能会很好地容忍它。
您可以通过使虚拟硬件尽可能与系统上的物理硬件匹配来缓解潜在问题 - 当然,您必须指定较少的 RAM。特别重要的是指定相同类型的磁盘控制器(IDE、SCSI 等)。
答案3
这是完全有可能的,事实上我曾经这样做过!
我有一个分区/磁盘(我忘了是哪个了),一个是 Windows 分区/磁盘,另一个是 Linux 分区/磁盘,我想那是在 Windows XP 时代(诚然,它确实持续了一段时间)。这是一种访问两组数据的好方法,无需使用大量磁盘空间进行不同的安装。
我记得遇到的唯一问题是,我需要在 XP 中设置两个不同的硬件配置文件。当它启动到错误的配置文件时,系统就会变得非常混乱。
我不确定当前的激活过程将如何响应硬件切换。这可能会导致一些问题……(但如果您只将 Windows 作为物理机启动,并将 Linux 作为虚拟机/或物理机启动,那么这个问题就可以解决)
我记得我使用 VMware 工作站执行过此操作。它肯定支持从原始磁盘启动。我确定 MS 版本支持。我不太确定 Linux VM 是否支持,但如果不支持,我会感到非常惊讶。
答案4
我做到了。它非常有用,但也有一些限制,而且设置起来并不容易。
本机或虚拟机操作系统必须对运行的硬件具有宽容性。大多数 Linux 发行版并不关心这些,只要 CPU 架构匹配,它们就可以在任何启动它们的设备上运行。Windows 就没那么顺畅了。您还可能遇到激活/许可问题。
在 Windows 上,当操作系统的分区安装在主机上时,您无法在虚拟机中启动操作系统。这没什么大不了的,因为在这种情况下,您可能想在 Windows 中启动 Linux,而 Windows
ext
无论如何都不支持文件系统。设置引导加载程序很棘手。您需要为在 VM 中引导和本机引导分别设置引导配置。我在本机引导时使用 Grub4DOS/NeoGrub 作为第一阶段引导加载程序,然后我能够链式加载 Windows 引导加载程序或引导到 Ubuntu。VM 安装了一个小的(几 MB)驱动器,其优先级高于主驱动器。该驱动器包含手动安装的 GRUB2,我使用它在 VM 内引导 Ubuntu。
不寻常的引导加载程序设置需要仔细更新。例如,在本机运行 Linux 时更新 GRUB 可能会破坏您的引导加载程序链。在 VM 内部更新需要手动将其安装到引导分区。