目錄
說明
這是我玩轉VirtualBox的第一篇,本系列根據少量幫助文檔以及個人經驗寫成。雖然經過親自嘗試,但難免有錯誤之處,望指正。
注意
因爲以上原因,請不要將本系列內容在十分重要,關乎致命問題的生產機(生產用虛擬機)上嘗試!除非你確定沒有太大風險。
環境
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,懂虛擬機的都明白,不用說了吧。。。