Index: /trunk/src/VBox/ValidationKit/tests/storage/remoteexecutor.py
===================================================================
--- /trunk/src/VBox/ValidationKit/tests/storage/remoteexecutor.py	(revision 79590)
+++ /trunk/src/VBox/ValidationKit/tests/storage/remoteexecutor.py	(revision 79591)
@@ -276,2 +276,13 @@
         return fRc;
 
+    def rmTree(self, sDir, cMsTimeout = 30000):
+        """
+        Recursively removes all files and sub directories including the given directory.
+        """
+        fRc = True;
+        if self.oTxsSession is not None:
+            fRc = self.oTxsSession.syncRmTree(sDir, cMsTimeout);
+        else:
+            fRc = self.execBinaryNoStdOut('rm', ('-rf', sDir));
+
+        return fRc;
Index: /trunk/src/VBox/ValidationKit/tests/storage/storagecfg.py
===================================================================
--- /trunk/src/VBox/ValidationKit/tests/storage/storagecfg.py	(revision 79590)
+++ /trunk/src/VBox/ValidationKit/tests/storage/storagecfg.py	(revision 79591)
@@ -409,4 +409,39 @@
         return oExec.execBinaryNoStdOut('zramctl', ('-r', oDisk.getPath()));
 
+## @name Host disk config types.
+## @{
+g_ksDiskCfgStatic = 'StaticDir';
+g_ksDiskCfgRegExp = 'RegExp';
+g_ksDiskCfgList   = 'DiskList';
+## @}
+
+class DiskCfg(object):
+    """
+    Host disk configuration.
+    """
+
+    def __init__(self, sTargetOs, sCfgType, oDisks):
+        self.sTargetOs = sTargetOs;
+        self.sCfgType  = sCfgType;
+        self.oDisks    = oDisks;
+
+    def getTargetOs(self):
+        return self.sTargetOs;
+
+    def getCfgType(self):
+        return self.sCfgType;
+
+    def isCfgStaticDir(self):
+        return self.sCfgType == g_ksDiskCfgStatic;
+
+    def isCfgRegExp(self):
+        return self.sCfgType == g_ksDiskCfgRegExp;
+
+    def isCfgList(self):
+        return self.sCfgType == g_ksDiskCfgList;
+
+    def getDisks(self):
+        return self.oDisks;
+
 class StorageCfg(object):
     """
@@ -414,5 +449,5 @@
     """
 
-    def __init__(self, oExec, sTargetOs, oDiskCfg):
+    def __init__(self, oExec, oDiskCfg):
         self.oExec    = oExec;
         self.lstDisks = [ ]; # List of disks present in the system.
@@ -421,21 +456,22 @@
         self.iPoolId  = 0;
         self.iVolId   = 0;
+        self.oDiskCfg = oDiskCfg;
 
         fRc = True;
         oStorOs = None;
-        if sTargetOs == 'solaris':
+        if oDiskCfg.getTargetOs() == 'solaris':
             oStorOs = StorageConfigOsSolaris();
-        elif sTargetOs == 'linux':
+        elif oDiskCfg.getTargetOs() == 'linux':
             oStorOs = StorageConfigOsLinux(); # pylint: disable=redefined-variable-type
-        else:
+        elif not oDiskCfg.isCfgStaticDir(): # For unknown hosts we only a static testing directory we don't care about setting up.
             fRc = False;
 
         if fRc:
             self.oStorOs = oStorOs;
-            if utils.isString(oDiskCfg):
-                self.lstDisks = oStorOs.getDisksMatchingRegExp(oDiskCfg);
-            else:
+            if oDiskCfg.isCfgRegExp():
+                self.lstDisks = oStorOs.getDisksMatchingRegExp(oDiskCfg.getDisks());
+            elif oDiskCfg.isCfgList():
                 # Assume a list of of disks and add.
-                for sDisk in oDiskCfg:
+                for sDisk in oDiskCfg.getDisks():
                     self.lstDisks.append(StorageDisk(sDisk));
 
@@ -448,16 +484,18 @@
         """
 
-        # Destroy all volumes first.
-        for sMountPoint in self.dVols.keys(): # pylint: disable=consider-iterating-dictionary
-            self.destroyVolume(sMountPoint);
-
-        # Destroy all pools.
-        for sPool in self.dPools.keys(): # pylint: disable=consider-iterating-dictionary
-            self.destroyStoragePool(sPool);
+        if not self.oDiskCfg.isCfgStaticDir():
+            # Destroy all volumes first.
+            for sMountPoint in self.dVols.keys(): # pylint: disable=consider-iterating-dictionary
+                self.destroyVolume(sMountPoint);
+
+            # Destroy all pools.
+            for sPool in self.dPools.keys(): # pylint: disable=consider-iterating-dictionary
+                self.destroyStoragePool(sPool);
 
         self.dVols.clear();
         self.dPools.clear();
-        self.iPoolId = 0;
-        self.iVolId  = 0;
+        self.oDiskCfg = None;
+        self.iPoolId  = 0;
+        self.iVolId   = 0;
 
     def getRawDisk(self):
@@ -465,4 +503,5 @@
         Returns a raw disk device from the list of free devices for use.
         """
