说明
由于博客已经全面由 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语法。
内容如下所示。
<?xml version="1.0"?>
<!--
** DO NOT EDIT THIS FILE.
** If you make changes to this file while any VirtualBox related application
** is running, your changes will be overwritten later, without taking effect.
** Use VBoxManage or the VirtualBox Manager GUI to make changes.
-->
<VirtualBox xmlns="http://www.virtualbox.org/" version="1.16-linux">
<Machine uuid="{698fd744-e86c-4197-8e8c-6d8c6c0053ee}" name="Kali Linux" OSType="Debian_64" stateFile="Snapshots/2020-03-02T02-46-17-417352000Z.sav" snapshotFolder="Snapshots" lastStateChange="2020-03-02T02:46:53Z">
<MediaRegistry>
<HardDisks>
<HardDisk uuid="{425440d0-a459-4c9b-bdb0-c8c4e9d0b2f6}" location="Kali Linux.vdi" format="VDI" type="Normal"/>
</HardDisks>
<DVDImages>
<Image uuid="{843ff379-14b6-45d7-9c08-3f91e9c47d9a}" location="/home/felix/Documents/disks/ISO/kali-linux-2020.1a-installer-amd64.iso"/>
<Image uuid="{5b5ebce9-6c35-4556-9afe-1082b2557215}" location="/usr/lib/virtualbox/additions/VBoxGuestAdditions.iso"/>
</DVDImages>
</MediaRegistry>
<ExtraData>
<ExtraDataItem name="GUI/LastCloseAction" value="SaveState"/>
<ExtraDataItem name="GUI/LastNormalWindowPosition" value="0,28,640,480,max"/>
<ExtraDataItem name="GUI/LastScaleWindowPosition" value="640,300,640,480"/>
<ExtraDataItem name="GUI/ScaleFactor" value="1.5"/>
</ExtraData>
<Hardware>
<CPU>
<PAE enabled="false"/>
<LongMode enabled="true"/>
<X2APIC enabled="true"/>
<HardwareVirtExLargePages enabled="false"/>
</CPU>
<Memory RAMSize="4096"/>
<HID Pointing="USBTablet"/>
<Display controller="VMSVGA" VRAMSize="16"/>
<VideoCapture screens="1" file="." fps="25"/>
<RemoteDisplay enabled="true"/>
<BIOS>
<IOAPIC enabled="true"/>
<SmbiosUuidLittleEndian enabled="true"/>
</BIOS>
<USB>
<Controllers>
<Controller name="OHCI" type="OHCI"/>
</Controllers>
</USB>
<Network>
<Adapter slot="0" enabled="true" MACAddress="0800271DB31D" type="82540EM">
<DisabledModes>
<InternalNetwork name="intnet"/>
<GenericInterface driver="VBOX"/>
<NATNetwork name="NatNetwork"/>
</DisabledModes>
<BridgedInterface name="wlp1s0"/>
</Adapter>
</Network>
<AudioAdapter codec="AD1980" driver="Pulse" enabled="true" enabledIn="false"/>
<RTC localOrUTC="UTC"/>
<Clipboard/>
<DragAndDrop mode="Bidirectional"/>
<GuestProperties>
<GuestProperty name="/VirtualBox/GuestAdd/Revision" value="135662" timestamp="1582981113600000000" flags=""/>
<GuestProperty name="/VirtualBox/GuestAdd/Version" value="6.1.2" timestamp="1582981113597531000" flags=""/>
<GuestProperty name="/VirtualBox/GuestAdd/VersionExt" value="6.1.2" timestamp="1582981113599930000" flags=""/>
<GuestProperty name="/VirtualBox/GuestInfo/OS/Product" value="Linux" timestamp="1582981113594753000" flags=""/>
<GuestProperty name="/VirtualBox/GuestInfo/OS/Release" value="5.4.0-kali4-amd64" timestamp="1582981113595029000" flags=""/>
<GuestProperty name="/VirtualBox/GuestInfo/OS/Version" value="#1 SMP Debian 5.4.19-1kali1 (2020-02-17)" timestamp="1582981113596947000" flags=""/>
<GuestProperty name="/VirtualBox/HostInfo/GUI/LanguageID" value="C" timestamp="1583117177393486000" flags="RDONLYGUEST"/>
<GuestProperty name="/VirtualBox/HostInfo/VBoxRev" value="135662" timestamp="1583063544812066002" flags="TRANSIENT, RDONLYGUEST"/>
<GuestProperty name="/VirtualBox/HostInfo/VBoxVer" value="6.1.2" timestamp="1583063544812066000" flags="TRANSIENT, RDONLYGUEST"/>
<GuestProperty name="/VirtualBox/HostInfo/VBoxVerExt" value="6.1.2" timestamp="1583063544812066001" flags="TRANSIENT, RDONLYGUEST"/>
<GuestProperty name="/VirtualBox/VMInfo/ResetCounter" value="3" timestamp="1582984372225316000" flags="TRANSIENT, RDONLYGUEST"/>
<GuestProperty name="/VirtualBox/VMInfo/ResumeCounter" value="5" timestamp="1583104345717747000" flags="TRANSIENT, RDONLYGUEST"/>
</GuestProperties>
</Hardware>
<StorageControllers>
<StorageController name="IDE" type="PIIX4" PortCount="2" useHostIOCache="true" Bootable="true">
<AttachedDevice passthrough="false" type="DVD" hotpluggable="false" port="1" device="0">
<Image uuid="{843ff379-14b6-45d7-9c08-3f91e9c47d9a}"/>
</AttachedDevice>
</StorageController>
<StorageController name="SATA" type="AHCI" PortCount="1" useHostIOCache="false" Bootable="true" IDE0MasterEmulationPort="0" IDE0SlaveEmulationPort="1" IDE1MasterEmulationPort="2" IDE1SlaveEmulationPort="3">
<AttachedDevice type="HardDisk" hotpluggable="false" port="0" device="0">
<Image uuid="{425440d0-a459-4c9b-bdb0-c8c4e9d0b2f6}"/>
</AttachedDevice>
</StorageController>
</StorageControllers>
</Machine>
</VirtualBox>
我们将在下一篇中仔细研究这个文件。
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,懂虚拟机的都明白,不用说了吧。。。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。