VirtualBox 虛擬機的目錄結構

說明

因爲博客已經全面由 CSDN 遷往 SegmentFault, 故將部分文章進行改寫和遷移. 這些文章的開頭均有本說明. 因爲時間較爲久遠, 部份內容可能發生變動, 穩重的實例請斟酌後再嘗試.javascript

環境

Manjaro Linux 19.0, Linux Kernel 5.5, XFCE 4.4, Virtual Box 6.1 (均是英文版)java

VBox 虛擬機的結構

在一個正確的VBox虛擬機中,能夠發現如下目錄組成。
以個人Kali Linux虛擬機爲例。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

以下所示。ios

VBox 文件:Kali Linux.vbox

這是VBox虛擬機的配置文件,包含了對虛擬機軟硬件的描述,使用XML語法。
內容以下所示。bash

<?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>

咱們將在下一篇中仔細研究這個文件。session

VBox-prev 文件:Kali Linux.vbox-prev

這是歷史版本的VBox配置文件,有備份的做用,內容與Kali Linux.vbox類似,但屬性不一樣,在這裏咱們不過多描述。app

VDI 文件:Kali Linux.vdi

VDI 文件是Virtual Box獨家格式的虛擬硬盤文件,在VBox文件中指定。經過GHex編輯器,咱們能夠看到這個VDI 文件的內容。
在這裏插入圖片描述能夠看到,它的文件頭是:編輯器

<<< Oracle VM VirtualBox Disk Image >>>

除了VDI文件,Virtual Box 虛擬機還支持VHD,VMDK 格式的虛擬硬盤。其中,VMDK 格式正是VMWare虛擬機使用的虛擬硬盤格式。ide

Virtual Box與VMWare的兼容性問題

如上所述,Virtual Box能夠採用VMWare的虛擬磁盤。經過建立帶有VMDK磁盤的虛擬機,能夠方便的將其在VBox與VMWare之間來回移動而正確運行。可是,經本人實驗發現,這種方法只適用於在建立時選擇「使用一個VMDK文件做爲虛擬硬盤「的選項。本人親測,若是VMWare虛擬機採用了多個VMDK文件(Split選項),只有一個沒有數字序號的VMDK文件對於VBox是合法的,可讀的。ui

然而,當咱們啓動這塊虛擬磁盤時,會出現相似

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

相關文章
相關標籤/搜索