VirtualBox将物理磁盘分区加载为虚拟机磁盘

生成虚拟磁盘文件

首先查看要挂载的磁盘分区:

Linux:

sudo vboxmanage internalcommands listpartitions -rawdisk /dev/sda

Windows:

vboxmanage internalcommands listpartitions -rawdisk \\.\PhysicalDrive0

根据列出的分区信息找到分区编号,然后生成 vmdk 文件,该文件记录了分区信息:

Linux:

sudo vboxmanage internalcommands createrawvmdk -filename /path/to/file.vmdk -rawdisk /dev/sda5 -relative

Windows:

vboxmanage internalcommands createrawvmdk -filename /path/to/file.vmdk -rawdisk \\.\PhysicalDrive0 -partitions 5

上面的命令生成和分区 5 对应的 vmdk。当然,也可以直接制作整个磁盘对应的虚拟磁盘文件。其中:

  • -filename vmdk 文件路径
  • -rawdisk vmdk 文件所对应的物理硬盘
  • [-partitions vmdk文件对应的物理硬盘的分区
  • [-mbr ] ] 将这个文件包含的引导记录写到 vmdk 文件主引导记录
  • [-register] 将这个新创建的硬盘注册到 virtualbox
  • [-relative] 激活这个新创建的硬盘的分区

可以选择访问多个分区:

sudo vboxmanage internalcommands createrawvmdk -filename /path/to/file.vmdk -rawdisk /dev/sda -partitions 1,2,3,4,5,8 -relative

生成的 vmdk 文件可能有两个,文件名较短的那个表示磁盘,长的那个表示分区(xxx-pt.vmdk)。

加载虚拟磁盘文件

在 VirtualBox 中加载磁盘即可。

不过这样需要管理员权限运行 virtualbox 才能注册虚拟磁盘文件,若要用普通用户来执行,需要对相应磁盘或分区添加权限

sudo chmod o+rw /dev/sda5

可能需要每次登录都执行一次。。试试

sudo chmod o+t /dev/sda5

。。不行。。把用户加入到 dialout 组

sudo usermod -a -G dialout 用户名

。。。不行。。

看来只有每次开机执行一下了,改下 profile 或在 /etc/profile.d 中添加一个 sh 脚本来输入命令。。好吧,不允许的操作。。直接修改 /dev/sda5 的所有者。。不行。。

注意不要主机和虚拟机同时访问同一分区的文件(尤其是写操作),可能造成文件系统损坏。。

安装系统

启动虚拟机,win 7 和 win 10 安装盘找到不磁盘。。pe 没问题。。

只能用 bootice 和 grub4dos 硬盘安装了。。

下载 grub4dos,将其中的 grldr 和 menu.lst(可自建)放到 ntfs 分区根目录。

在 menu.lst 文件中写入如下内容:

title Windows Installer
root (hd0)
chainloader /bootmgr

root 定义为 ntfs 分区。其中 x 从 0 开始,y 从 0 开始。

主引导记录用 grub4dos 和 bootmgr 都不行。。Windows boot manager 错误。。

xp 居然可以安装。。。但文件复制完成只要一写引导记录,分区就要格式化了。。改成 fat32 似乎可以了,但还是卡着启动不了。

ghost 版也不行,找不到分区信息。。

deepin 开始可以后来也找不见了。。

使用 /dev/sda -partitions 创建的虚拟磁盘有两个文件,安装的时候居然可以看到所有盘。。只是其他盘的内容看不到。。

不过还是安装不了,表示无法定位现有系统分区。。。

用 ghost 版写成功了。。配合 grub4dos 的 mbr 成功启动。。半天才能进桌面,进去一片灰什么也没有。。打开任务管理器,好像都启动了啊。。安装了虚拟机增强功能有桌面了,但桌面一片黑,图标都打不开。。似乎是正常过程被强制重启打断了。。但不重启没不行,看任务管理中什么安装任务也没运行啊。。

换个 ISO 试试。。看了系统之家的东西不行,需要 win 7 之家(windows7en)的。。显示无法配置此硬件。。。进不去系统。。

原来对虚拟机磁盘的操作会写入到物理硬盘,主引导记录就是这样。。。丢失了。。还好有 livecd 修复。

前面由于是逻辑分区,诸多不变,改成主分区试试。。。终于可以了,win 7,10 可以直接安装,杠杠的。。

这样就实现安装多系统了,虚拟机关机后,在 deepin 终端中执行 sudo update-grub 即可引导已安装的系统。