+
         for oDisk in self.lstDisks:
             if oDisk.isUsed() is False:
@@ -493,59 +532,42 @@
         sPool = None;
 
-        if fRamDisk:
-            oDisk = self.oStorOs.createRamDisk(self.oExec, cbPool);
-            if oDisk is not None:
-                lstDisks.append(oDisk);
-                cDisks = 1;
-        else:
-            if cDisks == 0:
-                cDisks = self.getUnusedDiskCount();
-
-            for oDisk in self.lstDisks:
-                if not oDisk.isUsed():
-                    oDisk.setUsed(True);
+        if not self.oDiskCfg.isCfgStaticDir():
+            if fRamDisk:
+                oDisk = self.oStorOs.createRamDisk(self.oExec, cbPool);
+                if oDisk is not None:
                     lstDisks.append(oDisk);
-                    if len(lstDisks) == cDisks:
-                        break;
-
-        # Enough drives to satisfy the request?
-        if len(lstDisks) == cDisks:
-            # Create a list of all device paths
-            lstDiskPaths = [ ];
-            for oDisk in lstDisks:
-                lstDiskPaths.append(oDisk.getPath());
-
-            # Find a name for the pool
-            sPool = 'pool' + str(self.iPoolId);
-            self.iPoolId += 1;
-
-            fRc = self.oStorOs.createStoragePool(self.oExec, sPool, lstDiskPaths, sRaidLvl);
-            if fRc:
-                self.dPools[sPool] = lstDisks;
+                    cDisks = 1;
             else:
-                self.iPoolId -= 1;
-        else:
-            fRc = False;
-
-        # Cleanup in case of error.
-        if not fRc:
-            for oDisk in lstDisks:
-                oDisk.setUsed(False);
-                if oDisk.isRamDisk():
-                    self.oStorOs.destroyRamDisk(self.oExec, oDisk);
-
-        return fRc, sPool;
-
-    def destroyStoragePool(self, sPool):
-        """
-        Destroys the storage pool with the given ID.
-        """
-
-        lstDisks = self.dPools.get(sPool);
-        if lstDisks is not None:
-            fRc = self.oStorOs.destroyPool(self.oExec, sPool);
-            if fRc:
-                # Mark disks as unused
-                self.dPools.pop(sPool);
+                if cDisks == 0:
+                    cDisks = self.getUnusedDiskCount();
+
+                for oDisk in self.lstDisks:
+                    if not oDisk.isUsed():
+                        oDisk.setUsed(True);
+                        lstDisks.append(oDisk);
+                        if len(lstDisks) == cDisks:
+                            break;
+
+            # Enough drives to satisfy the request?
+            if len(lstDisks) == cDisks:
+                # Create a list of all device paths
+                lstDiskPaths = [ ];
+                for oDisk in lstDisks:
+                    lstDiskPaths.append(oDisk.getPath());
+
+                # Find a name for the pool
+                sPool = 'pool' + str(self.iPoolId);
+                self.iPoolId += 1;
+
+                fRc = self.oStorOs.createStoragePool(self.oExec, sPool, lstDiskPaths, sRaidLvl);
+                if fRc:
+                    self.dPools[sPool] = lstDisks;
+                else:
+                    self.iPoolId -= 1;
+            else:
+                fRc = False;
+
+            # Cleanup in case of error.
+            if not fRc:
                 for oDisk in lstDisks:
                     oDisk.setUsed(False);
@@ -553,5 +575,28 @@
                         self.oStorOs.destroyRamDisk(self.oExec, oDisk);
         else:
-            fRc = False;
+            sPool = 'StaticDummy';
+
+        return fRc, sPool;
+
+    def destroyStoragePool(self, sPool):
+        """
+        Destroys the storage pool with the given ID.
+        """
+
+        fRc = True;
+
+        if not self.oDiskCfg.isCfgStaticDir():
+            lstDisks = self.dPools.get(sPool);
+            if lstDisks is not None:
+                fRc = self.oStorOs.destroyPool(self.oExec, sPool);
+                if fRc:
+                    # Mark disks as unused
+                    self.dPools.pop(sPool);
+                    for oDisk in lstDisks:
+                        oDisk.setUsed(False);
+                        if oDisk.isRamDisk():
+                            self.oStorOs.destroyRamDisk(self.oExec, oDisk);
+            else:
+                fRc = False;
 
         return fRc;
@@ -564,15 +609,18 @@
         fRc = True;
         sMountPoint = None;
