说明
由于博客已经全面由 CSDN 迁往 SegmentFault, 故将部分文章进行改写和迁移. 这些文章的开头均有本说明. 由于时间较为久远, 部分内容可能发生变更, 稳重的实例请斟酌后再尝试.
环境
Manjaro Linux 19.0, Linux Kernel 5.5, XFCE 4.4, Virtual Box 6.1 (均是英文版)
VBox 虚拟机的结构
在一个正确的VBox虚拟机中,可以发现以下目录组成。
以我的Kali Linux虚拟机为例。
Kali Linux
├── Kali Linux.vbox
├── Kali Linux.vbox-prev
├── Kali Linux.vdi
├── Logs
│ ├── VBox.log
│ ├── VBox.log.1
│ ├── VBox.log.2
│ └── VBox.log.3
└── Snapshots
└── 2020-03-02T02-46-17-417352000Z.sav
2 directories, 8 files
如下所示。
VBox 文件:Kali Linux.vbox
这是VBox虚拟机的配置文件,包含了对虚拟机软硬件的描述,使用XML语法。
内容如下所示。
我们将在下一篇中仔细研究这个文件。
VBox-prev 文件:Kali Linux.vbox-prev
这是历史版本的VBox配置文件,有备份的作用,内容与Kali Linux.vbox
相似,但属性不同,在这里我们不过多描述。
VDI 文件:Kali Linux.vdi
VDI 文件是Virtual Box独家格式的虚拟硬盘文件,在VBox文件中指定。通过GHex编辑器,我们可以看到这个VDI 文件的内容。
可以看到,它的文件头是:
<<< Oracle VM VirtualBox Disk Image >>>
除了VDI文件,Virtual Box 虚拟机还支持VHD,VMDK 格式的虚拟硬盘。其中,VMDK 格式正是VMWare虚拟机使用的虚拟硬盘格式。
Virtual Box与VMWare的兼容性问题
如上所述,Virtual Box可以采用VMWare的虚拟磁盘。通过创建带有VMDK磁盘的虚拟机,可以方便的将其在VBox与VMWare之间来回移动而正确运行。但是,经本人实验发现,这种方法只适用于在创建时选择“使用一个VMDK文件作为虚拟硬盘“的选项。本人亲测,如果VMWare虚拟机采用了多个VMDK文件(Split选项),只有一个没有数字序号的VMDK文件对于VBox是合法的,可读的。
然而,当我们启动这块虚拟磁盘时,会出现类似
INT xxx code cannot be executed: Error!
的错误,因此,对于使用多块虚拟磁盘的VMWare虚拟机,Virtual Box不能使用,但是,对于使用一块虚拟磁盘的VMWare虚拟机,VBox 可以正确启动,运行。
Logs 文件夹:VBox.log, VBox.log.1, ...
每次VBox 启动,都会产生一个 log (日志)文件,可以提供对错误排查等方面的信息。以下是VBox.log
文件的内容
00:00:01.677201 VirtualBox VM 6.1.2 r135662 linux.amd64 (Jan 14 2020 22:33:16) release log
00:00:01.677205 Log opened 2020-03-01T11:52:06.893608000Z
00:00:01.677206 Build Type: release
00:00:01.677210 OS Product: Linux
00:00:01.677213 OS Release: 5.5.2-1-MANJARO
00:00:01.677215 OS Version: #1 SMP PREEMPT Tue Feb 4 19:22:35 UTC 2020
00:00:01.677250 DMI Product Name: HP ZBook 14u G5
00:00:01.677265 DMI Product Version:
00:00:01.677273 Firmware type: UEFI
00:00:01.677817 Secure Boot: Disabled
......
04:49:22.678899 E1000#0: TX frames up to 32768: 0
04:49:22.678902 E1000#0: Larger TX frames : 0
04:49:22.678904 E1000#0: Max TX Delay : 0
04:49:22.724032 GIM: KVM: Resetting MSRs
04:49:22.730560 Changing the VM state from 'DESTROYING' to 'TERMINATED'
04:49:22.733887 Console: Machine state changed to 'Saved'
04:49:23.467202 GUI: Passing request to close Runtime UI from machine-logic to UI session.
可以看出,Virtual Box把所有的行为,数据都输出到了这些log文件里,对调试虚拟机非常有用。但是文件体积因此非常大,如下是ls
结果。
~/VirtualBox VMs/Kali Linux/Logs » ls -l felix@felix-zbook
total 584
-rw------- 1 felix felix 139958 Mar 2 10:46 VBox.log
-rw------- 1 felix felix 209527 Mar 1 11:00 VBox.log.1
-rw------- 1 felix felix 128813 Feb 29 21:25 VBox.log.2
-rw------- 1 felix felix 107014 Feb 29 21:16 VBox.log.3
Snapshots文件夹:2020-03-02T02-46-17-417352000Z.sav
Snapshot,懂虚拟机的都明白,不用说了吧。。。