需求

因工作需要,我得在Dell移动工作站上安装Windows-Linux双系统。之前用了WSL一段时间,一般服务非常便利,在systemd、系统迁移备份方面遇到一些麻烦。我不想继续折腾,故选择安装Linux虚拟机,虽然笨些,但耗时平稳,兼容性风险小。

把Linux用VirtualBox安装到单独的硬盘后,不仅可以使用VirtualBox启动Linux,也可以直接从BIOS启动Linux。就好比从大门进入卧室需要穿过客厅,现在直接在卧室开侧门,要进卧室,从大门侧门都可以。

操作步骤

1. 腾出一块磁盘

准备好所腾出磁盘的序号

  1. 按Win+R运行diskmgmt.msc打开磁盘管理
  2. 鉴别出所腾出的磁盘,记住其序号(如0),后面需要用到(如SELECT DISK 0, PhysicalDrive0

2. 使用DISKPART修改磁盘属性

打开命令行窗口(以管理员身份运行),执行diskpart

  1. 执行SELECT DISK 0选择要操作的磁盘 (0代表所腾出磁盘的序号)
  2. 执行ATTRIBUTES DISK CLEAR READONLY 清除只读标记,并执行 ATTRIBUTES DISK 确认只读:否
  3. 执行OFFLINE DISK 使磁盘离线,并执行 LIST DISK 确认状态:脱机
  4. 执行EXIT 退出DISKPART

注: 参见 VM on RAW disk on Windows 7 host

4. 创建虚拟磁盘文件

  1. 使用VirtualBox创建一个虚拟机(暂不分配磁盘)
  2. 打开CMD窗口,转到新建的虚拟机目录(如cd C:\Users\Administrator\VirtualBox VMs\ubuntu-desktop
  3. 将VBoxManage.exe所在的目录临时加入到Path(如set Path=%Path%;C:\Program Files\Oracle\VirtualBox) 或用"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe"代替后续的VBoxManage命令)
  4. 执行VBoxManage internalcommands listpartitions -rawdisk \\.\PhysicalDrive0 根据容量确认\\.\PhysicalDrive0即所腾出的磁盘
  5. 创建虚拟磁盘如ubuntu-desktop.vmdk,VBoxManage internalcommands createrawvmdk -filename ubuntu-desktop.vmdk -rawdisk \\.\PhysicalDrive0 VBoxManage createmedium disk --filename=ubuntu-desktop.vmdk --variant=RawDisk --format=VMDK --property RawDrive=\\.\PhysicalDrive0
  6. 在VirtualBox中设置虚拟机,将新建的ubuntu-desktop.vmdk分配给虚拟机

5. 给虚拟机安装操作系统

  1. 保证所选的操作系统镜像包含non-free firmware
  • Debian系统镜像必须是带non-free firmware的,否则从物理机启动时容易缺驱动而麻烦。
  • Ubuntu系统镜像自带了non-free firmware,不需要担心一般的驱动问题。
  1. 操作系统安装完成后,启动虚拟机并安装Virtual GuestAdditions

6. 从BIOS启动新安装的操作系统

  1. 开机时进入BIOS,在EFI启动列表中把GRUB挪到首位。
  2. 从BIOS启动Ubuntu前,以Dell Precision 7520为例,如果启动Windows时用的SATA Operation是 RAID on模式,那么需要把System Configuration/SATA Operation从RAID on改成AHCI下次启动Windows前先进入BIOS把它从AHCI改回RAID on 因SATA Operation改动导致的启动失败无须理会,重试3次,Windows会自动记住接受接受AHCI方式启动。

总结

  • 创建虚拟机前,保证所选磁盘离线,并清除磁盘的只读标记
  • 用VirtualBox安装Linux到虚拟机时,设置启用EFI,并设置硬件时钟UTC
  • 从BIOS启动Linux/Windows前,AHCI/RAID on模式的切换

参考