如何从 Linux 终端创建 VirtualBox 虚拟机

大多数云提供商将租用虚拟服务器而不是实际硬件。如果您想在自己的服务器上做同样的事情,无论是运行不同的操作系统还是管理多个环境,您都可以完全从您的终端完成。
如果您打算仅使用虚拟机,您可能会对管理程序感兴趣。管理程序取代了您的主机操作系统,并且是为管理多个虚拟机而定制的。你将无法在主机操作系统上运行应用程序,但你可以轻松地虚拟化 Ubuntu Server 或其他东西,并在管理程序之上运行应用程序。
安装 VirtualBox 和 VBox 扩展包
VirtualBox 是一款免费的基于 GUI 的虚拟化软件,它作为应用程序在您的主机操作系统(Type 2 hypervisor)上运行。您之前可能在个人计算机上使用过它来设置 VM,但 VirtualBox 实际上具有完整的命令行界面,并且仅可从终端完全使用,因此非常适合此用例。另一种解决方案是 QEMU,但 VirtualBox 经过反复测试,并且在免费和开源方面无可匹敌。
诚然,VirtualBox CLI 有点笨拙,所以如果您只是在家庭服务器上闲逛并且有一些空闲 RAM,您可以在服务器上安装一个轻型桌面环境并以正常方式设置 VirtualBox。您仍然可以在无头模式下运行 VM,以在您注销 DE 后让它们继续运行。
如果您确实打算坚持使用 CLI,安装相当简单,因为它可以直接从 apt
获得:
sudo apt-get install virtualbox
你需要记下安装的版本(VBoxManage -v
),因为你需要安装更多的东西。因为我们是在无头模式下设置的,所以在配置 SSH/RDP 之前,我们需要一种连接到机器的方法。
前往 VirtualBox 的下载页面,找到您正在运行的版本的扩展包的链接。使用 wget
下载它:
wget https://download.virtualbox.org/virtualbox/5.2.42/Oracle_VM_VirtualBox_Extension_Pack-5.2.42.vbox-extpack
并安装它:
sudo VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-5.2.42.extpack
出于某种原因,VRDE 似乎不适用于安装了内置 VNC 扩展包的我们。删除这个包解决了这个问题:
sudo VBoxManage extpack uninstall VNC
设置虚拟机
首先,我们将创建一个名为“Ubuntu”的新 VM。您可以使用 VBoxManage list ostypes
查看支持的操作系统类型列表。
sudo VBoxManage createvm --name "Ubuntu" --ostype Ubuntu_64 --register
给机器一些 RAM 并创建一个新的硬盘驱动器。我们将配备 4 GB RAM 和 32 GB HDD 空间,但这些都可以在以后扩展。请注意,硬盘驱动器是一个虚拟磁盘,不是预先分配的。
sudo VBoxManage modifyvm "Ubuntu" --memory 4096
sudo VBoxManage createhd --filename "Ubuntu.vdi" --size 32000
设置 vCPU 的数量。这是在线程中衡量的,而不是完整的 CPU 内核。
sudo VBoxManage modifyvm "Ubuntu" --cpus 2
接下来是硬盘驱动器的更多配置。通常这在从 GUI 创建机器时会自动发生,但您必须手动创建一个 SAS 控制器并将其附加到 VM 以使硬盘驱动器正常工作。
sudo VBoxManage storagectl "Ubuntu" --name "SAS Controller" --add sas --controller LSILogicSAS
sudo VBoxManage storageattach "Ubuntu" --storagectl "SAS Controller" --port 0 --device 0 --type hdd --medium "Ubuntu.vdi"
sudo VBoxManage storagectl "Ubuntu" --name "SAS Controller" --hostiocache on
我们将对保存 ISO 的磁盘执行相同的操作以安装操作系统。这假设您的 ISO 位于 /home/user/Ubuntu.iso
,因此请相应地更改它。
sudo VBoxManage storagectl "Ubuntu" --name "IDE Controller" --add ide --controller PIIX4
sudo VBoxManage storageattach "Ubuntu" --storagectl "IDE Controller" --port 0 --device 0 --type dvddrive --medium "/home/user/Ubuntu.iso"
然后,翻转一些与性能相关的开关,以防止因 RAM 使用过多而导致速度下降:
sudo VBoxManage modifyvm "Ubuntu" --nestedpaging on
sudo VBoxManage modifyvm "Ubuntu" --largepages on
接下来,我们将创建该 VM 将使用的网络。这一步有很多选择:
- NAT,最简单,它只允许 VM 使用网络地址转换 (NAT) 与外界通信。这不允许 VM 相互通信,也不允许主机与客户联系,除非端口转发。
- NAT 网络,与 NAT 类似,不同之处在于网络在 VM 之间共享,并且它们可以相互通信。 NAT 网络充当虚拟子网。
- 桥接,将物理连接直接桥接到 VM。 VM 在您的网络上有一个实际的 IP 地址。这甚至可以在只有一个 Wi-Fi/以太网连接的情况下工作,但如果您有一个带有多个以太网端口的网卡,您可以将整个接口直接分配给一个虚拟机。
- 虚拟网络,它连接隔离的虚拟化网络中的多个实例。这对于为真实网络建模很有用,但不适用于大多数用例。
- Host Only Adapter,类似于虚拟网络,但允许与主机(而非互联网)对话。
对于这个例子,我们将使用 NAT 网络,因为它设置简单并且是同类网络中最通用的,实现了连接性和隔离性的平衡。
在 10.0.0.0/24
子网上创建一个新网络,启动它:
sudo VBoxManage natnetwork add --netname natnet1 --network "10.0.0.0/24" --enable
sudo VBoxManage natnetwork start --netname natnet1
并将其附加到 VM:
sudo VBoxManage modifyvm "Ubuntu" --nic1 natnetwork --nat-network1 natnet1
接下来,我们必须配置我们如何访问这个实例。因为我们在无外设服务器(无视频输出)上安装它,我们将无法完成安装过程并在来宾操作系统上安装 RDP 客户端。为了解决这个问题,我们将使用 VirtualBox 的 VRDE 服务器,这是我们之前安装 VirtualBox Extension Pack 的主要原因。这会捕获虚拟显示的输出并使其通过 RDP 可用。
打开它,并为其设置一个端口。您需要确保主机操作系统已打开此端口。
sudo VBoxManage modifyvm "Ubuntu" --vrde on
sudo VBoxManage modifyvm "Ubuntu" --vrdeport 5587
最后,我们能够以无头模式启动虚拟机并开始安装操作系统。
sudo VBoxManage startvm "Ubuntu" --type headless
请注意,无头模式意味着它在无头服务器上运行,而不是客户操作系统没有视频输出。
启动需要一两秒钟,您将能够启动 RDP 客户端并使用您指定的端口连接到它。它可能会要求输入用户名和密码; VRDE 默认为“admin”,没有密码。
设置后的端口转发
操作系统安装完成后,您必须进行一些端口转发以在 VRDE 关闭后保持访问,本质上就像打开防火墙规则一样。如果你正在设置像 Linux 这样的无头环境,你只需要转发 SSH。以下命令将向 NAT 网络添加端口转发规则,以将主机操作系统上的端口 2200 转发到来宾上的默认 SSH 端口。请注意,此端口需要在主机的防火墙中打开才能正常工作。
sudo VBoxManage natnetwork modify --netname natnet1 --port-forward-4 "ssh:tcp:[]:2200:[10.0.0.2]:22"
如果要设置 RDP,则必须在来宾操作系统中配置 RDP 服务器,并确保 RDP 端口在来宾防火墙中打开。之后,您可以用几乎相同的方式进行移植:
sudo VBoxManage natnetwork modify --netname natnet1 --port-forward-4 "rdp:tcp:[]:5589:[10.11.0.2]:3389"
如果您需要删除端口转发规则,则必须使用这个相当笨拙的命令(冒号前的第一个字符串)按名称删除它们:
sudo VBoxManage natnetwork modify --netname natnet1 --port-forward-4 delete rdp
一旦您确认可以通过 SSH/RDP 直接连接到来宾操作系统,您可以关闭 VRDE:
sudo VBoxManage modifyvm "Ubuntu" --vrde off
如果您计划在较长时间内通过 RDP 使用此 VM,则可能需要为您的来宾操作系统安装 VirtualBox Guest Additions 套件。
如果您决定在从 CLI 设置此 VM 后使用 GUI 管理 VirtualBox,请记住此 VM 是作为 root
创建的,因此您需要以 启动 VirtualBox GUI root
在列表中查看此 VM。否则,它应该可以正常工作。
此外,如果您希望计算机在桌面环境关闭时运行,则必须右键单击以无界面模式启动计算机。