Index: trunk/src/VBox/Main/src-server/HostImpl.cpp
===================================================================
--- trunk/src/VBox/Main/src-server/HostImpl.cpp	(revision 43949)
+++ trunk/src/VBox/Main/src-server/HostImpl.cpp	(revision 43958)
@@ -2936,10 +2936,15 @@
     for (it = disks.begin(); it != disks.end(); ++it)
     {
-        Utf8StrFmt strName("Disk/%s/Load", it->c_str());
-        pm::SubMetric *fsLoadUtil   = new pm::SubMetric(strName + "/Util",
+        Utf8StrFmt strName("Disk/%s", it->c_str());
+        pm::SubMetric *fsLoadUtil   = new pm::SubMetric(strName + "/Load/Util",
             "Percentage of time disk was busy serving I/O requests.");
-        pm::BaseMetric *fsLoad = new pm::HostDiskLoadRaw(hal, this, strName,
+        pm::SubMetric *fsUsageTotal = new pm::SubMetric(strName + "/Usage/Total",
+            "Disk size.");
+        pm::BaseMetric *fsLoad  = new pm::HostDiskLoadRaw(hal, this, strName + "/Load",
                                                          *it, fsLoadUtil);
         aCollector->registerBaseMetric (fsLoad);
+        pm::BaseMetric *fsUsage = new pm::HostDiskUsage(hal, this, strName + "/Usage",
+                                                        *it, fsUsageTotal);
+        aCollector->registerBaseMetric (fsUsage);
 
         aCollector->registerMetric(new pm::Metric(fsLoad, fsLoadUtil, 0));
@@ -2949,4 +2954,12 @@
                                                   new pm::AggregateMin()));
         aCollector->registerMetric(new pm::Metric(fsLoad, fsLoadUtil,
+                                                  new pm::AggregateMax()));
+
+        aCollector->registerMetric(new pm::Metric(fsUsage, fsUsageTotal, 0));
+        aCollector->registerMetric(new pm::Metric(fsUsage, fsUsageTotal,
+                                                  new pm::AggregateAvg()));
+        aCollector->registerMetric(new pm::Metric(fsUsage, fsUsageTotal,
+                                                  new pm::AggregateMin()));
+        aCollector->registerMetric(new pm::Metric(fsUsage, fsUsageTotal,
                                                   new pm::AggregateMax()));
     }
Index: trunk/src/VBox/Main/src-server/Performance.cpp
===================================================================
--- trunk/src/VBox/Main/src-server/Performance.cpp	(revision 43949)
+++ trunk/src/VBox/Main/src-server/Performance.cpp	(revision 43958)
@@ -82,4 +82,9 @@
 
 int CollectorHAL::getHostFilesystemUsage(const char * /* name */, ULONG * /* total */, ULONG * /* used */, ULONG * /* available */)
+{
+    return E_NOTIMPL;
+}
+
+int CollectorHAL::getHostDiskSize(const char * /* name */, uint64_t * /* size */)
 {
     return E_NOTIMPL;
@@ -859,4 +864,23 @@
 }
 
+void HostDiskUsage::init(ULONG period, ULONG length)
+{
+    mPeriod = period;
+    mLength = length;
+    mTotal->init(mLength);
+}
+
+void HostDiskUsage::preCollect(CollectorHints& /* hints */, uint64_t /* iTick */)
+{
+}
+
+void HostDiskUsage::collect()
+{
+    uint64_t total;
+    int rc = mHAL->getHostDiskSize(mDiskName.c_str(), &total);
+    if (RT_SUCCESS(rc))
+        mTotal->put((ULONG)(total / (1024*1024)));
+}
+
 #ifndef VBOX_COLLECTOR_TEST_CASE
 void HostRamVmm::init(ULONG period, ULONG length)
Index: trunk/src/VBox/Main/src-server/linux/PerformanceLinux.cpp
===================================================================
--- trunk/src/VBox/Main/src-server/linux/PerformanceLinux.cpp	(revision 43949)
+++ trunk/src/VBox/Main/src-server/linux/PerformanceLinux.cpp	(revision 43958)
@@ -49,4 +49,5 @@
     virtual int getHostMemoryUsage(ULONG *total, ULONG *used, ULONG *available);
     virtual int getHostFilesystemUsage(const char *name, ULONG *total, ULONG *used, ULONG *available);
+    virtual int getHostDiskSize(const char *name, uint64_t *size);
     virtual int getProcessMemoryUsage(RTPROCESS process, ULONG *used);
 
@@ -242,4 +243,29 @@
 }
 
+int CollectorLinux::getHostDiskSize(const char *name, uint64_t *size)
+{
+    int rc = VINF_SUCCESS;
+    char *pszName = NULL;
+    long long unsigned int u64Size;
+
+    RTStrAPrintf(&pszName, "/sys/block/%s/size", name);
+    Assert(pszName);
+    FILE *f = fopen(pszName, "r");
+    RTMemFree(pszName);
+
+    if (f)
+    {
+        if (fscanf(f, "%llu", &u64Size) == 1)
+            *size = u64Size * 512;
+        else
+            rc = VERR_FILE_IO_ERROR;
+        fclose(f);
+    }
+    else
+        rc = VERR_ACCESS_DENIED;
+
+    return rc;
+}
+
 int CollectorLinux::getProcessMemoryUsage(RTPROCESS process, ULONG *used)
 {
