Mount point design and MSSearch

The use of mount points for Exchange is becoming more common place in many installations.  Some customers feel the best implementation of mount points consists of a small root disk with mount points created from folders on that disk.

For example, I may have a Drive L: that is 10 megs and I may create 4 folders on this drive (Database1 / Database2 / Database3 / Database4).  I will then create mount points utilizing the folders created from the L drive.

There are certain process in Exchange that often check for free drive space prior to performing certain operations.  Unfortunately these processes are not necessarily mount point aware – therefore they end up querying the free drive space of the lettered volume rather than the mount point.  One of these process is MSSearch.

MSSearch by default creates a catalog data folder co-located with each EDB file.  In our example above the catalog data folder and the edb file would be in L:\Database1 (where Database1 is the mount point).  In this this case the L drive has 10 megs free space but the Database1 mount point has 1.5 terabytes of free space.  When MSSearch attempts to initialize the initial catalog this operation fails as the drive space reported by the disk L is not sufficient (even though there is plenty of space where the actual catalog is stored).

Here is an example of some events you may see when this occurs.

Log Name: Application
Source: MSExchange Search Indexer
Date: 6/14/2010 12:11:20 PM
Event ID: 104
Task Category: General
Level: Error
Keywords: Classic
User: N/A
Computer: server.company.com
Description:
Exchange Search Indexer failed to enable the Mailbox Database DATABASE(GUID = 58c0ed8a-dbfc-4d55-b265-8a80f1dc477b) after 1 tries. The last failure was: System.ComponentModel.Win32Exception: Unable to SetProperty FTE_PluginList on catalog ExSearch-58c0ed8a-dbfc-4d55-b265-8a80f1dc477b-26fc1c62-d3e8-4711-b3c9-3bb0b32aec0a. Error = -2147215320
at Microsoft.Exchange.Msfte.CFTEAdmin.SetProperty(CatalogState catalogInfo, PropertyScope propertyScope, String propertyName, Object propertyValue, Boolean throwOnFailure)
at Microsoft.Exchange.Msfte.CFTEAdmin.CreateCatalog(CatalogState catalogInfo)
at Microsoft.Exchange.Search.Globals.CreateCatalog(CatalogState state, String reason)
at Microsoft.Exchange.Search.Globals.RecreateCatalogAndPropertyStore(CatalogState catalogInfo, String reason)
at Microsoft.Exchange.Search.CatalogState.CreateNew(String reason)
at Microsoft.Exchange.Search.CatalogState.Reset(String reason)
at Microsoft.Exchange.Search.CatalogState.HandleMountCatalogException(Exception exception)
at Microsoft.Exchange.Search.Globals.CheckAndInitializeCatalog(CatalogState catalogInfo)
at Microsoft.Exchange.Search.Driver.ProcessNewCatalogInternal(CatalogState catalog, List`1 mdbsToCrawl, Int32& numberOfDisabledMDBs). It will retry after 10 minutes.

 

Log Name: Application
Source: ExchangeStoreDB
Date: 6/14/2010 12:12:51 PM
Event ID: 222
Task Category: Database recovery
Level: Error
Keywords: Classic
User: N/A
Computer: server.company.com
Description:
At '6/14/2010 11:12:50 AM' the Microsoft Exchange Information Store Database ‘DATABASE' copy on this server experienced a corrupted search catalog. The error returned by failover was "There is only one copy of this mailbox database (DATABASE). Automatic recovery is not available.". Consult the event log on the server for other "ExchangeStoreDb" and "MSExchange Search Indexer" events for more specific information about the failures.

The important information is actually contained in the first event – the error code –2147215320.  This error code translates to CI_E_CONFIG_DISK_FULL.

To resolve this issue you can:

  • Increase the space allotted to the root disk hosting the mount point.
  • Change from utilizing mount points to drive letters.

Once this is done restarting the MSSearch services may be necessary so that initial catalog creation can occur.