问题描述
操作系统已安装到物理磁盘(或者 USB 设备),我们希望虚拟机能够直接挂载该磁盘,并从该磁盘中启动。
该笔记将记录:在 VirtualBox 中,如何在虚拟机中添加物理磁盘,并从中启动,及相关问题的处理方法。
在 Linux 中
# 创建硬盘的虚拟硬盘文件 # -filename:指定 硬盘 要映射到的 虚拟机硬盘文件名; # -rawdisk:指定要启动的硬盘,我们这里是 /dev/sda 设备; vboxmanage internalcommands createrawvmdk \ -filename /vbox/filename.vmdk \ -rawdisk /dev/sda # 将当前用户加入 disk Group,以授予 VirtualBox 访问该磁盘的权限; # 否则,虚拟机将无权限访问物理磁盘文件; ll /dev/sda # 注意不同 Linux 发行版,磁盘属于不同组; usermod -a -G disk $(whoami) # 在 Ubuntu 20 中,属于 disk 组; # 配置虚拟机启动时加载的 vmdk 文件; # 如果是 EFI 引导,需要 System / Motherboard 配置,勾选 Extened Features / Enable EFI 选项; # 其他细节,这里不再赘述
在 Windows 中
Windows ,与 Linux 类似,只是命令行参数稍有不同,命令如下:
VBoxManage internalcommands createrawvmdk -filename F:\usb.vmdk -rawdisk \\.\PhysicalDrive2 # -rawdisk:该参数的指定的是磁盘标识符。
注意,需要以管理员身份运行 CMD 程序,即该命令需要以管理员身份运行。
如何填写 -rawdisk 的参数
通过命令行确定:
# diskpart ... DISKPART> list disk Disk ### Status Size Free Dyn Gpt -------- ------------- ------- ------- --- --- Disk 0 Online 476 GB 1024 KB * Disk 1 Online 476 GB 2048 KB * Disk 2 Online 238 GB 0 B DISKPART> select disk 0 Disk 0 is now the selected disk. DISKPART> list partition Partition ### Type Size Offset ------------- ---------------- ------- ------- Partition 1 System 300 MB 2048 KB Partition 2 Reserved 128 MB 302 MB Partition 3 Unknown 46 GB 430 MB Partition 4 Unknown 48 GB 46 GB ... // 根据分区表,来确定 Disk 0 确实是我们需要使用的磁盘 // 此时,应该使 \\.\PhysicalDrive0 作为参数
通过图形化工具确定:
1)Win + R,运行 diskmgmt.msc 命令,进入磁盘管理;
2)在磁盘管理中,点击要启动的硬盘;
3)下面会显示当前是磁盘的编号(如图);
4)在命令行中 PhysicalDrive 后面的数字为磁盘的编号,
如图为磁盘 2,则参数 -rawdisk 值为 \\.\PhysicalDrive2;
注意事项
在 Linux 下,当安装 VirtualBox 程序后,命令 VBoxManage 通常会自动加入环境变量中。如果不在环境变量中,则在 VirtualBox 的安装目录中。Windows 也是如此。
参考文献
VirtualBox怎么设置从u盘启动,虚拟机从U盘启动
Using a Physical Hard Drive with a VirtualBox VM
How to Use DiskPart Utility in Windows
permissions – VERR_ACCESS_DENIED when trying to add a raw disk to virtual box – Unix & Linux Stack Exchange
Booting a Physical Windows 10 Disk Using VirtualBox on Linux