在linux命令行下安装Windows虚拟机

几个疑问

  1. Windows10安装好了之后需要界面进去设置RDP远程访问。但是一般linux服务器完全的命令行方式岂不是陷入了鸡生蛋、蛋生鸡的困境?

    virtualbox 提供了一个叫vrde的方式,当你启动一个虚拟机(无论是否已经安装好os)的时候,你就可以使用rdp的任何客户端连接这个服务,然后就看到了界面,通过这个界面安装操作系统和在本地用USB的方式安装操作系统一样,点击下一步就可以了。

环境和软件准备

  1. linux服务器一台,配置看个人,我的是完全的命令方式
  2. 下载好windows10.iso
  3. 下载 virtualbox https://download.virtualbox.org/virtualbox/6.1.36/VirtualBox-6.1-6.1.36_152435_el6-1.x86_64.rpm
  4. 下载 virtualbox扩展包,有了这个才能再命令行模式下安装操作系统 https://download.virtualbox.org/virtualbox/6.1.36/Oracle_VM_VirtualBox_Extension_Pack-6.1.36-152435.vbox-extpack
  5. 下载 virtualbox guest additions https://download.virtualbox.org/virtualbox/6.1.36/VBoxGuestAdditions_6.1.36.iso

关于virtualbox的不同版本,不同平台的安装都在这个连接 https://download.virtualbox.org/virtualbox/, 根据情况自己去看。

$ ls -l
-rw-r--r-- 1 xxxxxx root   11231896 Jul 20 22:08 Oracle_VM_VirtualBox_Extension_Pack-6.1.36a-152435.vbox-extpack
-rw-r--r-- 1 xxxxxx root   63803392 Jul 20 09:54 VBoxGuestAdditions_6.1.36.iso
-rw-r--r-- 1 xxxxxx root   97752792 Jul 20 10:42 VirtualBox-6.1-6.1.36_152435_el7-1.x86_64.rpm
drwx------ 3 xxxxxx root         48 Aug  4 10:49 win10
-rw-r--r-- 1 xxxxxx root 4682743808 Aug  4 15:09 Windows.iso

安装软件

$sudo yum install ./VirtualBox-6.1-6.1.36_152435_el7-1.x86_64.rpm  # 安装virtual box虚拟机
$sudo vboxmanage extpack install ./Oracle_VM_VirtualBox_Extension_Pack-6.1.36a-152435.vbox-extpack  # 安装virtual box 命令扩展包
$vboxmanage list extpacks # 检查一下扩展包是否成功,如果出现下面这个输出就是成功
Extension Packs: 1
Pack no. 0:   Oracle VM VirtualBox Extension Pack
Version:      6.1.36
Revision:     152435
Edition:      
Description:  Oracle Cloud Infrastructure integration, USB 2.0 and USB 3.0 Host Controller, Host Webcam, VirtualBox RDP, PXE ROM, Disk Encryption, NVMe.
VRDE Module:  VBoxVRDP
Usable:       true 
Why unusable: 

创建虚拟机

$VBoxManage createvm --name win10 --ostype Windows7_64 --basefolder ~/myvm/ --register # 创建虚拟机,名字为win10,保存再 ~/myvm/下
$VBoxManage createmedium --filename ~/myvm/win10.vdi --size 102400 #创建一个磁盘, 大小10GB
$VBoxManage storagectl win10 --name SATAController --add sata --controller IntelAHCI # 磁盘控制器
$VBoxManage storageattach win10 --storagectl SATAController --port 0 --device 0 --type hdd --medium ~/myvm/win10.vdi # 控制器和磁盘绑定
$VBoxManage storagectl win10 --name dvddrive --add ide # 加一个光驱
$VBoxManage storageattach win10 --storagectl dvddrive --type dvddrive --port 1 --device 0 --medium ~/win7.iso #插入操作系统光盘镜像
$VBosManage modifyvm win10 --memory 20480  # 配置虚拟机内存20GB
$VBosManage modifyvm win10 --cpus 8  # 配置虚拟机CPU个数

# 启动顺序设置
$VBoxManage modifyvm win10 --boot1 dvd 
$VBoxManage modifyvm win10 --boot1 disk

$VBoxManage modifyvm win10 --nic1 bridged --cableconnected1 on --bridgeadapter1 enp7s0 # 桥接模式上网,也就是虚拟机会从局域网得到一个IP,使用网卡为enp7s0, 网卡名字根据自己linux情况具体而定
$VBoxManage modifyvm win10 --vrde on
$VBoxManage modifyvm win10 --vrdeport 3900 # 这个端口是你用RDP连接Windows的端口

启动

$VBoxManage startvm win10 --type headless --vrdp on
  1. 如果你的linux服务器有公网ip,那么啥都不用做。如果是通过的跳板机,那么还要做个ssh隧道,这个我就不详细说了,经常用的人都懂。把3900映射到本地来。
  2. 此时可以通过rdp(就是Windows自带的那个远程桌面)远程访问了,输入localhost:3900(我是用的ssh隧道,如果你的linux有公网ip就用公网ip)第一次访问是安装操作系统,一直点击下一步就行了(这个时候鼠标重影还很严重)。
  3. 安装好操作系统第二次进入稍作配置(此时依旧鼠标重影),然后关机
  4. $VBoxManage storageattach win10 --storagectl dvddrive --type dvddrive --port 1 --device 0 --medium ~/VBoxGuestAdditions_6.1.36.iso 通过命令挂载VBoxGuestAdditions, 然后开机,点开我的电脑->光驱进行安装,之后重新启动,发现鼠标没有重影了。
  5. 此时通过远程桌面连接,虚拟机的屏幕很小,怎么解决? TODO

其他控制命令

# 关闭虚拟机
$VBoxManage controlvm win10 poweroff
$VBoxManage controlvm win10 acpipowerbutton
$VBoxManage list vms # 查看目前已经安装的虚拟机

异常

VBoxManage: error: Details: code NS_ERROR_FAILURE (0x80004005) with meanjs and vagrant \ 这是因为在命令行下启动虚拟机,必须加上headless , 例如 VBoxManage startvm "VM name" --type headless

VM in virtualbox is already locked for a session (or being unlocked) \ 执行 vboxmanage startvm <vm-uuid> --type emergencystop

参考文章

build:   __BUILD_VERSION__