试试前面的单分区。。不行,Windows 安装程序找不到驱动器。。

扩大一下安装好的分区试试。。前面加了一些空间,结果 bootmgr 出错了。。安装盘修复(修复-取消-自动修复)了下好了。。不过又得重新创建虚拟磁盘文件了。。

挂到某个目录中,这样就不在计算机内置磁盘中显示了。。不过挂 /media 子目录下不行,还会显示。。

切换到物理机运行时,驱动可能没装好,用驱动精灵万能网卡版装了。。

用 PE 中的 diskgenius 无损修改磁盘为 gpt 分区表。。重建虚拟磁盘文件,这次同时包含 esp 分区。

忘了 uefi 情况下 win 7 无法安装了。。。

win 10 装上了,可以引导项总是丢失。。看起来还是从物理环境装再在虚拟机中启动的好。。虚机安装只是应急方案。

win 10 安装后可以

sudo update-grub

提供物理机启动菜单。当然,win10 启动后会自己添加 uefi 启动菜单,最好在 BIOS 或 bootice 中修改下顺序,将它放在 deepin 之后。。

原来 win 10 正常启动被打断时,deepin 就加载为只读文件系统。

用 ghost 版 win 7 试试。。。算了找不到好的 PE 工具,不搞了。。直接把原来的 win7 虚拟机分区复制到物理磁盘上再用 PE 修复 UEFI 引导试试。。。可以了,启动了。。。不过一直卡在启动界面,图标还在动。。

物理机启动成功。。

似乎一切都没问题了,但虚拟机引导项无法添加,总是丢失。对了,可以添加两块磁盘,一块用虚拟文件来做,用于 esp 分区。。。然后用修复工具包修复一下。。可以了。

不过虚拟机中 Win 7 还是卡在图标。。virtualbox 官方文档上明确说了,win7 虚拟机无法通过 efi 引导。

想起了反正 win7 的 efi 引导文件在 esp 分区,那么虚拟机可以不使用 uefi 模式的吧。。。

加一个小小的虚拟磁盘分区,采用 mbr 分区表,用 pe 修复下 BIOS 引导。。成功启动。。

不过启动后又要安装虚拟机增强功能,重新激活。。。不过看起来,两边各搞一次就可以了。。就是磁盘空间占用比较高。。。

再试下前面的单分区虚拟磁盘文件。。还是不行。。。看来是 bcd 参数需要有个磁盘,光分区不行。。

虚拟机中将其他无效分区隐藏,然后把物理机的 D 盘共享给虚拟机,虚机中映射网络驱动器为 D 盘

启动脚本

启动虚拟机的脚本

#!/bin/bash

stty -echo

#sudo -S echo "" << EOF
#asdfgh
#EOF

echo asdfgh | sudo -S chmod o+rw /dev/sda4
sudo chmod o+rw /dev/sda5
vboxmanage startvm win7

调整虚拟磁盘文件

减少 ntfs 分区,只保留 win7 所在分区,因为它容易导致死机。更新分区后,虚拟机也要调整

sudo vboxmanage internalcommands listpartitions -rawdisk /dev/sda

sudo vboxmanage internalcommands createrawvmdk -filename ./win7.vmdk -rawdisk /dev/sda -partitions 4 -relative

还要用 PE 中的 BIOS 引导修复工具修复引导。win 盘为 C 盘,引导盘为 E 盘。然后重新隐藏引导盘。

startwin7.sh 内容改为:

#!/bin/bash

pkexec chmod o+rw /dev/sda4

if [[ $? -ne 0 ]]; then
    exit 1
fi

vboxmanage startvm win7

2021-01-17 21:08:48
win7 重装后物理机一直无法启动
看来新安装win7需要重新修复引导文件,不能用原来的,特别是分区修改过的情况下
这次不隐藏win的uefi菜单了,引导文件就放esp分区吧

重新生成物理磁盘文件

sudo vboxmanage internalcommands createrawvmdk -filename ./win7.vmdk -rawdisk /dev/sda -partitions 4 -relative

虚拟机内修复引导。。还要取消隐藏引导盘。修复后重新隐藏。


Share Tweet Send
0 Comments
Loading...
You've successfully subscribed to 隔窗听雨
Great! Next, complete checkout for full access to 隔窗听雨
Welcome back! You've successfully signed in
Success! Your account is fully activated, you now have access to all content.
豫ICP备19045256号-1