玩轉VirtualBox高級配置:篇一:VBox 虛擬機的結構

說明

這是我玩轉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,懂虛擬機的都明白,不用說了吧。。。

歡迎大家關注Virtual Box專欄!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章