用虚拟机学习Linux

学习 Linux 当然是边看书边上机实习更有效,而在物理机上安装和维护 Linux 对刚接触 Linux 的朋友可能会折腾不少时间;学习 Linux 往往需要设置不同的硬件环境,如磁盘软阵列、局域网,现实中这些条件往往不具备;想了解现在热门的“云计算”的基础等等。这些都是虚拟机可以解决的问题。我这里把自己用过或查过的有关虚拟机的知识作一个小结,着重在于简述它们能够达成什么样的功能。大家在需要相关功能时可以再进一步的了解。我主要是在 Linux 平台下使用 VirtualBox 和 VMware Player,偶尔也使用 QEMU。当然它们也有其它平台的版本。

上述3种虚拟机的概况。VirtualBox 和 QEMU 都是开源软件,可免费使用。VMware Player 是闭源软件,非商业用途可免费使用。QEMU 相对来说更专业一些,它主要是用命令行创建管理虚拟机,也有完善的图形化前端管理器,如 virt-manager。对于初学者来说,VirtualBox 或 VMware Player 就完全胜任了。另外,这3种虚拟机的磁盘格式基本上都能相互转换,所以,对于 Linux 客户机来说,在不同的虚拟机软件之间转移基本上不是问题。

在主板方面,三者现在都可以模拟 EFI 了。VMware Player 需要在 *.vmx 配置文件中添加一行:firmware="efi",图形界面是没选项的。

在 CPU 方面,三者在宿主机具备硬件虚拟化并开启的情况下,可以利用 KVM 技术达到优良的计算性能。VirtualBox 和 VMware Player 运行 64 位虚拟客户机要求宿主机的 CPU 是 64 位且支持并启用了虚拟化技术,与宿主机的操作系统是否 64 位无关。QEMU 它有一个另外两个虚拟机软件不具备的功能,可以模拟跟宿主机不同的 CPU 架构,如 x86 的机器上模拟 ARM 的机器,可以在 32 位 CPU 或没开启虚拟化的 64 位 CPU 的机器上运行 64 位的虚拟客户机,因为这是软件模拟的 CPU,所以性能不佳。另外,VirtualBox 在不支持硬件虚拟( INTEL-VT或者AMD-V )CPU (如P6200)的系统上不能在虚拟机中使用多核,如 P6200, 虚拟机的 CPU 占用约100%,而宿主机 CPU 只用了约50%。 VMware Player 虚拟机可以在不支持硬件虚拟的 CPU 上使用多核更好的发挥宿主机 CPU 性能。如:Intel Atom N270, 单核双线程;Intel P6200,双核。

在储存方面,几种存储格式基本上都可以互相通用或相互转化。所以直接选择软件默认的格式就行了。另外,三种虚拟机软件都可以在虚拟机中直接使用物理磁盘或分区。VMware Player 在图形界面有选项,VirtualBox 可在命令行里操作,QEMU 可在命令行里直接使用,如用 QEMU 直接制作和测试可启动 Linux 优盘而用不着重启物理机操作:kvm -hda /dev/sdc -smp cores=4,threads=2,sockets=1 -m 512 -vga vmware -soundhw hda 。我曾经用 VMware player 在硬盘物理分区中试过,经过一番简单的处理,可以在虚拟机和物理机上启动同一物理分区里的 Linux 系统。但是虚拟机中直接使用物理磁盘或分区具有一定的数据丢失危险性。

网络方面,VMware Player 的 NAT 模式下宿主机和客户机是可以互通的。VMware player 默认的 pcnet32 的网卡驱动在一些 Linux 发行版中没包含,需要在 *.vmx 配置文件中添加修改为其它的网卡,添加一行:ethernet0.virtualDev = "e1000" 。VirtualBox 的 NAT 模式下,客户机可以访问宿主机,而宿主机默认是不能访问客户机的,但可以做端口转发,把宿主机上的端口转发到客户机的端口从而达到访问客户机相应服务的目的。VirtualBox 选择“内部网络”的连接类型可以把几台虚拟机组成一个局域网。QEMU 的桥接网络类型需要在宿主机的网络配置文件中特别设置,像 virt-manager 自带的 macvtap bridge,宿主机和客户机间不能通信,但在宿主机中可以访问外部网络。

显示方面,VirtualBox 是可以用 vboxmanage 命令行自定义客户机的显示分辨率的。VMware Player 设置虚拟机客户机显示 3D 加速时,部分未正式支持的宿主机显卡,例如 i7 的核芯显卡 hd4600,就需要在 *.vmx 配置文件中添加一行:mks.gl.allowBlacklistedDrivers = "TRUE" 。

VirtualBox 和 VMware Player 为了增强图形性能和鼠标操作方便性、共享文件夹、网络性能等等,还应该在客户机中安装附加驱动,前者叫“增强功能”,后者叫“VMware Tools”。VirtualBox 还可再安装“扩展包(extension packs)”以提供更多的高级特性。

VirtualBox 提供系统快照、客户机屏幕录像等高级功能。而免费的 VMware Player 没有这些功能,收费的 VMware Workstation 才有。

VirtualBox 虚拟机里可以再装一个 VMware Player 虚拟机;但反过来就不行。

VirtualBox 可以把虚拟机导出成一个文件,然后在别的宿主机上再用 VirtualBox 导入这个文件。VMware Player 的虚拟机可以把整个客户机的配置、磁盘文件打包压缩,然后在别的地方解压打开就行了。

在纯控制台里启动 virt-manager 创建的虚拟机:sudo virsh start VMCLIENT 。VirtualBox 在纯控制台启动虚拟机:VBoxManage startvm "VM name" --type headless 或 VBoxHeadless --startvm "VM name"。VMware player 据查可以用 VMware VIX 的 vmrun,不过貌似这个程序有 bug,有时不能在 VMware Player 上工作。

在软件的更新与支持方面,VirtualBox 的更新比较及时,新旧内核的支持都比较好。各个主流发行版的支持都比较到位等。VMware Player 常出现不能及时支持宿主机新 Linux 内核,而旧的内核又很快不被支持的问题。并且,VMware Player 现在不支持 32 位宿主机操作系统了。

以上个人经验,仅供参考。我只是列出了所知道的一些功能,欢迎交流与更正。如对功能的具体操作有疑问的也欢迎提问,但请先阅读官方文档并搜索网络。

4 thoughts on “用虚拟机学习Linux”

  1. “VMware Player 常出现不能及时支持宿主机新 Linux 内核,而旧的内核又很快不被支持的问题。”是Linux版本更新太快,支持周期太短的意思吗?还是VMware Player不能在旧版Linux上使用?

    1. 不是很清楚,但是貌似参数:prefvmx.minVmMemPct = "100" 可以一试
      另外,这里有一篇文章供参考:Maximize VMWare images performance
      把以下代码插入 *.vmx 文件:

      sched.mem.pshare.enable = "FALSE"
      mainMem.useNamedFile = "FALSE"
      prefvmx.minVmMemPct = "100"
      prefvmx.useRecommendedLockedMemSize = "TRUE"
      mainMem.partialLazySave = "FALSE"
      mainMem.partialLazyRestore = "FALSE"
      priority.grabbed = "high"
      priority.ungrabbed = "normal"

发表评论

电子邮件地址不会被公开。 必填项已用*标注