-        if sPool in self.dPools:
-            sVol = 'vol' + str(self.iVolId);
-            sMountPoint = self.oStorOs.getMntBase() + '/' + sVol;
-            self.iVolId += 1;
-            fRc = self.oStorOs.createVolume(self.oExec, sPool, sVol, sMountPoint, cbVol);
-            if fRc:
-                self.dVols[sMountPoint] = (sVol, sPool);
+        if not self.oDiskCfg.isCfgStaticDir():
+            if sPool in self.dPools:
+                sVol = 'vol' + str(self.iVolId);
+                sMountPoint = self.oStorOs.getMntBase() + '/' + sVol;
+                self.iVolId += 1;
+                fRc = self.oStorOs.createVolume(self.oExec, sPool, sVol, sMountPoint, cbVol);
+                if fRc:
+                    self.dVols[sMountPoint] = (sVol, sPool);
+                else:
+                    self.iVolId -= 1;
             else:
-                self.iVolId -= 1;
-        else:
-            fRc = False;
+                fRc = False;
+        else:
+            sMountPoint = self.oDiskCfg.getDisks();
 
         return fRc, sMountPoint;
@@ -583,12 +631,13 @@
         """
 
-        sVol, sPool = self.dVols.get(sMountPoint);
-        fRc = True;
-        if sVol is not None:
-            fRc = self.oStorOs.destroyVolume(self.oExec, sPool, sVol);
-            if fRc:
-                self.dVols.pop(sMountPoint);
-        else:
-            fRc = False;
+        fRc = True;
+        if not self.oDiskCfg.isCfgStaticDir():
+            sVol, sPool = self.dVols.get(sMountPoint);
+            if sVol is not None:
+                fRc = self.oStorOs.destroyVolume(self.oExec, sPool, sVol);
+                if fRc:
+                    self.dVols.pop(sMountPoint);
+            else:
+                fRc = False;
 
         return fRc;
@@ -604,4 +653,10 @@
         Tries to cleanup any leftover pools and volumes from a failed previous run.
         """
-        return self.oStorOs.cleanupPoolsAndVolumes(self.oExec, 'pool', 'vol');
-
+        if not self.oDiskCfg.isCfgStaticDir():
+            return self.oStorOs.cleanupPoolsAndVolumes(self.oExec, 'pool', 'vol');
+        else:
+            fRc = True;
+            for sEntry in os.listdir(self.oDiskCfg.getDisks()):
+                fRc = fRc and self.oExec.rmTree(os.path.join(self.oDiskCfg.getDisks(), sEntry));
+
+            return fRc;
Index: /trunk/src/VBox/ValidationKit/tests/storage/tdStorageBenchmark1.py
===================================================================
--- /trunk/src/VBox/ValidationKit/tests/storage/tdStorageBenchmark1.py	(revision 79590)
+++ /trunk/src/VBox/ValidationKit/tests/storage/tdStorageBenchmark1.py	(revision 79591)
@@ -395,6 +395,8 @@
     # Global storage configs for the testbox
     kdStorageCfgs = {
-        'testboxstor1.de.oracle.com': r'c[3-9]t\dd0\Z',
-        'adaris': [ '/dev/sda' ]
+        'testboxstor1.de.oracle.com': storagecfg.DiskCfg('solaris', storagecfg.g_ksDiskCfgRegExp, r'c[3-9]t\dd0\Z'),
+        'testboxstor2.de.oracle.com': storagecfg.DiskCfg('win',     storagecfg.g_ksDiskCfgStatic, 'D:'),
+        'adaris':                     storagecfg.DiskCfg('linux',   storagecfg.g_ksDiskCfgList,   [ '/dev/sda' ]),
+        'daedalus':                   storagecfg.DiskCfg('darwin',  storagecfg.g_ksDiskCfgStatic, '/Volumes/VirtualBox/Testsuite/StorageScratch'),
     };
 
@@ -1162,6 +1164,6 @@
                     lstBinaryPaths = ['/bin', '/sbin', '/usr/bin', '/usr/sbin' ];
                     oExecVm = remoteexecutor.RemoteExecutor(oTxsSession, lstBinaryPaths, '${SCRATCH}');
-                    oStorCfgVm = storagecfg.StorageCfg(oExecVm, 'linux', self.getGuestDisk(oSession, oTxsSession, \
-                                                                                           eStorageController));
+                    oGstDiskCfg = storagecfg.DiskCfg('linux', storagecfg.g_ksDiskCfgList, self.getGuestDisk(oSession, oTxsSession, eStorageController));
+                    oStorCfgVm = storagecfg.StorageCfg(oExecVm, oGstDiskCfg);
 
                     iTry = 0;
@@ -1274,5 +1276,5 @@
             oExecutor = remoteexecutor.RemoteExecutor(None, lstBinaryPaths, self.sScratchPath);
             if not self.fUseScratch:
-                self.oStorCfg = storagecfg.StorageCfg(oExecutor, utils.getHostOs(), oDiskCfg);
+                self.oStorCfg = storagecfg.StorageCfg(oExecutor, oDiskCfg);
 
                 # Try to cleanup any leftovers from a previous run first.
