生成虚拟磁盘文件
首先查看要挂载的磁盘分区:
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
虚拟机内修复引导。。还要取消隐藏引导盘。修复后重新隐藏。