如何在VirtualBox VM中使用安装了Windows 7的真实分区?


37

我的Ubuntu 12.04已安装/dev/sda5 ,Windows 7 已安装/dev/sda1。当我运行Ubuntu时,我想使用Virtualbox在VM中运行Windows 7。Windows 7分区为1 TB,一半已满,即很大,所以我不想将其复制到虚拟硬盘中。

我已经读到可以为Virtualbox VM使用真正的硬盘,但是我发现的各种说明彼此不同,而且似乎无法使它正常工作。有谁知道一种使其在Ubuntu 12.04和Virtualbox 2.1.12_Ubuntu r77245(最新的Ubuntu安装该存储库)中工作的方法?

请发布它的工作方式,因为我想重试任何可能有效的方法。


为什么您的MSWIN分区为1TiB?虽然不是一个完整的解决方案:如果可能,将不需要的所有内容移到那里(数据...媒体文件?),然后重新调整分区的大小,这将使任何方法都更加容易。如果要走映像路线,先清除然后缩小该分区,将为您留下足够的空间来制作较小的新分区的完整映像。:-)
Alastair 2014年

Answers:


27

您想要的命令是

VBoxManage internalcommands createrawvmdk -filename Win7.vmdk -rawdisk /dev/sda -partitions 1

这将创建一个特殊的VMDK虚拟磁盘文件(Win7.vmdk),该文件实际上是指向主机磁盘分区的指针/dev/sda1

从理论上讲,您可以将其用作虚拟机的磁盘文件,以直接从实际磁盘分区运行,但是...

  • (a)我从未尝试过,所以不知道它的可靠性
  • (b)根据您的许可证密钥以及Windows是否确定检测到的“硬件”已发生重大变化,您可能会遇到Windows激活问题

谢谢。我什至没有想到激活问题。那肯定会阻止我的计划。
爵士

1
此外,即使它起作用(我对此表示怀疑),从引导和VM运行时,也可能会严重损坏Windows。
塔卡特2012年

@ ubnewbie2:我可能只会将其作为实验和/或使用某种批量许可密钥进行尝试,并且可能会将其视为单向操作;也就是说,您在尝试逆转它时会遇到更多困难。我实际上运行Windows 7并在Ubuntu上经常使用VirtualBox VM,并且通常在全屏模式下使用,因此PC似乎仅在运行Linux,并且更有信心在原始磁盘分区上运行Ubuntu。
StarNamer 2012年

仅供参考,我现在已经尝试过了,相反。我需要将一台运行Ubuntu的计算机更改为Win 7,因此通过调整分区大小并创建一个新磁盘并安装Win 7释放了一些空间。这将grub2替换为Windows Bootloader,因此我安装了VirtualBox并创建了一个新的VM,最小的虚拟磁盘可用于预订,然后使用现有的“原始”分区运行。它工作正常,尽管由于内存减少而有点呆板,并且只能看到1个CPU内核(而不是4个)。
StarNamer 2012年

-partitions最后,您要虚拟框“查看”的分区列表(而不是您要使用的分区#) VBoxManage internalcommands --help将显示您可以使用内部命令执行的其他操作,以及选项的含义。
boatcoder 2013年

16

是的,您可以使用内部createrawvmdk命令来执行此操作,该命令不会创建整个磁盘映像,而是指向实际硬件的指针。

有两种方法可以做到这一点

  • A。(/ dev / sdb的)完整磁盘映像

    sudo VBoxManage internalcommands createrawvmdk -filename sdb.vmdk -rawdisk /dev/sdb
    
  • B.分区图像

    如@StarNamer所示,您只能使用一个或几个分区。

    要仅创建一个(/ dev / sda1)分区的映像:

    sudo VBoxManage internalcommands createrawvmdk -filename sda1.vmdk -rawdisk /dev/sda -partitions 1
    

    要创建将按此顺序映射/ dev / sda2和/ dev / sda1的自定义分区表:

    sudo VBoxManage internalcommands createrawvmdk -filename sda2_1.vmdk -rawdisk /dev/sda -partitions 2,1
    

最明显的区别是全磁盘映像将完全使用磁盘中的引导加载程序和分区表,因此从理论上讲(我以前仅在qemu中这样做),您将能够从虚拟机设置操作系统。从我有限的经验来看,我可以说完整的磁盘映像将完全一样工作qemu -hda /dev/sdb

注意:如果要使用用户访问磁盘,则需要将其添加到diskvboxusers组中,例如

sudo usermod -aG disk,vboxusers ubuntu

然后确保您重新登录或重新启动计算机。

进一步阅读:


“完整的磁盘映像将完全使用磁盘中的引导程序和分区表” –在哪种情况下,第一个(/ dev / sdb)或第二个(指定了分区)?
naught101

1
另外,virtualbox需要以root身份运行,否则您会得到 Permission problem accessing the file for the medium '/home/naught101/sda2_windows.vmdk'
naught101

3
“此外,virtual-box还需要以root用户身份运行”。实际上不,您需要成为组磁盘的成员。这比以root身份运行virtual-box更为安全。

2
这是将Ubuntu 16.04作为主机系统并将Windows 10作为来宾系统对我有用的方法:我使用创建了.vmdk文件sudo VBoxManage internalcommands createrawvmdk -filename sda1_2_3.vmdk -rawdisk /dev/sda -partitions 1, 2, 3。这样,我包括了Windows分区以及EFI引导加载程序分区。然后,我按照virtualbox.org/ticket/7702上shilka的说明进行操作,并添加了cloverefiboot。奇迹般有效!
dzmanto

您还可以在VirutalBox(和VBoxManage)命令前加上前缀,sudo -g disk以仅授予对virtualbox的访问权限,而不授予所有其他进程的访问权限。
Jan Hudec

0

有一个名为“ Immutable”的“磁盘”选项,因此,从理论上讲,如果为链接到原始磁盘的vmdk选择此选项,则不应更改原始分区。

为此,请打开“文件”下的“虚拟介质管理器”,选择映像,然后单击“修改”(您必须确保此映像未连接到任何计算机,否则会出现错误)。现在,您可以将媒体类型设置为“不可变”。

我还没有测试过。如果有人这样做(当然要进行测试设置),最好在这里报告。

有谁考虑反对这个想法?


0

几年来,我一直在运行Windows和Ubuntu双引导系统,Ubuntu分区也引导到Windows VirtualBox中,以利用Linux尚未掌握的触摸屏功能。

我用类似于下面的说明进行设置;

与旧计算机上的单个系统相比,新计算机可以同时更好地处理两个操作系统。

缺点:如果更新禁用了VirtualBox连接(我当前的问题),则需要保存用于设置的说明。


0

经过多次尝试,我最终得到了一个干净整洁的解决方案:

  1. 引导您要虚拟化的Windows分区
  2. 从Sysinternals 下载Disk2VHD实用程序
  3. 如果您有UEFI分区,请按照以下说明进行操作
  4. 创建C:分区,恢复,UEFI(如果有)以及您需要的其他任何内容的VHD(不是VHD X)映像
  5. 回到Linux,打开VirtualBox并根据Windows操作系统规范创建一个VM。
  6. 将在第4点创建的VHD磁盘连接到该VM
  7. 而已
  8. 利润

UEFI情况下的故障排除:

  1. 在VM设置的VirtualBox中,选中“系统”选项卡下的“启用EFI”选项
  2. 如果卡在EFI Shell上,请运行以下命令:

    fs0:\EFI\Boot\bkpbootx64.efi
    

关于下降投票有何评论?
加里克斯

我看到几天前就发生了这种情况,但我不记得给过你减票了,至少不是故意的。我很乐意投票,对不起。
userfuser

0

VirtualBox有很多缺点。我几年前离开了。现在,我使用qemu-kvm,除其他优良功能外,还可以将其配置为以与磁盘映像相同的方式使用磁盘设备。诀窍是配置虚拟的“ -drive if = sd,id = sda,format = raw,file = / dev / sda”。

但!您必须先在裸机上运行MSW时进行一些更改,然后再尝试对其进行虚拟化:在“ Drivers”文件夹中找到适当的驱动程序,并在“ Registry”树中启用并设置这些驱动程序。在系统启动之前运行,例如:

[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\msahci] "Start"=dword:00000000

如果您不想看到BSOD,则必须针对虚拟机寻找合适的驱动程序。

很难说激活哪些驱动程序。最好的方法是先安装一个测试系统,然后在其中注册以“ Start” = dword:00000000作为注册密钥的密钥,然后在裸机上设置这些密钥。还建议检查裸机上的MAC地址以将其置于qemu配置中。您可以防止系统要求重新激活。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.