<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.technet.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>clausjor</title><link>http://blogs.technet.com/b/clausjor/</link><description /><dc:language>en-US</dc:language><generator>Telligent Evolution Platform Developer Build (Build: 5.6.50428.7875)</generator><item><title>A developer's view on VSS for SMB File Shares</title><link>http://blogs.technet.com/b/clausjor/archive/2012/07/17/a-developers-view-on-vss-for-smb-file-shares.aspx</link><pubDate>Tue, 17 Jul 2012 22:49:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3509468</guid><dc:creator>clausjor</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/clausjor/rsscomments.aspx?WeblogPostID=3509468</wfw:commentRss><comments>http://blogs.technet.com/b/clausjor/archive/2012/07/17/a-developers-view-on-vss-for-smb-file-shares.aspx#comments</comments><description>&lt;p&gt;VSS for SMB File Shares is an extension to the existing VSS infrastructure which consists of four parts:&lt;/p&gt;
&lt;table border="1" cellspacing="0" cellpadding="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="160" valign="top"&gt;
&lt;p&gt;&lt;strong&gt;Component Name&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="160" valign="top"&gt;
&lt;p&gt;&lt;strong&gt;Type&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="160" valign="top"&gt;
&lt;p&gt;&lt;strong&gt;Binary&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td width="160" valign="top"&gt;
&lt;p&gt;&lt;strong&gt;Function&lt;/strong&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="160" valign="top"&gt;
&lt;p&gt;File Share Shadow Copy Provider&lt;/p&gt;
&lt;/td&gt;
&lt;td width="160" valign="top"&gt;
&lt;p&gt;VSS File Share Provider&lt;/p&gt;
&lt;/td&gt;
&lt;td width="160" valign="top"&gt;
&lt;p&gt;Fssprov.dll&lt;/p&gt;
&lt;/td&gt;
&lt;td width="160" valign="top"&gt;
&lt;p&gt;Loaded by VSS service as In-Proc COM server. It is installed on all Windows Server 2012 Editions by default.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="160" valign="top"&gt;
&lt;p&gt;File Share Shadow Copy&lt;/p&gt;
&lt;p&gt;Agent&lt;/p&gt;
&lt;/td&gt;
&lt;td width="160" valign="top"&gt;
&lt;p&gt;File Server VSS proxy requestor&lt;/p&gt;
&lt;/td&gt;
&lt;td width="160" valign="top"&gt;
&lt;p&gt;FssAgent.dll&lt;/p&gt;
&lt;/td&gt;
&lt;td width="160" valign="top"&gt;
&lt;p&gt;Implements FssAgent RPC server. &lt;br /&gt;It is an optional Windows Server 2012 file server role service.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="160" valign="top"&gt;
&lt;p&gt;New VSS API&lt;/p&gt;
&lt;/td&gt;
&lt;td width="160" valign="top"&gt;
&lt;p&gt;VSS API&lt;/p&gt;
&lt;/td&gt;
&lt;td width="160" valign="top"&gt;
&lt;p&gt;Vssapi.dll&lt;/p&gt;
&lt;/td&gt;
&lt;td width="160" valign="top"&gt;
&lt;p&gt;Enhance VSS infrastructure to support UNC share paths.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="160" valign="top"&gt;
&lt;p&gt;New File Server Remote VSS Protocol&lt;/p&gt;
&lt;/td&gt;
&lt;td width="160" valign="top"&gt;
&lt;p&gt;MS-FSRVP RPC protocol&lt;/p&gt;
&lt;/td&gt;
&lt;td width="160" valign="top"&gt;
&lt;p&gt;N/A&lt;/p&gt;
&lt;/td&gt;
&lt;td width="160" valign="top"&gt;
&lt;p&gt;Open protocol for 3&lt;sup&gt;rd&lt;/sup&gt; party plug-in.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;In this post I want to look at VSS for SMB File Shares from a developers point of view and how to support it with minimal changes to 3&lt;sup&gt;rd&lt;/sup&gt; party VSS requestors, writers and providers, as well as look at how to investigate backup issues with betest, vsstrace and Microsoft Netmon trace tools.&lt;/p&gt;
&lt;p&gt;Hopefully you have already read the blog covering &lt;a href="http://blogs.technet.com/b/clausjor/archive/2012/06/14/vss-for-smb-file-shares.aspx"&gt;technical overview and deployment scenarios of VSS for SMB File Shares&lt;/a&gt;. For more technical details of this feature, please refer to &lt;a href="http://www.snia.org/sites/default/files2/SDC2011/presentations/tuesday/MollyBrown_Advancements_In_Backup.pdf"&gt;Molly Brown&amp;rsquo;s talk at Storage Developers Conference 2012&lt;/a&gt; and the &lt;a href="http://msdn.microsoft.com/en-us/library/hh554852(v=prot.10).aspx"&gt;MS-FSRVP protocol document&lt;/a&gt;.&lt;/p&gt;
&lt;h1&gt;VSS changes&lt;/h1&gt;
&lt;p&gt;The summary of backup application related VSS changes are listed below.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;VSS Requestor&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;COM Security&lt;/li&gt;
&lt;li&gt;Support UNC path&lt;/li&gt;
&lt;li&gt;UNC Path normalization&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;VSS Writer&lt;/li&gt;
&lt;li&gt;VSS Providers&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2&gt;VSS requestor&lt;/h2&gt;
&lt;p&gt;Requestor is one of the key VSS components that drives the application consistent shadow copy creation and backup/restore.&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;i&gt;&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;h3&gt;COM Security&lt;/h3&gt;
&lt;p&gt;As a COM client to VSS coordinator service, the VSS requestor compatible with this feature must satisfy the following security requirements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Run under a user account with local administrator or backup operator privilege on both application server and file servers.&lt;/li&gt;
&lt;li&gt;Enable Impersonation and Cloaking so that the user token running backup application can be authenticated on the file server.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Below is a sample code to achieve this. More detail can be found in &lt;a href="http://msdn.microsoft.com/en-us/library/windows/desktop/aa384604(v=vs.85).aspx"&gt;Security Considerations for Requestors&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas;" face="Consolas"&gt;&lt;/span&gt;&lt;span style="font-family: Consolas;" face="Consolas"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: Consolas;" face="Consolas"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style="width: 500px;" border="2" cellspacing="2" cellpadding="2"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="492" valign="top"&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;// Initialize COM security.&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="font-family: Consolas;" face="Consolas"&gt;&lt;/span&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CoInitializeSecurity(&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="font-family: Consolas;" face="Consolas"&gt;&lt;/span&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NULL,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; PSECURITY_DESCRIPTOR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pSecDesc,&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="font-family: Consolas;" face="Consolas"&gt;&lt;/span&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -1,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; LONG&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cAuthSvc,&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="font-family: Consolas;" face="Consolas"&gt;&lt;/span&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NULL,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; SOLE_AUTHENTICATION_SERVICE *asAuthSvc,&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="font-family: Consolas;" face="Consolas"&gt;&lt;/span&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="font-family: Consolas;" face="Consolas"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NULL,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: Consolas;" face="Consolas"&gt;//&amp;nbsp; void&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *pReserved1,&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="font-family: Consolas;" face="Consolas"&gt;&lt;/span&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RPC_C_AUTHN_LEVEL_PKT_PRIVACY,&amp;nbsp; //&amp;nbsp; DWORD&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dwAuthnLevel,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="font-family: Consolas;" face="Consolas"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="background-color: #ffff00;"&gt;RPC_C_IMP_LEVEL_IMPERSONATE&lt;/span&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; DWORD&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dwImpLevel,&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-family: Consolas;" face="Consolas"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NULL,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; void&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *pAuthList,&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="font-family: Consolas;" face="Consolas"&gt;&lt;/span&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="background-color: #ffff00;"&gt;EOAC_STATIC_CLOAKING&lt;/span&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; DWORD&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dwCapabilities,&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="font-family: Consolas;" face="Consolas"&gt;&lt;/span&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NULL&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; void&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *pReserved3&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;span style="font-family: Consolas;" face="Consolas"&gt;&lt;/span&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;span style="font-family: Consolas;" face="Consolas"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3&gt;Support UNC path&lt;/h3&gt;
&lt;p&gt;Prior to this feature, VSS only supported requestor adding shadow copies of data stored on local volume. With the new &amp;ldquo;File Share Shadow Copy Provider&amp;rdquo; available by default on all Windows Server 2012 editions, VSS now allows adding SMB UNC share path to a shadow copy set by calling the same &lt;a href="http://msdn.microsoft.com/en-us/library/windows/desktop/aa382650(v=vs.85).aspx"&gt;IVssBackupComponents::AddToSnapshotSet&lt;/a&gt;&lt;strong&gt;&lt;/strong&gt; method. Below is a simple code snippet to add a SMB UNC share path &lt;a href="file:///\\server1\guests"&gt;&lt;b&gt;\\server1\guests&lt;/b&gt;&lt;/a&gt;&lt;b&gt; &lt;/b&gt;to the shadow copy set.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style="width: 500px;" border="2" cellspacing="2" cellpadding="2"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="492" valign="top"&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;VSS_ID shadowCopySetId = GUID_NULL;&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;VSS_ID shadowCopyId = GUID_NULL;&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;CComPtr &amp;lt;IVssBackupComponents&amp;gt; spBackup;&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;LPWSTR pwszPath == L&amp;ldquo;\\server1\guests&amp;rdquo;&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;spBackup = CreateVssBackupComponents (VssBackupComponents);&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;spBackup-&amp;gt;StartSnapshotSet(&amp;amp;shadowCopySetId);&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;spBackup-&amp;gt;AddToSnapshotSet(pwszPath, GUID_NULL, &amp;amp;shadowCopyId);&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;&amp;hellip;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3&gt;UNC Path Normalization&lt;/h3&gt;
&lt;p&gt;Similar to local volume, uniquely identify a UNC share path in a shadow copy set is key to VSS-based shadow copy creation and backup/recovery. An UNC share path is composed of two parts: server name and share name. For the same share, the server name part of a UNC path can be configured in writer component in different formats below with many variations.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Host name&lt;/li&gt;
&lt;li&gt;FQDN (Fully Qualified Domain Name)&lt;/li&gt;
&lt;li&gt;IPv4&lt;/li&gt;
&lt;li&gt;IPv6 or IPv6 literal format&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This feature adds a new method &lt;a href="http://msdn.microsoft.com/en-us/library/windows/desktop/hh448677(v=vs.85).aspx"&gt;IVssBackupComponents4::GetRootAndLogicalPrefixPaths&lt;/a&gt; that normalizes a given UNC share path to its unique root path and logical prefix format. The unique root path and logical prefix path are designed to be used for shadow copy creation and backup/restore file path formation, respectively.&lt;/p&gt;
&lt;p&gt;Note that a VSS requestor need to:&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Call &lt;a href="http://msdn.microsoft.com/en-us/library/windows/desktop/aa382650(v=vs.85).aspx"&gt;IVssBackupComponents::AddToSnapshotSet&lt;/a&gt;&lt;span style="text-decoration: underline;"&gt; &lt;/span&gt;with unique root path of UNC share in hostname or FQDN format but not IPv4 or IPv6 address format.&lt;/p&gt;
&lt;p&gt;If a UNC share path is in IPv4 or IPv6 address format, its root path must be normalized into hostname or FQDN by calling &lt;a href="http://msdn.microsoft.com/en-us/library/windows/desktop/hh448677(v=vs.85).aspx"&gt;IVssBackupComponents4::GetRootAndLogicalPrefixPaths&lt;/a&gt;. &lt;b&gt;&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Consistently normalize the file share UNC path into either host name or FQDN format in the same shadow copy set before &lt;a href="http://msdn.microsoft.com/en-us/library/windows/desktop/aa382650(v=vs.85).aspx"&gt;IVssBackupComponents::AddToSnapshotSet&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Don&amp;rsquo;t call mix hostname or FQDN format in the same shadow copy set. Note the default root path format returned is hostname format. You can specify the optional 4&lt;sup&gt;th&lt;/sup&gt; parameter to require FQDN format in the returned unique root path.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;IPv4/IPv6 DNS reverse lookup must be configured appropriately on DNS infrastructure when normalizing UNC share path in IPv4/IPv6 format. Below are the examples to determine if your DNS server enables reverse IP address lookup for the specific address:&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;table style="width: 500px;" border="2" cellspacing="2" cellpadding="2"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="492" valign="top"&gt;
&lt;p&gt;&lt;b&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;Example of IPv4 reverse look up is enabled on DNS. In this case, you can find the highlighted hostname/FQDN is resolved from IP address.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;F:\&amp;gt;ping -a 10.10.10.110&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;Pinging filesever.contoso.com [10.10.10.110] with 32 bytes of data:&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;Reply from 10.10.10.110: bytes=32 time=1ms TTL=57&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;Reply from 10.10.10.110: bytes=32 time=1ms TTL=57&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;Reply from 10.10.10.110: bytes=32 time=1ms TTL=57&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas;" face="Consolas"&gt;&lt;span style="font-size: xx-small;" size="1"&gt;&lt;b&gt;Example of IPv6 reverse lookup is not configured for &lt;/b&gt;2001:4898:dc3:1005:21c:c4ff:fe68:e88. In this case, you can find that the hostname/FQDN cannot be resolved as the highlighted part is still IPv6 address.&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;F:\&amp;gt;ping -a 2001:4898:dc3:1005:21c:c4ff:fe68:e88&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;Pinging 2001:4898:dc3:1005:21c:c4ff:fe68:e88 with 32 bytes of data:&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;Reply from 2001:4898:dc3:1005:21c:c4ff:fe68:e88: time=3ms&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;Reply from 2001:4898:dc3:1005:21c:c4ff:fe68:e88: time=1ms&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;Reply from 2001:4898:dc3:1005:21c:c4ff:fe68:e88: time=1ms&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;If your DNS server does not have IPv6 DNS reverse lookup configured, you can manually add the IP address to hostname/FQDN mapping to your local DNS cache directly. To achieve this, open %SystemRoot%\system32\drivers\etc\hosts with notepad.exe from an elevated command window and add one line for each IP address to hostname/FQDN mapping as shown below. Most of the deployments we tested have IPv4 reverse DNS lookup available. But not all of them have IPv6 DNS reverse lookup configured.&lt;/p&gt;
&lt;table style="width: 500px;" border="2" cellspacing="2" cellpadding="2"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="492" valign="top"&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;2001:4898:2a:3:6c94:5149:2f9c:f083 fileserver.contoso.com&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;2001:4898:2a:3:6c94:5149:2f9c:f083 fileserver&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;To unify the normalization of all VSS supported paths, this API also supports&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;DFS-N path pointing to another physical server, which returns the fully evaluated physical share path on the DFS target server.&lt;/li&gt;
&lt;li&gt;Local volume, which returns the results of &lt;a href="http://msdn.microsoft.com/en-us/library/windows/desktop/aa364996(v=vs.85).aspx"&gt;GetVolumePathName&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/library/windows/desktop/aa364994(v=vs.85).aspx"&gt;GetVolumeNameForVolumeMountPoint&lt;/a&gt; on the input path.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Below is a sample requestor code snippet to illustrate how backup applications use IVssBackupComponentsEx4::GetRootAndLogicalPrefixPaths to normalize root path and logical prefix path for shadow copy creation and backup of files under DFS-N path.&lt;/p&gt;
&lt;table style="width: 500px;" border="2" cellspacing="2" cellpadding="2"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="492" valign="top"&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;#define CHK_COM(X) \&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;{\&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; hr = X; \&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (FAILED(hr)) \&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;{\&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;wprintf(L"COM Call %S failed: 0x%08lx", #X, hr );\&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;goto _Exit;\&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;}\&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;&amp;hellip;&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;CComPtr &amp;lt;IVssBackupComponents&amp;gt; spBackup;&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;CComPtr&amp;lt;IVssBackupComponentsEx4&amp;gt;spBackup4;&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;CComPtr &amp;lt;IVssAsync&amp;gt; spAsync;&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;VSS_ID shadowCopySetId = GUID_NULL;&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;VSS_ID shadowCopyId = GUID_NULL;&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;VSS_SNAPSHOT_PROP shadowCopyProp;&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;// GatherWriterMetadata and metadata enumeration are not shown below. &lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;// Instead, we assumes one writer component path to be shadow copied and backed up.&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;// &lt;/span&gt;&lt;a href="file://dfsworld/logical/path/guests"&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;\\dfsworld\logical\path\guests&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt; is a DFS-N link to &lt;/span&gt;&lt;a href="file://server1/guests"&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;\\server1\guests&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;// vm1 is a directory under &lt;/span&gt;&lt;a href="file://server1/guests"&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;\\server1\guests&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt; which contains the vhd file vm1.vhd that needs to &lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;// be backed up.&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;LPWSTR pwszWriterComponentPath = L&amp;ldquo;&lt;/span&gt;&lt;a href="file://dfsworld/logical/path/guests/vm1"&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;\\dfsworld\logical\path\guests\vm1&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;&amp;rdquo;;&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;LPWSTR pwszWriterComponentFileSpec = L&amp;ldquo;vm1.vhd&amp;rdquo;;&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;LPWSTR pwszRootPath = NULL;&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;LPWSTR pwszLogicalPrefix = NULL;&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;HRESULT hr = S_OK;&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;CHK_COM(CreateVssBackupComponents (&amp;amp;spBackup));&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;CHK_COM(spBackup-&amp;gt;SafeQI(IVssBackupComponentsEx4, &amp;amp;spBackup4));&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;// The caller must free the pwszRootPath and pwszLogicalPrefix strings allocated by GetRootAndLogicalPrefix()&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;CHK_COM(spBackup-&amp;gt;GetRootAndLogicalPrefixPaths(writerComponentPath, &amp;amp;pwszRootPath, &amp;amp;pwszLogicalPrefix));&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;// pwszRootPath == &amp;ldquo;\\server1\guests&amp;rdquo;&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;// pwszLogicalPrefix == &amp;ldquo;\\dfsworld\logical\path\guests&amp;rdquo;&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;CHK_COM(spBackup-&amp;gt;StartSnapshotSet(&amp;amp;shadowCopySetId));&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;CHK_COM(spBackup-&amp;gt;AddToSnapshotSet(rootPath, GUID_NULL, &amp;amp;shadowCopyId));&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;CHK_COM(spBackup-&amp;gt;DoSnapshotSet(&amp;amp;spAsync));&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;CHK_COM(spAsync-&amp;gt;Wait());&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;CHK_COM(spBackup-&amp;gt;GetSnapshotProperties(shadowCopyId, &amp;amp;shadowCopyProp));&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;// Build snapshot relative path for file copy&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;// 1. Initialize it to shadow copy share path \\server1\guests@{guid}&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;CComBSTR shadowCopyPath = shadowCopyProp-&amp;gt;m_wszSnapshotDevicePath;&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;// 2. Get the relative path below the logical prefix path, &amp;ldquo;\vm1\vm1.vhd&amp;rdquo;&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;//This is based on the logical prefix path returned from GetRootAndLogicalPrefixPaths,&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;CComBSTR relativePath = writerComponentPath + wcslen(logicalPrefix);&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;// 3. Append the relativePath and the wrierComponentFileSpec \\server1\guest@{guid}\vm1\&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;shadowCopyPath += relativePath;&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;// For each file (backupItem) that matches the file spec under the shadowCopyPath, copy the file to backup store&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;// \\server1\guest@{guid}\vm1\vm1.vhd&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;CComBSTR backupItem = shadowCopyPath+writerComponentFileSpec;&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;HANDLE h = CreateFile(&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;backupItem,&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;&amp;hellip;&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;);&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;// BackupRead and Copy from backItem&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;&amp;hellip;&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;_Exit:&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;// The caller must free the string allocated by GetRootAndLogicalPrefix()&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;if (pwszRootPath!=NULL)&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;CoTaskMemFree(&amp;amp;pwszRootPath);&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;If (pwszLogicalPrefix!=NULL)&lt;/span&gt;&lt;/p&gt;
&lt;span style="font-size: xx-small;" size="1"&gt;&lt;/span&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;ContaskMemFree(&amp;amp;pwszLogicalPrefix);&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2&gt;VSS writer&lt;/h2&gt;
&lt;p&gt;There is no change needed from VSS writer to support this feature as long as the application itself allows storing application data on SMB share.&lt;/p&gt;
&lt;h2&gt;VSS provider&lt;/h2&gt;
&lt;p&gt;On application server, the new file share shadow copy provider handles the file share shadow copy life cycle management. There is no change needed from existing VSS software/hardware provider to support this feature.&lt;/p&gt;
&lt;h1&gt;Developer tools&lt;/h1&gt;
&lt;h5&gt;Betest for backup/restore Hyper-V over SMB&lt;/h5&gt;
&lt;p&gt;BETest is a VSS requester that tests advanced backup and restore operations. It is included in the Microsoft Windows Software Development Kit (SDK) since Windows Vista and later. However, only the BETest in Windows Server 2012 SDK has been extended to support this feature. Full detail about betest can be found in the &lt;a href="http://msdn.microsoft.com/en-us/library/windows/desktop/bb530721(v=vs.85).aspx"&gt;BETest document&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Below we give an example to online backup and restore Hyper-V VM running over SMB shares. Please refer to the &lt;a href="http://technet.microsoft.com/en-us/library/jj134187"&gt;Hyper-V over SMB guide&lt;/a&gt; to configure Hyper-V over SMB.&lt;/p&gt;
&lt;p&gt;1. Download &lt;a href="http://msdn.microsoft.com/en-us/windows/hardware/hh852363.aspx"&gt;Windows 8 SDK&lt;/a&gt; which includes BETest tool.&lt;/p&gt;
&lt;p&gt;2. Get the VMId of the Hyper-V VM to be backed up by running powershell cmdlet. Assuming the VM to be backed up is named &lt;b&gt;test-vm10&lt;/b&gt;, you run:&lt;/p&gt;
&lt;table style="width: 500px;" border="2" cellspacing="2" cellpadding="2"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="500" valign="top"&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;PS C:\test&amp;gt; get-vm -name &lt;b&gt;test-vm10&lt;/b&gt;|select vmid&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;VMId&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;----&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;c8a460ae-8aa2-4219-8c4f-532479fb854a&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;3. Create the backup component file vm10.xml for backup.&lt;/p&gt;
&lt;p&gt;The Hyper-V writer ID is a GUID constant {66841cd4-6ded-4f4b-8f17-fd23f8ddc3de}. Each VM is handled by Hyper-V writer individually as a separate component with a componentName equals to its VMId. To select more VMs for backup, you can repeat step 2 to get all the VMIDs and put each into &amp;lt;Component&amp;gt; &amp;lt;/Component&amp;gt;.&lt;/p&gt;
&lt;table style="width: 500px;" border="2" cellspacing="2" cellpadding="2"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="500" valign="top"&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;&amp;lt;BETest&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;&amp;lt;Writer writerid="66841cd4-6ded-4f4b-8f17-fd23f8ddc3de"&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;&amp;lt;Component componentName="c8a460ae-8aa2-4219-8c4f-532479fb854a"&amp;gt;&amp;lt;/Component&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;&amp;lt;/Writer&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;&amp;lt;/BETest&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;4. Create a shadow copy and Full backup based on the components selected by vm10.xml.&lt;/p&gt;
&lt;p&gt;Upon completion of execution, the application consistent Hyper-V VM VHD and VM configuration file for VM (test-vm10) will be snapshotted and copied to backup destination specified with &amp;ldquo;/D&amp;rdquo; parameter (C:\backupstore). A new backup document vm10backup.xml specified by /S parameter will be created as well. It will be used with the file in the backup destination for restore later.&lt;/p&gt;
&lt;table style="width: 500px;" border="2" cellspacing="2" cellpadding="2"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="500" valign="top"&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;betest /b /V /T FULL /D C:\backupstore /X vm10.xml /S vm10backup.xml&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;If you just want to create the snapshot for testing purpose without waiting for the long file copying, you can just run the following command without /D and /S parameters like below.&lt;/p&gt;
&lt;table style="width: 500px;" border="2" cellspacing="2" cellpadding="2"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="500" valign="top"&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;betest /b /V /T FULL /X vm10.xml&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;During step 4, the betest output includes lots of writer information during shadow copy creation and backup. The key to determine if the backup succeeds or not is to check writer status at the end of the output as highlighted below after backup complete. You need to rerun step 4 until you get an application consistent backup indicated by STABLE writer state after backup. If you keep getting errors during step 4, vsstrace and netmon traces discussed below are the most useful tools to help investigation.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style="width: 500px;" border="2" cellspacing="2" cellpadding="2"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="500" valign="top"&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;status After Backup Complete (14 writers)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;Status for writer Task Scheduler Writer: STABLE(0x00000000)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;Status for writer VSS Metadata Store Writer: STABLE(0x00000000)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;Status for writer Performance Counters Writer: STABLE(0x00000000)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;Status for writer Microsoft Hyper-V VSS Writer: STABLE(0x00000000)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;Status for writer System Writer: STABLE(0x00000000)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;Application error: (0; &amp;lt;unknown error&amp;gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;Status for writer ASR Writer: STABLE(0x00000000)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;Application error: (0; &amp;lt;unknown error&amp;gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;Status for writer BITS Writer: STABLE(0x00000000)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;Application error: (0; &amp;lt;unknown error&amp;gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;Status for writer Shadow Copy Optimization Writer: STABLE(0x00000000)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;Application error: (0; &amp;lt;unknown error&amp;gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;Status for writer Dedup Writer: STABLE(0x00000000)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;Application error: (0; &amp;lt;unknown error&amp;gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;Status for writer Registry Writer: STABLE(0x00000000)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;Application error: (0; &amp;lt;unknown error&amp;gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;Status for writer COM+ REGDB Writer: STABLE(0x00000000)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;Application error: (0; &amp;lt;unknown error&amp;gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;Status for writer WMI Writer: STABLE(0x00000000)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;Application error: (0; &amp;lt;unknown error&amp;gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;Status for writer Cluster Database: STABLE(0x00000000)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;Application error: (0; &amp;lt;unknown error&amp;gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;Status for writer Cluster Shared Volume VSS Writer: STABLE(0x00000000)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;Application error: (0; &amp;lt;unknown error&amp;gt;)&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;5. Restore the VM&lt;/p&gt;
&lt;p&gt;You can restore the VM by specifying the backup document using /S and the backup store location using /D parameter.&lt;/p&gt;
&lt;table style="width: 500px;" border="2" cellspacing="2" cellpadding="2"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="500" valign="top"&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;betest /R /D c:\backupstore /S vm10backup.xml&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;VSStrace for file share shadow copy&lt;/h3&gt;
&lt;p&gt;This feature adds two major components to Windows Server 2012:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;File Share Shadow Copy Provider running on the application server&lt;/li&gt;
&lt;li&gt;File Share Shadow Copy Agent running on the file server or file server clusters&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Both of them support detailed ETW traces that are compatible with existing VSSTrace tool included in &lt;a href="http://msdn.microsoft.com/en-us/windows/hardware/hh852363.aspx"&gt;Windows 8 SDK&lt;/a&gt;, which makes it easy to correlate File Share Provider VSS Provider/Agent activities with VSS infrastructure for trace analysis.&lt;/p&gt;
&lt;p&gt;To turn on logging on the application server, open an elevated command prompt and run&lt;/p&gt;
&lt;table style="width: 500px;" border="2" cellspacing="2" cellpadding="2"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="500" valign="top"&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;Vsstrace.exe -f 0 +WRITER +COORD +FSSPROV +indent -o vssTrace_as.log&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;To turn off tracing on the application server, go back to the command prompt on that machine and hitting &amp;ldquo;ctrl + c&amp;rdquo;. The log file vssTrace_as.log generated is a text file that contains detail information about activities of file share shadow copy provider, VSS and VSS writers.&lt;/p&gt;
&lt;p&gt;To turn on logging on the file server, open an elevated command prompt and run:&lt;/p&gt;
&lt;table style="width: 500px;" border="2" cellspacing="2" cellpadding="2"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="500" valign="top"&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;Vsstrace.exe -f 0 +WRITER +COORD +FSSAGENT +indent -o vssTrace_fs.log&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;To turn off tracing on the file server, go back to the command prompt on that machine and hitting &amp;ldquo;ctrl + c&amp;rdquo;. The log file vssTrace_fs.log generated is a text file that contains detail information about activities of file share shadow copy agent, VSS and VSS writers.&lt;/p&gt;
&lt;p&gt;If you hit Hyper-V host-based backup issue, it is useful to gather local VSS trace inside the guest OS. To turn on logging inside the guest OS, open an elevated command prompt in VM and run:&lt;/p&gt;
&lt;table style="width: 500px;" border="2" cellspacing="2" cellpadding="2"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="500" valign="top"&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;Vsstrace.exe -f 0 +WRITER +COORD +SWPRV +indent -o vssTrace_guest.log&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;To turn off tracing on the VM, go back to the command prompt on that machine and hitting &amp;ldquo;ctrl + c&amp;rdquo;. The log file vssTrace_guest.log generated is a text file that contains detail information about activities of VSS, VSS SYSTEM Provider and VSS writers.&lt;/p&gt;
&lt;h4&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h1&gt;MS-FSRVP RPC protocol&lt;/h1&gt;
&lt;p&gt;The Windows 2012 Server &amp;ldquo;File Share Shadow Copy Provider&amp;rdquo; and &amp;ldquo;File Share Shadow Copy Agent&amp;rdquo; communicate through a new RPC-based protocol called MS-FSRVP. Its open protocol architecture offers the flexibility to allow 3&lt;sup&gt;rd&lt;/sup&gt; party ISV/IHV to implement their file share shadow copy agent RPC server on non-Windows servers and interop with VSS-based backup application running on Windows Server 2012. There are 13 protocol messages for shadow copy life cycle management. In addition to the protocol document available &lt;a href="http://msdn.microsoft.com/en-us/library/hh554852(v=prot.10).aspx"&gt;http://msdn.microsoft.com/en-us/library/hh554852(v=prot.10).aspx&lt;/a&gt;, an FSRVP netmon parser is provided to understand and investigate the protocol sequence issues.&lt;/p&gt;
&lt;p&gt;To trace the FSRVP activities with Netmon:&lt;/p&gt;
&lt;p&gt;1. Download and install Microsoft Netmon and parser package on the application server where the shadow copy and backup are initiated.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Netmon from &lt;a href="http://www.microsoft.com/en-us/download/details.aspx?id=4865"&gt;http://www.microsoft.com/en-us/download/details.aspx?id=4865&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Netmon parser from &lt;a href="http://nmparsers.codeplex.com/"&gt;http://nmparsers.codeplex.com/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;2. Start the Netmon, click &amp;ldquo;Tools-&amp;gt;Option&amp;rdquo; menu and active &amp;ldquo;Windows Profile&amp;rdquo; to enable FSRVP parser as shown below.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/8304.clip_5F00_image002_5F00_08536541.jpg"&gt;&lt;img width="308" height="343" title="clip_image002" style="display: inline; background-image: none;" alt="clip_image002" src="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/3823.clip_5F00_image002_5F00_thumb_5F00_7853FAAF.jpg" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;3. Start a new capture, key in &amp;ldquo;FSRVP&amp;rdquo; and apply the protocol filter in the Filter window&lt;/p&gt;
&lt;p&gt;4. Create file share shadow copy using diskshadow/betest or 3&lt;sup&gt;rd&lt;/sup&gt; party backup software that is compatible with this feature.&lt;/p&gt;
&lt;p&gt;In the example below, I create a shadow copy for SMB share &lt;a href="file:///\\yxy-vm1\data%20on%20yxy-vm1"&gt;\\yxy-vm1\data on yxy-vm1&lt;/a&gt; (file server) from yxy-vm2 (application server)&lt;/p&gt;
&lt;table style="width: 500px;" border="2" cellspacing="2" cellpadding="2"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="500" valign="top"&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;C:\&amp;gt;diskshadow&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;Microsoft DiskShadow version 1.0&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;Copyright (C) 2012 Microsoft Corporation&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;On computer: YXY-VM2, 7/2/2012 10:54:57 AM&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;DISKSHADOW&amp;gt; add volume \\yxy-vm1\data&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;DISKSHADOW&amp;gt; create&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;Alias VSS_SHADOW_1 for shadow ID {3c36b6e5-ba12-4ba4-92c7-fa9cf1e35bcc} set as environment variable.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;Alias VSS_SHADOW_SET for shadow set ID {9c647280-b2db-40c7-b729-3b82fd71e851} set as environment variable.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;Querying all shadow copies with the shadow copy set ID {9c647280-b2db-40c7-b729-3b82fd71e851}&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;* Shadow copy ID = {3c36b6e5-ba12-4ba4-92c7-fa9cf1e35bcc} %VSS_SHADOW_1%&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;- Shadow copy set: {9c647280-b2db-40c7-b729-3b82fd71e851} %VSS_SHADOW_SET%&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;- Original count of shadow copies = 1&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;- Original volume name: \\YXY-VM1\DATA\ [volume not on this machine]&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;- Creation time: 7/2/2012 10:56:02 AM&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;- Shadow copy device name: \\YXY-VM1\DATA@{009F5DC8-856A-4102-9313-5BBB00024F29}&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;- Originating machine: YXY-VM1&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;- Service machine: yxy-vm2.dfsr-w8.nttest.microsoft.com&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;- Not exposed&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;- Provider ID: {89300202-3cec-4981-9171-19f59559e0f2}&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;- Attributes: Auto_Release FileShare&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; font-size: xx-small;" face="Consolas" size="1"&gt;Number of shadow copies listed: 1&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;5. As show in the Netmon trace below, the complete shadow copy creation sequence with FSRVP protocol includes IsPathSupported, GetSupportedVersion, SetCOntext, StartShadowCopySet, AddToShadowCopySet, PrepareShadowCopySet, CommitShadowCopySet, ExposeShadowCopySet, GetShareMapping and RecoveryCompleteShadowCopySet. If any error happens in the middle, the AbortShadowCopySet message will be sent to cancel the file server shadow copy processing.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/2043.clip_5F00_image004_5F00_5BE66CF5.jpg"&gt;&lt;img width="575" height="223" title="clip_image004" style="display: inline; background-image: none;" alt="clip_image004" src="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/8787.clip_5F00_image004_5F00_thumb_5F00_6F4B58FE.jpg" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;Conclusion&lt;/h4&gt;
&lt;p&gt;I hope this introduction makes it easier for backup application developers to add support for this feature, which provides backup of application servers that store their data files on SMB file shares.&lt;/p&gt;
&lt;p&gt;Xiaoyu Yao&lt;/p&gt;
&lt;p&gt;Software Development Engineer&lt;/p&gt;
&lt;h4&gt;&lt;a name="_Additional_resources"&gt;&lt;/a&gt;&lt;a name="_Additional_resources_1"&gt;&lt;/a&gt; &lt;br /&gt;Additional resources&lt;/h4&gt;
&lt;p&gt;Application consistent VSS snapshot creation workflow:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa384589(v=vs.85)."&gt;http://msdn.microsoft.com/en-us/library/aa384589(v=vs.85). &lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3509468" width="1" height="1"&gt;</description></item><item><title>VSS for SMB File Shares</title><link>http://blogs.technet.com/b/clausjor/archive/2012/06/14/vss-for-smb-file-shares.aspx</link><pubDate>Thu, 14 Jun 2012 17:01:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3504801</guid><dc:creator>clausjor</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/clausjor/rsscomments.aspx?WeblogPostID=3504801</wfw:commentRss><comments>http://blogs.technet.com/b/clausjor/archive/2012/06/14/vss-for-smb-file-shares.aspx#comments</comments><description>&lt;p&gt;In the next generation of Windows Server, Windows Server 2012, Hyper-V introduces support for storing virtual machine files on SMB 3.0 file shares. &lt;a href="http://blogs.technet.com/b/windowsserver/archive/2012/03/15/windows-server-8-taking-server-application-storage-to-windows-file-shares.aspx"&gt;This blog post&lt;/a&gt; contains more detail on the SMB 3.0 enhancements to support this scenario.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://technet.microsoft.com/en-us/library/ee923636.aspx"&gt;Volume Shadow Copy Service (VSS)&lt;/a&gt; is a framework that enables volume backups to be performed while applications on a system continue to write to the volumes. To support applications that store their data files on remote SMB file shares, we introduce a new feature called &amp;ldquo;VSS for SMB File Shares&amp;rdquo; in Windows Server 2012. This feature enables VSS-aware backup applications to perform application consistent shadow copies of VSS-aware server applications storing data on SMB 3.0 file shares. Prior to this feature, VSS only supported performing shadow copies of data stored on local volumes.&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;h3&gt;Technical Overview&lt;/h3&gt;
&lt;p&gt;VSS for SMB File Shares is an extension to the existing VSS infrastructure and consists of four parts:&lt;/p&gt;
&lt;p&gt;&amp;bull; A new VSS provider named &amp;ldquo;File Share Shadow Copy Provider&amp;rdquo; (fssprov.dll). The File Share Shadow Copy Provider is invoked on the server running the VSS-aware application and manages shadow copies on remote Universal Naming Convention (UNC) paths where the application stores its data files. It relays the shadow copy request to File Share Shadow Copy Agents.&lt;/p&gt;
&lt;p&gt;&amp;bull; A new VSS requestor named &amp;ldquo;File Share Shadow Copy Agent&amp;rdquo; (fssagent.dll). The File Share Shadow Copy Agent is invoked on the file server hosting the SMB 3.0 file shares (UNC path) storing the application&amp;rsquo;s data files. It manages file share to volume mappings and interacts with the file server&amp;rsquo;s VSS infrastructure to perform shadow copies of the volumes backing the SMB 3.0 file shares where the VSS-aware applications stores their data files.&lt;/p&gt;
&lt;p&gt;&amp;bull; A new RPC protocol named &amp;ldquo;File Server Remote VSS Protocol&amp;rdquo; (&lt;a href="http://msdn.microsoft.com/en-us/library/hh554852(v=prot.10).aspx"&gt;MSFSRVP&lt;/a&gt;). The new File Share Shadow Copy Provider and the new File Share Shadow Copy Agent are using this new RPC based protocol to coordinate shadow copy requests of data stored on SMB file shares.&lt;/p&gt;
&lt;p&gt;&amp;bull; Enhancements to the VSS infrastructure to support the new File Share Shadow Copy provider, including API updates.&lt;/p&gt;
&lt;p&gt;The diagram below provides a high-level architecture of how VSS for SMB File Shares (red boxes) fits into the existing VSS infrastructure (blue boxes) and 3&lt;sup&gt;rd&lt;/sup&gt; party requestors, writers and providers (green boxes).&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/1401.image_5F00_2.png"&gt;&lt;img width="480" height="275" title="image" style="border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="image" src="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/6786.image_5F00_thumb.png" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The following steps describe the basic Shadow Copy sequence with VSS for SMB File Shares.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A. The Backup Server sends backup request to its Backup Agent (VSS Requestor)&lt;/p&gt;
&lt;p&gt;B. The VSS Requestor gather writer information and normalizes UNC path(s)&lt;/p&gt;
&lt;p&gt;C. The VSS Service retrieves the writer metadata information and returns it to the VSS requestor&lt;/p&gt;
&lt;p&gt;D. The VSS Service sends Prepare Shadow Copy request to the VSS writers involved and the VSS writers flushes buffers and holds writes&lt;/p&gt;
&lt;p&gt;E. The VSS Service sends the Shadow Copy creation request to the File Share Shadow Copy Provider for any UNC paths involved in the Shadow Copy Set&lt;/p&gt;
&lt;p&gt;E.1. The File Share Shadow Copy Provider relays the Shadow Copy creation request to the File Share Shadow Copy Agent on each remote File Server involved in the Shadow Copy Set&lt;/p&gt;
&lt;p&gt;E.2. The File Share Shadow Copy Agent initiates writer-less Shadow Copy creation request to the VSS Service on the File Server&lt;/p&gt;
&lt;p&gt;E.3. The VSS Service on the File Server completes Shadow Copy request using the appropriate VSS hardware or system providers&lt;/p&gt;
&lt;p&gt;E.4. The File Share Shadow Copy Agent returns the Shadow Copy path (Shadow Copy Share) to the File Share Shadow Copy Provider&lt;/p&gt;
&lt;p&gt;F. Once Shadow Copy creation sequence completes on the Application Server, the VSS requestor on the Application Server can retrieve the Shadow Copy properties from the VSS Service&lt;/p&gt;
&lt;p&gt;G. Based on the Shadow Copy device name from the Shadow Copy properties on the Application Server, the Backup Server can access the data on the Shadow Copy shares on the File Servers for backup. The Shadow Copy share will have the same permissions as the original share.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Once the Shadow Copy on the application server is released, the Shadow Copies and associated Shadow Copy shares on the file servers are destroyed.&lt;/p&gt;
&lt;p&gt;If the shadow copy sequence fails at any point, the shadow copy sequence is aborted and the backup application will need to retry.&lt;/p&gt;
&lt;p&gt;For additional details on processing a backup under VSS, see &lt;a href="http://msdn.microsoft.com/en-us/library/aa384589(VS.85).aspx"&gt;http://msdn.microsoft.com/en-us/library/aa384589(VS.85).aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;For additional details on the File Server Remote VSS Protocol, which is being used by the File Share Shadow Copy Provider and File Server Shadow Copy Agent, see &lt;a href="http://msdn.microsoft.com/en-us/library/hh554852(v=prot.10).aspx"&gt;http://msdn.microsoft.com/en-us/library/hh554852(v=prot.10).aspx&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Requirements and supported capabilities&lt;/h3&gt;
&lt;p&gt;VSS for SMB File Shares requires:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Application server and file server must be running Windows Server 2012&lt;/li&gt;
&lt;li&gt;Application server and file server must be domain joined to the same Active Directory domain&lt;/li&gt;
&lt;li&gt;The &amp;ldquo;File Server VSS Agent Service&amp;rdquo; role service must be enabled on the file server&lt;/li&gt;
&lt;li&gt;The backup agent must run in a security context that has backup operators or administrators privileges on both application server and file server&lt;/li&gt;
&lt;li&gt;The backup agent/application must run in a security context that has at least READ permission on file share data that is being backed up.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;VSS for SMB File Shares can also work with 3&lt;sup&gt;rd&lt;/sup&gt; party Network Attached Storage (NAS) appliances or similar solutions. These appliances or solutions must support SMB 3.0 and File Server Remote VSS Protocols.&lt;/p&gt;
&lt;p&gt;VSS for SMB File Shares support:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Application server configured as single server or in a failover cluster&lt;/li&gt;
&lt;li&gt;File servers configured as a single server or in a failover cluster with continuously available or scale-out file shares&lt;/li&gt;
&lt;li&gt;File shares with a single link DFS-Namespaces link target&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;VSS for SMB File Shares has the following limitations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Unsupported VSS capabilities&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Hardware transportable shadow copies&lt;/li&gt;
&lt;li&gt;Writable shadow copies&lt;/li&gt;
&lt;li&gt;VSS fast recovery, where a volume can be quickly reverted to a shadow copy&lt;/li&gt;
&lt;li&gt;Client-Accessible shadow copies (&lt;a href="http://technet.microsoft.com/en-us/library/cc771305.aspx"&gt;Shadow Copy of Shared Folders&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Loopback configurations, where an application server is accessing its data on SMB file shares that are hosted on the same application server are unsupported&lt;/li&gt;
&lt;li&gt;Hyper-V hosts based Shadow Copy of virtual machines, where the application in the virtual machine stores its data on SMB file shares is not supported.&lt;/li&gt;
&lt;li&gt;Data on mount points below the root of the file share will not be included in the shadow copy&lt;/li&gt;
&lt;li&gt;Shadow Copy shares do not support failover&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Deployments&lt;/h3&gt;
&lt;p&gt;The most common deployment of VSS for SMB File Shares is expected to be with Hyper-V, where a Hyper-V server is storing the virtual machine files on remote SMB file share.&lt;/p&gt;
&lt;p&gt;The following sections outlines some example deployments and describe the behavior of each deployment.&lt;/p&gt;
&lt;h4&gt;Example 1: Single Hyper-V server and file server&lt;/h4&gt;
&lt;p&gt;In this deployment there is a single Hyper-V server and a single file server, both un-clustered. The file server has two volumes attached to it, each with a file share. The virtual machine files for VM A are stored on &lt;a href="file:///\\fileserv\share1"&gt;\\fileserv\share1&lt;/a&gt;, which is backed by Volume 1. Some virtual machine files for VM B are stored on &lt;a href="file:///\\fileserv\share1"&gt;\\fileserv\share1&lt;/a&gt;, which is backed by Volume 1, and some are stored on &lt;a href="file:///\\fileserv\share2"&gt;\\fileserv\share2&lt;/a&gt;, which is backed by Volume 2. The virtual machine files for VM C are stored on &lt;a href="file:///\\fileserv\share2"&gt;\\fileserv\share2&lt;/a&gt;, which is backed by Volume 2.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/4628.image8.png"&gt;&lt;img width="480" height="463" title="image" style="border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="image" src="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/7183.image8_5F00_thumb.png" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;When the backup operator performs a Shadow Copy of VM A, the Hyper-V VSS writer will add &lt;a href="file:///\\fileserv\share1"&gt;\\fileserv\share1&lt;/a&gt; to the Shadow Copy set. Once ready, the File Share Shadow Copy Provider relays the Shadow Copy request to &lt;a href="file:///\\fileserv"&gt;\\fileserv&lt;/a&gt;. On the file server, the File Share Shadow Copy Agent invokes the local VSS service to perform a Shadow Copy of Volume 1. Volume 2 will not be part of the Shadow Copy set, since only &lt;a href="file:///\\fileserv\share1"&gt;\\fileserv\share1&lt;/a&gt; was reported by the VSS writer. When the Shadow Copy sequence is complete, a Shadow Copy share &lt;a href="file:///\\fileserv\share1@%7bGUID%7d"&gt;\\fileserv\share1@{GUID}&lt;/a&gt; will be available for the backup application to stream the backup data. Once the backup is complete, the backup application releases the Shadow Copy set and the associated Shadow Copies and Shadow Copy shares are destroyed.&lt;/p&gt;
&lt;p&gt;If the backup operator performs a Shadow Copy of VM B, the Hyper-V VSS writer will report both &lt;a href="file:///\\fileserv\share1"&gt;\\fileserv\share1&lt;/a&gt; and &lt;a href="file:///\\fileserv\share2"&gt;\\fileserv\share2&lt;/a&gt; in the Shadow Copy set. On the file server side, this will result in a Shadow Copy of both Volume 1 and Volume 2 and two Shadow Copy shares &lt;a href="file:///\\fileserv\share1@%7bGUID%7d"&gt;\\fileserv\share1@{GUID}&lt;/a&gt; and &lt;a href="file:///\\fileserv\share2@%7bGUID%7d"&gt;\\fileserv\share2@{GUID}&lt;/a&gt; are created.&lt;/p&gt;
&lt;p&gt;If the backup operator performs a Shadow Copy of VM A and VM B, again the Hyper-V VSS writer will report both &lt;a href="file:///\\fileserv\share1"&gt;\\fileserv\share1&lt;/a&gt; and &lt;a href="file:///\\fileserv\share2"&gt;\\fileserv\share2&lt;/a&gt; in the Shadow Copy set. On the file server side, this will result in a Shadow Copy of both volumes and creation of two Shadow Copy shares.&lt;/p&gt;
&lt;h4&gt;Example 2: Two Hyper-V servers and a single file server&lt;/h4&gt;
&lt;p&gt;In this deployment there are two Hyper-V server and a single file server, all un-clustered. The file server has two volumes attached to it, each with a file share. The virtual machine files for VM A are stored on &lt;a href="file:///\\fileserv\share1"&gt;\\fileserv\share1&lt;/a&gt;, which is backed by Volume 1. Some virtual machine files for VM B is stored on &lt;a href="file:///\\fileserv\share1"&gt;\\fileserv\share1&lt;/a&gt;, which is backed by Volume 1, and some are stored on &lt;a href="file:///\\fileserv\share2"&gt;\\fileserv\share2&lt;/a&gt;, which is backed by Volume 2. The virtual machine files for VM C are stored on &lt;a href="file:///\\fileserv\share2"&gt;\\fileserv\share2&lt;/a&gt;, which is backed by Volume 2.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/4544.image19_5F00_1.png"&gt;&lt;img width="480" height="322" title="image" style="border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="image" src="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/0827.image19_5F00_thumb_5F00_1.png" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;When the backup operator performs a Shadow Copy of VM B, the Hyper-V VSS writer will report both &lt;a href="file:///\\fileserv\share1"&gt;\\fileserv\share1&lt;/a&gt; and &lt;a href="file:///\\fileserv\share2"&gt;\\fileserv\share2&lt;/a&gt; in the Shadow Copy set. Once ready, the File Share Shadow Copy Provider relays the Shadow Copy request to &lt;a href="file:///\\fileserv"&gt;\\fileserv&lt;/a&gt;. On the file server, the File Share Shadow Copy Agent invokes the local VSS service to perform a Shadow Copy of Volume 1 and Volume 2, since both share1 and share2 are in the Shadow Copy set. When the Shadow Copy sequence is complete, two Shadow Copy shares &lt;a href="file:///\\fileserv\share1@%7bGUID%7d"&gt;\\fileserv\share1@{GUID}&lt;/a&gt; and &lt;a href="file:///\\fileserv\share2@%7bGUID%7d"&gt;\\fileserv\share2@{GUID}&lt;/a&gt; will be available for the backup application to stream the backup data. Once the backup is complete, the backup application releases the Shadow Copy set and the associated Shadow Copies and Shadow Copy shares are destroyed.&lt;/p&gt;
&lt;p&gt;In this deployment the backup operator cannot perform a Shadow Copy of VM A in combination of either VM B or VM C, as they are running on separate Hyper-V hosts. The backup operator can perform a Shadow Copy of VM B and VM C, since both are running Hyper-V server 2.&lt;/p&gt;
&lt;p&gt;It is also worth noting that the backup operator cannot perform Shadow Copy of VM A and VM B (or VM C) in parallel, since the VSS service on the file server can only perform one Shadow Copy at a time. Note that this restriction is only for the time it takes to create the Shadow Copies, not for the entire duration of the backup session.&lt;/p&gt;
&lt;h4&gt;Example 3: Two Hyper-V servers and two file servers&lt;/h4&gt;
&lt;p&gt;In this deployment there are two Hyper-V server and two file servers, all un-clustered. Each file server has a volume attached to it, each with a file share. The virtual machine files for VM A are stored on &lt;a href="file:///\\fileserv1\share"&gt;\\fileserv1\share&lt;/a&gt;, which is backed by Volume 1 on File Server 1. Some virtual machine files for VM B is stored on &lt;a href="file:///\\fileserv1\share"&gt;\\fileserv1\share&lt;/a&gt;, which is backed by Volume 1 on File Server 1, and some are stored on &lt;a href="file:///\\fileserv2\share"&gt;\\fileserv2\share&lt;/a&gt;, which is backed by Volume 1 on File Server 2. The virtual machine files for VM C are stored on &lt;a href="file:///\\fileserv2\share"&gt;\\fileserv2\share&lt;/a&gt;, which is backed by Volume 1 on File Server 2.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/6786.image25.png"&gt;&lt;img width="480" height="322" title="image" style="border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="image" src="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/2480.image25_5F00_thumb.png" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;When the backup operator performs a Shadow Copy of VM B, the Hyper-V VSS writer will report both &lt;a href="file:///\\fileserv1\share1"&gt;\\fileserv1\share&lt;/a&gt; and &lt;a href="file:///\\fileserv2\share"&gt;\\fileserv2\share&lt;/a&gt; in the Shadow Copy set. When ready, the File Share Shadow Copy provider relays a Shadow Copy request to both &lt;a href="file:///\\fileserv1"&gt;\\fileserv1&lt;/a&gt; and &lt;a href="file:///\\fileserv2"&gt;\\fileserv2&lt;/a&gt;. On each file server, the File Share Shadow Copy Agent invokes the local VSS service to perform a Shadow Copy of the volume backing the file share. When the Shadow Copy sequence is complete, two Shadow Copy shares &lt;a href="file:///\\fileserv1\share1@%7bGUID%7d"&gt;\\fileserv1\share1@{GUID}&lt;/a&gt; and &lt;a href="file:///\\fileserv2\share2@%7bGUID%7d"&gt;\\fileserv2\share2@{GUID}&lt;/a&gt; will be available for the backup application to stream the backup data. Once the backup is complete, the backup application releases the Shadow Copy set and the associated Shadow Copies and Shadow Copy shares are destroyed on both file servers.&lt;/p&gt;
&lt;p&gt;Similar to the previous deployment example, the backup operator cannot perform a Shadow Copy that spans virtual machines across multiple Hyper-V servers.&lt;/p&gt;
&lt;p&gt;Similar to the previous deployment example, the backup operator cannot perform Shadow Copy of VM A and VM B in parallel, since the VSS service on file server 1 can only perform one Shadow Copy at a time. However, it is possible to perform Shadow Copy of VM A and VM C in parallel since the virtual machines files are stored on separate file servers.&lt;/p&gt;
&lt;h4&gt;Example 4: Two Hyper-V servers and a File Server cluster&lt;/h4&gt;
&lt;p&gt;In this deployment there are two Hyper-V servers and a cluster, configured as a Failover Cluster. The failover cluster has two cluster nodes, node1 and node2. The administrator has configured a file server cluster role, &lt;a href="file:///\\fs1"&gt;\\fs1&lt;/a&gt;, which is currently online on node1, with a single share, &lt;a href="file:///\\fs1\share"&gt;\\fs1\share&lt;/a&gt;, on volume 1. To utilize both cluster nodes, the administrator has configured a second file server cluster role, &lt;a href="file:///\\fs2"&gt;\\fs2&lt;/a&gt;, which is currently online on node2, with a single share, &lt;a href="file:///\\fs2\share"&gt;\\fs2\share&lt;/a&gt;, on volume 2.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/7776.image32.png"&gt;&lt;img width="480" height="333" title="image" style="border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="image" src="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/6204.image32_5F00_thumb.png" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;When the backup operator performs a Shadow Copy of VM A, the Hyper-V VSS writer will report &lt;a href="file:///\\fs1\share"&gt;\\fs1\share&lt;/a&gt; in the Shadow Copy set. When ready, the File Share Shadow Copy Provider relays a Shadow Copy request to &lt;a href="file:///\\fs1"&gt;\\fs1&lt;/a&gt;. As part of the exchange between the File Share Shadow Copy Provider and the File Share Shadow Copy Agent, the Agent will inform the Provider of the physical computer name, node1, which is actually performing the Shadow Copy.&lt;/p&gt;
&lt;p&gt;On node1, the File Share Shadow Copy Agent invokes the local VSS service to perform a Shadow Copy of the volume backing the file share. When the Shadow Copy sequence is complete, a Shadow Copy share &lt;a href="file:///\\node1\share@%7bGUID%7d"&gt;\\node1\share@{GUID}&lt;/a&gt; will be available for the backup application to stream the backup data. Notice the Shadow Copy share, &lt;a href="file:///\\node1\share@%7bGUID%7d"&gt;\\node1\share@{GUID}&lt;/a&gt;, is scoped to the cluster node, node1, and not the virtual computer name, &lt;a href="file:///\\fs1"&gt;\\fs1&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Once the backup is complete, the backup application releases the Shadow Copy set and the associated Shadow Copies and Shadow Copy shares are destroyed. If for some reason the file server cluster role is moved to, or fails over to, node2 before the backup sequence is complete, the Shadow Copy share and the Shadow Copy becomes invalid.If the file server cluster roles is moved back to node1 the Shadow Copy and the corresponding Shadow Copy share will become valid again.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h4&gt;Example 5: Two Hyper-V servers and a Scale-Out File Server cluster&lt;/h4&gt;
&lt;p&gt;In this deployment there are two Hyper-V servers and a cluster, configured as a Failover Cluster. The failover cluster has two cluster nodes, node1 and node2. The administrator has configured a scale-out file server cluster role. The scale-out file server cluster role is new in Windows Server 2012 and is different than the traditional file server cluster role in a number of ways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Uses Clustered Shared Volumes, which is a cluster volume that is accessible on all cluster nodes&lt;/li&gt;
&lt;li&gt;Uses Distributed Network Names, which means the virtual computer name is online on all cluster nodes&lt;/li&gt;
&lt;li&gt;Uses scale-out file shares, which means the share is online on all cluster nodes&lt;/li&gt;
&lt;li&gt;Uses the DNS round robin mechanism to distribute file server clients across cluster nodes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The administrator has configured a single Scale-Out File Server, &lt;a href="file:///\\sofs"&gt;\\sofs&lt;/a&gt;, with a single share, &lt;a href="file:///\\sofs\share"&gt;\\sofs\share&lt;/a&gt;, backed by a single CSV volume, CSV1. Because of DNS round robin, Hyper-V server 1 is accessing the virtual machine files for VM A, on &lt;a href="file:///\\sofs\share"&gt;\\sofs\share&lt;/a&gt;, through node1 and Hyper-V server 2 is accessing the virtual machine files for VM B and VM C, on &lt;a href="file:///\\sofs\share"&gt;\\sofs\share&lt;/a&gt;, through node2.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/1016.image37.png"&gt;&lt;img width="480" height="333" title="image" style="border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="image" src="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/1004.image37_5F00_thumb.png" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;When the backup operator performs a Shadow Copy of VM B and C, the Hyper-V VSS writer will report &lt;a href="file:///\\sofs\share"&gt;\\sofs\share&lt;/a&gt; in the Shadow Copy set. When ready, the File Share Shadow Copy Provider relays a Shadow Copy request to &lt;a href="file:///\\sofs"&gt;\\sofs&lt;/a&gt;. As part of the exchange between the File Share Shadow Copy Provider and the File Share Shadow Copy Agent, the Agent will inform the Provider of the physical computer name which is actually performing the Shadow Copy. In this scenario, the physical computer name will be the name of the CSV coordinator node, and the File Share Shadow Copy Provider will connect to the cluster node that is currently the CSV coordinator node, which could be node1.&lt;/p&gt;
&lt;p&gt;On node1, the File Share Shadow Copy Agent invokes the local VSS service to perform a Shadow Copy of the CSV volume backing the file share. When the Shadow Copy sequence is complete, a Shadow Copy share &lt;a href="file:///\\node1\share@%7bGUID%7d"&gt;\\node1\share@{GUID}&lt;/a&gt; will be available for the backup application to stream the backup data. Notice the Shadow Copy share, &lt;a href="file:///\\node1\share@%7bGUID%7d"&gt;\\node1\share@{GUID}&lt;/a&gt;, is scoped to the cluster node, &lt;a href="file:///\\node1"&gt;\\node1&lt;/a&gt;, and not the virtual computer name, &lt;a href="file:///\\fs1"&gt;\\fs&lt;/a&gt;, similar to example 4.&lt;/p&gt;
&lt;p&gt;Once the backup is complete, the backup application releases the Shadow Copy set and the associated Shadow Copies and Shadow Copy shares are destroyed. If for some reason node1 becomes unavailable before the backup sequence is complete, the Shadow Copy share and the Shadow Copy become invalid. Actions, such as moving the CSV coordinator for CSV1 to node 2, do not affect the Shadow Copy share.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h3&gt;Installation and configuration&lt;/h3&gt;
&lt;p&gt;This section contains information about installing and configuring the File Share Shadow Copy Provider and File Share Shadow Copy Agent.&lt;/p&gt;
&lt;h4&gt;Installation of File Share Shadow Copy Provider&lt;/h4&gt;
&lt;p&gt;The File Share Shadow Copy Provider is installed by default on all editions of Windows Server, so no further installation is necessary.&lt;/p&gt;
&lt;h4&gt;Installation of File Share Shadow Copy Agent&lt;/h4&gt;
&lt;p&gt;To install the File Share Shadow Copy Agent on the file server(s), do the following on each file server:&lt;/p&gt;
&lt;p&gt;Do the following, with administrative privileges, to install the File Server role and the File Server Shadow Copy Agent role service on each file server:&lt;/p&gt;
&lt;h5&gt;GUI&lt;/h5&gt;
&lt;p&gt;1. In the Server Manager Dashboard click &lt;b&gt;Add roles and features&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;2. In the Add Roles and Features Wizard&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;a. In the &lt;b&gt;Before you begin&lt;/b&gt; wizard page, click &lt;b&gt;Next&lt;/b&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;b. In the &lt;b&gt;Select installation type &lt;/b&gt;wizard page, select &lt;b&gt;Role-based or feature-based installation&lt;/b&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;c. In the &lt;b&gt;Select destination server&lt;/b&gt; wizard page, select the server where you want to install the File Share Shadow Copy Agent&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;d. In the &lt;b&gt;Select server roles&lt;/b&gt; wizard page:&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;d.i. Expand File and Storage Services&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;d.ii. Expand File Services&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;d.iii. Check File Server&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;d.iv. Check File Server VSS Agent Service&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;e. In the &lt;b&gt;Select features&lt;/b&gt; wizard page, click &lt;b&gt;Next&lt;/b&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;f. In the &lt;b&gt;Confirm installation selections&lt;/b&gt;, verify File Server and File Server VSS Agent Service are listed, and click &lt;b&gt;Install&lt;/b&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/5040.image42.png"&gt;&lt;img width="480" height="341" title="image" style="border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="image" src="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/5226.image42_5F00_thumb.png" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h5&gt;PowerShell&lt;/h5&gt;
&lt;p&gt;1. Start elevated Windows PowerShell (Run as Administrator)&lt;/p&gt;
&lt;p&gt;2. Run the following command:&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;Add-WindowsFeature -Name File-Services,FS-VSS-Agent&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;Add backup user to Backup Operators local group on file server&lt;/h4&gt;
&lt;p&gt;The user context in which the shadow copy is performed must have the backup privilege on the remote file server(s) that are part of the shadow copy set.&lt;/p&gt;
&lt;p&gt;Commonly this is done by adding the user that is performing the shadow copy to the Backup Operators group on the file server(s).&lt;/p&gt;
&lt;p&gt;To add a user to the local Backup Operators group, do the following with administrative privileges on each file server:&lt;/p&gt;
&lt;h5&gt;GUI&lt;/h5&gt;
&lt;p&gt;1. In the Server Manager Dashboard click &lt;b&gt;Tools &lt;/b&gt;and select&lt;b&gt; Computer Management&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;2. &lt;b&gt;In Computer Management:&lt;/b&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;a. Expand&lt;b&gt; Local Users and Groups&lt;/b&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;b. Expand&lt;b&gt; Groups&lt;/b&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;c. In the results pane&lt;b&gt;, &lt;/b&gt;double click&lt;b&gt; Backup Operators&lt;/b&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;d. In the &lt;b&gt;Backup Operators Properties &lt;/b&gt;page&lt;b&gt;, &lt;/b&gt;click&lt;b&gt; Add&lt;/b&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;e. Type the username to add to the Backup Operators group, click &lt;b&gt;OK&lt;/b&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;f. In the &lt;b&gt;Backup Operators Properties &lt;/b&gt;page&lt;b&gt;, &lt;/b&gt;click&lt;b&gt; OK&lt;/b&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;g&lt;strong&gt;.&lt;/strong&gt; Close &lt;b&gt;Computer Management&lt;/b&gt;&lt;/p&gt;
&lt;h5&gt;Windows PowerShell&lt;/h5&gt;
&lt;p&gt;1. Start elevated Windows PowerShell (Run as Administrator)&lt;/p&gt;
&lt;p&gt;2. Run the following commands, adjusting user account and file server name to your environment:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;$objUser = [ADSI]("WinNT://&lt;i&gt;domain/user&lt;/i&gt;")&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;$objGroup = [ADSI]("WinNT://&lt;i&gt;fileserv&lt;/i&gt;/Backup Operators")&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;$objGroup.PSBase.Invoke("Add",$objUser.PSBase.Path)&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;Perform a Shadow Copy&lt;/h3&gt;
&lt;p&gt;To perform a Shadow Copy of an applications data that is stored on a file share, a VSS-aware backup application that supports VSS for SMB File Shares functionality must be used.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Note&lt;/b&gt;: Windows Server Backup in Windows Server 2012 does not support VSS for SMB File Shares.&lt;/p&gt;
&lt;p&gt;The following section shows examples of performing a Shadow Copy of a virtual machine that has its data files stored on a SMB file share, using:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;DISKSHADOW&lt;/li&gt;
&lt;li&gt;Microsoft System Center Data Protection Manager 2012 SP1 CTP1&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The following diagram illustrates the configuration of the setup used for the examples in this section:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/7183.image47.png"&gt;&lt;img width="480" height="320" title="image" style="border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="image" src="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/3580.image47_5F00_thumb.png" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The following details the configuration of the virtual machine:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;1. Start elevated Windows PowerShell (Run as Administrator) and do the following:&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;PS C:\Users\administrator.SMBTEST&amp;gt; &lt;/span&gt;&lt;span style="background-color: #cccccc;"&gt;Get-VM | select VMName, State, Path | FL&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="background-color: #cccccc;"&gt;VMName : vm1&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="background-color: #cccccc;"&gt;State : Running&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="background-color: #cccccc;"&gt;Path : \\smbsofs\vm\vm1\vm1&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;DISKSHADOW&lt;/h4&gt;
&lt;p&gt;To perform a Shadow Copy of virtual machine using DISKSHADOW on the Hyper-V hosts (clausjor04):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;1. Start elevated Windows PowerShell (Run as Administrator) and do the following:&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;PS C:\Users\administrator.SMBTEST&amp;gt; DISKSHADOW&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;Microsoft DiskShadow version 1.0&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;Copyright (C) 2012 Microsoft Corporation&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;On computer: CLAUSJOR04, 5/30/2012 5:34:42 PM&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;DISKSHADOW&amp;gt; Writer Verify {66841cd4-6ded-4f4b-8f17-fd23f8ddc3de}&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;DISKSHADOW&amp;gt; &lt;span style="background-color: #ffc000;"&gt;Set Context Persistent&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;DISKSHADOW&amp;gt; Set MetaData vm1backup.cab&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;DISKSHADOW&amp;gt; Begin Backup&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;DISKSHADOW&amp;gt; &lt;span style="background-color: #ffff00;"&gt;Add Volume \\smbsofs\vm\vm1&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;DISKSHADOW&amp;gt; Create&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;Alias VSS_SHADOW_1 for shadow ID {7b53b887-76e5-4db8-821d-6828e4cbe044} set as environment variable.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;Alias VSS_SHADOW_SET for shadow set ID {2bef895d-5d3f-4799-8368-f4bfc684e95b} set as environment variable.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;Querying all shadow copies with the shadow copy set ID {2bef895d-5d3f-4799-8368-f4bfc684e95b}&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;* Shadow copy ID = {7b53b887-76e5-4db8-821d-6828e4cbe044} %VSS_SHADOW_1%&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;- Shadow copy set: {2bef895d-5d3f-4799-8368-f4bfc684e95b} %VSS_SHADOW_SET%&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;- Original count of shadow copies = 1&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;- Original volume name: \\SMBSOFS\VM\ [volume not on this machine]&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;- Creation time: 5/30/2012 5:35:52 PM&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;- Shadow copy device name: &lt;span style="background-color: #00ff00;"&gt;\\FSF-260403-09\VM@{F1C5E17A-4168-4611-9CD4-8366F9F935C3}&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;- Originating machine: FSF-260403-09&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;- Service machine: CLAUSJOR04.SMBTEST.stbtest.microsoft.com&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;- Not exposed&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;- Provider ID: {89300202-3cec-4981-9171-19f59559e0f2}&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas;" face="Consolas"&gt;&lt;span style="background-color: #cccccc;"&gt;- Attributes: &lt;span style="background-color: #ffc000;"&gt;No_Auto_Release Persistent FileShare&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;Number of shadow copies listed: 1&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;DISKSHADOW&amp;gt; End Backup&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The &lt;b&gt;Writer Verify&lt;/b&gt; command specifies that the backup or restore operation must fail if the writer or component is not included. For more information see this &lt;a href="http://blogs.technet.com/b/m2/archive/2008/04/17/invoking-diskshadow-to-back-up-a-virtual-machine-from-a-hyper-v-host.aspx"&gt;TechNet article&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;b&gt;Set Context Persistent&lt;/b&gt; command (and attributes), highlighted in orange, sets the Shadow Copy to be persistent, meaning that it is up to the user or application to delete the Shadow Copy when done.&lt;/p&gt;
&lt;p&gt;The &lt;b&gt;Set MetaData&lt;/b&gt; stores the metadata information for the Shadow Copy, which is needed for restore, in the specified file.&lt;/p&gt;
&lt;p&gt;The &lt;b&gt;Add Volume&lt;/b&gt; command, highlighted in yellow, adds the UNC path to the Shadow Copy set. You can specify multiple paths by repeating the &lt;b&gt;Add Volume&lt;/b&gt; command.&lt;/p&gt;
&lt;p&gt;The &lt;b&gt;Create&lt;/b&gt; command, initiates the Shadow Copy. Once the Shadow Copy creation is complete, DISKSHADOW outputs the properties of the Shadow Copy. The Shadow Copy device name, highlighted in green, is the path for the Shadow Copy data, which we can copy to the backup store using XCOPY or similar tools.&lt;/p&gt;
&lt;p&gt;During the backup session, you can see the virtual machine status reporting &amp;ldquo;Backing up..&amp;rdquo; in Hyper-V Manager. The backup session starts with the CREATE command and ends with the END BACKUP command in the DISKSHADOW sequence above.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/8863.clip_5F00_image018_5F00_2.jpg"&gt;&lt;img width="480" height="73" title="clip_image018" style="border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="clip_image018" src="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/3157.clip_5F00_image018_5F00_thumb.jpg" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;After the Shadow Copy is complete, we can browse the Shadow Copy share (Shadow Copy device name from above) and copy the data we want to back up to an alternate location:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;1. Start elevated Windows PowerShell (Run as Administrator) and do the following:&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;PS C:\Users\administrator.SMBTEST&amp;gt; Get-ChildItem -Recurse -Path "&lt;span style="background-color: #00ff00;"&gt;\\FSF-260403-09\VM@{F1C5E17A-4168-4611-9CD4-8366F9F935C3}&lt;/span&gt;"&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;Directory: \\FSF-260403-09\VM@{F1C5E17A-4168-4611-9CD4-8366F9F935C3}&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;Mode LastWriteTime Length Name&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;---- ------------- ------ ----&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;d---- 5/30/2012 5:19 PM vm1&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;Directory: \\FSF-260403-09\VM@{F1C5E17A-4168-4611-9CD4-8366F9F935C3}\vm1&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;Mode LastWriteTime Length Name&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;---- ------------- ------ ----&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;d---- 5/30/2012 5:19 PM vm1&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;-a--- 5/30/2012 5:35 PM 8837436928 vm1.vhd&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;Directory: \\FSF-260403-09\VM@{F1C5E17A-4168-4611-9CD4-8366F9F935C3}\vm1\vm1&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;Mode LastWriteTime Length Name&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;---- ------------- ------ ----&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;d---- 5/30/2012 5:19 PM Virtual Machines&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;Directory: \\FSF-260403-09\VM@{F1C5E17A-4168-4611-9CD4-8366F9F935C3}\vm1\vm1\Virtual Machines&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;Mode LastWriteTime Length Name&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;---- ------------- ------ ----&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;d---- 5/30/2012 5:19 PM 87B27972-46C2-406B-87A4-C3FFA1FB6822&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;-a--- 5/30/2012 5:35 PM 28800 87B27972-46C2-406B-87A4-C3FFA1FB6822.xml&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;Directory: \\FSF-260403-09\VM@{F1C5E17A-4168-4611-9CD4-8366F9F935C3}\vm1\vm1\Virtual&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;Machines\87B27972-46C2-406B-87A4-C3FFA1FB6822&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;Mode LastWriteTime Length Name&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;---- ------------- ------ ----&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;-a--- 5/30/2012 5:22 PM 2147602688 87B27972-46C2-406B-87A4-C3FFA1FB6822.bin&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;-a--- 5/30/2012 5:22 PM 20971520 87B27972-46C2-406B-87A4-C3FFA1FB6822.vsv&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Once we are done copying the data, we can go ahead and delete the Shadow Copy, as highlighted below:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;1. Start elevated Windows PowerShell (Run as Administrator) and do the following:&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;PS C:\Users\administrator.SMBTEST&amp;gt; DISKSHADOW&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;Microsoft DiskShadow version 1.0&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;Copyright (C) 2012 Microsoft Corporation&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;On computer: CLAUSJOR04, 5/30/2012 5:44:21 PM&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;DISKSHADOW&amp;gt; Delete Shadows Volume &lt;span style="background-color: #ffff00;"&gt;\\smbsofs\vm&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;Deleting shadow copy {7b53b887-76e5-4db8-821d-6828e4cbe044} on volume \\SMBSOFS\VM\ from provider {89300202-3cec-4981-91&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;71-19f59559e0f2} [Attributes: 0x04400009]...&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;Number of shadow copies deleted: 1&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h5&gt;Restore data from a Shadow Copy&lt;/h5&gt;
&lt;p&gt;To restore the virtual machine data from the backup store back to its original location:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;1. Start elevated Windows PowerShell (Run as Administrator) and do the following:&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span style="background-color: #cccccc;"&gt;DISKSHADOW&amp;gt; Set Context Persistent&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="background-color: #cccccc;"&gt;DISKSHADOW&amp;gt; Load MetaData vm1backup.cab&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="background-color: #cccccc;"&gt;DISKSHADOW&amp;gt; Begin Restore&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="background-color: #cccccc;"&gt;DISKSHADOW&amp;gt; //xcopy files from backup store to the original location&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="background-color: #cccccc;"&gt;DISKSHADOW&amp;gt; End Restore&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The &lt;b&gt;Load MetaData&lt;/b&gt; command loads the metadata information for the Shadow Copy, which is needed for restore, from the specified file.&lt;/p&gt;
&lt;p&gt;After issuing the &lt;b&gt;Begin Restore&lt;/b&gt; command, you can copy the virtual machine files from the backup store to the original location (&lt;a href="file:///\\smbsofs\vm\vm1"&gt;\\smbsofs\vm\vm1&lt;/a&gt;). See this &lt;a href="http://blogs.technet.com/b/enterprise_admin/archive/2009/11/20/diskshadow-xcopy-restore-of-hyper-v.aspx"&gt;TechNet article&lt;/a&gt; for more information on XCOPY restore of Hyper-V&lt;/p&gt;
&lt;h4&gt;Data Protection Manager 2012 SP1 CTP1&lt;/h4&gt;
&lt;p&gt;To perform data protection with Microsoft System Center Data Protection Manager 2012 SP1 CTP1 (DPM), we create a new protection group that includes the virtual machine we want to protect. After installing the DPM agent on the Hyper-V server and allocate some disk to the storage pool, we can create a protection group using the following steps:&lt;/p&gt;
&lt;p&gt;1. In the &lt;b&gt;System Center 2012 DPM Administrator Console&lt;/b&gt;, select &lt;b&gt;Protection&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;2. In the &lt;b&gt;Protection&lt;/b&gt; view, select &lt;b&gt;New&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;3. In Create New Protection Group wizard, do the following&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;a. In &lt;b&gt;Welcome&lt;/b&gt;, click &lt;b&gt;Next&lt;/b&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;b. In&lt;b&gt; Select Protection Group Type, &lt;/b&gt;select&lt;b&gt; Servers&lt;/b&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;c. &lt;b&gt;In Select Group Members&lt;/b&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;c.i. Locate the server where the VM is running&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;c.ii. Expand the Hyper-V node&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;c.iii. Select the virtual machine you want to backup (see screenshot below)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;c.iv. Click &lt;b&gt;Next&lt;/b&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;d. In &lt;b&gt;Select Data Protection Method&lt;/b&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;d.i. Enter a protection group name&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;d.ii. Select &lt;b&gt;I want short-term protection using Disk&lt;/b&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;d.iii. Click&lt;b&gt; Next&lt;/b&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;d.e. Complete the remainder of the wizard using defaults&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/2480.clip_5F00_image020_5F00_2.jpg"&gt;&lt;img width="480" height="359" title="clip_image020" style="border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="clip_image020" src="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/0250.clip_5F00_image020_5F00_thumb.jpg" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;When the protection group is created and the initial replica is completed, you should see the following in the DPM Administrator Console:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/8765.clip_5F00_image022_5F00_2.jpg"&gt;&lt;img width="480" height="118" title="clip_image022" style="border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" alt="clip_image022" src="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/3173.clip_5F00_image022_5F00_thumb.jpg" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;If you inspect the application server during the initial replica using DISKSHADOW, you will be able to see the Shadow Copy in progress. The following shows the list shadows all during the creation of the initial replica:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;DISKSHADOW&amp;gt; list shadows all&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;Querying all shadow copies on the computer ...&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;* Shadow copy ID = {c0024211-bd08-4374-ac47-399df2d20075} &amp;lt;No Alias&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;- Shadow copy set: {28e88c97-f5b1-4124-ae7b-83f5600d54ff} &amp;lt;No Alias&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;- Original count of shadow copies = 1&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;- Original volume name: &lt;span style="background-color: #ffff00;"&gt;\\SMBSOFS.SMBTEST.STBTEST.MICROSOFT.COM\VM\&lt;/span&gt; [volume not on this machine]&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;- Creation time: 5/30/2012 6:49:35 PM&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;- Shadow copy device name: &lt;span style="background-color: #00ff00;"&gt;\\FSF-260403-09.SMBTEST.STBTEST.MICROSOFT.COM\VM@{B6995DEF-A951-4379-9A3E-0B3&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #00ff00;" face="Consolas"&gt;619FB9A6A}&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;- Originating machine: FSF-260403-09&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;- Service machine: CLAUSJOR04.SMBTEST.stbtest.microsoft.com&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;- Not exposed&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;- Provider ID: {89300202-3cec-4981-9171-19f59559e0f2}&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;- Attributes: &lt;span style="background-color: #ffc000;"&gt;Auto_Release FileShare&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;Number of shadow copies listed: 1&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The highlighted in yellow is the remote UNC path which DPM specified for the Shadow Copy. The highlighted in green is the Shadow Copy device name, where DPM access the Shadow Copy data for replication. The highlighted in orange are the attributes used when DPM created the Shadow Copy. In this case the Shadow Copy is auto-release, meaning that the Shadow Copy is automatically released and deleted once DPM stops using it.&lt;/p&gt;
&lt;h3&gt;Tips and Tricks&lt;/h3&gt;
&lt;h4&gt;Event logs&lt;/h4&gt;
&lt;p&gt;VSS for SMB File Shares logs events for the Agent and Provider respectively. The event logs can be found on this path in Event Viewer:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Microsoft-Windows-FileShareShadowCopyProvider&lt;/li&gt;
&lt;li&gt;Microsoft-Windows-FileShareShadowCopyAgent&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Encryption&lt;/h4&gt;
&lt;p&gt;By default the network traffic between the computer running the VSS provider and the computer running the VSS Agent Service requires mutual authentication and is signed. However the traffic is not encrypted, as it doesn&amp;rsquo;t contain any user data. It is possible to enable encryption of network traffic.&lt;/p&gt;
&lt;p&gt;You can control this behavior using Group Policy (gpedit.msc) in &amp;ldquo;Local Computer Policy-&amp;gt;Administrator Templates-&amp;gt;System-&amp;gt;File Share Shadow Copy Provider&amp;rdquo;. You can also configure it in a Group Policy Object in the Active Directory domain.&lt;/p&gt;
&lt;h4&gt;Garbage collecting orphaned Shadow Copies&lt;/h4&gt;
&lt;p&gt;In case of unexpected computer restarts or similar events on the application server after the Shadow Copy has been created on the file server, some Shadow Copies may be left as orphaned on the file server. It is important to remove these Shadow Copies to ensure best possible system performance. By default the VSS Agent Service will remove Shadow Copies older than 24 hours.&lt;/p&gt;
&lt;p&gt;You can control this behavior using Group Policy in &amp;ldquo;Local Computer Policy-&amp;gt;Administrator Templates-&amp;gt;System-&amp;gt;File Share Shadow Copy Agent&amp;rdquo;. You can also configure it in a Group Policy Object in the Active Directory domain.&lt;/p&gt;
&lt;h4&gt;Long running shadow copies&lt;/h4&gt;
&lt;p&gt;The VSS Agent Service maintains a sequence timer during Shadow Copy creation requested by an application server. By default the VSS Agent Service will abort a Shadow Copy sequence if it doesn&amp;rsquo;t complete in 30 minutes to ensure other application servers are not blocked for extended period of time. To configure the file server to use a different value through the registry, set the following registry on each file server&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span style="font-family: Consolas; background-color: #cccccc;" face="Consolas"&gt;Set-ItemProperty -Path "HKLM: SYSTEM\CurrentControlSet\Services\fssagent\Settings" LongWriterOperationTimeoutInSeconds-Value 1800 &amp;ndash;Force&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If you are using a Scale-Out File Server, it may be necessary to adjust the cluster property SharedVolumeVssWriterOperationTimeout as well. The default value is 1800 seconds (minimum is 60 seconds and maximum is 7200 seconds). The backup user is expected to tweak this value based on the expected time for the VSS writer operations during PrepareForSnapshot and PostSnapshot calls (whichever is higher). For example, if a VSS writer is expected to take up to 10 minutes during PrepareForSnapshot and up to 20 minutes during PostSnapshot, the recommended value for SharedVolumeVssWriterOperationTimeout would be 1200 seconds.&lt;/p&gt;
&lt;h4&gt;Accessing file shares using IP addresses&lt;/h4&gt;
&lt;p&gt;In general you should use hostnames (e.g. &lt;a href="file:///\\fileserver\share\&amp;quot; data-mce-href=" file:="" fileserver="" share=""&gt;\\fileserver\share\&lt;/a&gt;) or fully qualified domain names (e.g. &lt;a href="file:///\\fileserver.smbtest.stbtest.microsoft.com\share\&amp;quot; data-mce-href=" file:="" fileserver="" smbtest="" stbtest="" microsoft="" com="" share=""&gt;\\fileserver.smbtest.stbtest.microsoft.com\share\&lt;/a&gt;) when configuring your application server to use SMB file shares. If for some reason you need to use IP addresses (e.g. &lt;a href="file:///\\192.168.1.1\share\&amp;quot; data-mce-href=" file:="" 192="" 168="" 1="" share=""&gt;\\192.168.1.1\share\&lt;/a&gt;), then the following are supported:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: DNS reverse lookup (IP address to host name) must be available to successfully use IP addresses).&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;IPv4:&lt;/p&gt;
&lt;p&gt;Strict four-part dotted-decimal notation, e.g.&lt;a href="file:///\\192.168.1.1\share"&gt;\\192.168.1.1\share&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;IPv6:&lt;/p&gt;
&lt;p&gt;1. Global IPv6 and its literal format, e.g.,&lt;/p&gt;
&lt;p&gt;&lt;a href="file://2001:4898:2a:3:2c03:8347:8ded:2d5b/share"&gt;\\2001:4898:2a:3:2c03:8347:8ded:2d5b\share&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="file:///\\2001-4898-2a-3-2c03-8347-8ded-2d5b.ipv6-literal.net\share"&gt;\\2001-4898-2a-3-2c03-8347-8ded-2d5b.ipv6-literal.net\share&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2. Site Local IPv6 format (Start with &lt;b&gt;FEC0&lt;/b&gt;:)&amp;nbsp; and its literal format&lt;/p&gt;
&lt;p&gt;\\fec0::1fd9:ebee:ea74:ffd8%1\share&lt;/p&gt;
&lt;p&gt;&lt;a href="file:///\\fec0--1fd9-ebee-ea74-ffd8s1.ipv6-literal.net\share"&gt;\\fec0--1fd9-ebee-ea74-ffd8s1.ipv6-literal.net\share&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;3. IPv6 tunnel address and its literal format&lt;/p&gt;
&lt;p&gt;&lt;a href="file://2001:4898:0:fff:0:5efe:172.30.182.42/share"&gt;\\2001:4898:0:fff:0:5efe:172.30.182.42\share&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="file:///\\2001-4898-0-fff-0-5efe-172.30.182.42.ipv6-literal.net\share"&gt;\\2001-4898-0-fff-0-5efe-172.30.182.42.ipv6-literal.net\share&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;IPv6 Link Local addresses (Starts with FE80:) are not supported.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;I hope you enjoyed this introduction to VSS for SMB File Shares and agree how this feature is useful to being able to provide backup of application servers that store their data files on SMB file shares, which includes host-based backup of Hyper-V computers storing virtual machines on SMB file shares.&lt;/p&gt;
&lt;p&gt;Claus Joergensen&lt;/p&gt;
&lt;p&gt;Principal Program Manager&lt;/p&gt;
&lt;p&gt;Windows File Server Team&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3504801" width="1" height="1"&gt;</description></item><item><title>SMB Transparent Failover – making file shares continuously available</title><link>http://blogs.technet.com/b/clausjor/archive/2012/06/07/smb-transparent-failover-making-file-shares-continuously-available.aspx</link><pubDate>Thu, 07 Jun 2012 18:11:25 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3502595</guid><dc:creator>clausjor</dc:creator><slash:comments>7</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.technet.com/b/clausjor/rsscomments.aspx?WeblogPostID=3502595</wfw:commentRss><comments>http://blogs.technet.com/b/clausjor/archive/2012/06/07/smb-transparent-failover-making-file-shares-continuously-available.aspx#comments</comments><description>&lt;h3&gt;&amp;#160;&lt;/h3&gt;  &lt;p&gt;SMB Transparent Failover is one of the key features in the feature set introduced in Server Message Block (SMB) 3.0. SMB 3.0 is new in Windows Server 2012 and Windows 8. I am the program manager for SMB Transparent Failover and in this blog post I will give an overview of this new feature.&lt;/p&gt;  &lt;p&gt;In Windows Server 2012 the file server introduces support for storing server application data, which means that server applications, like Hyper-V and SQL Server, can store their data files, such as virtual machine files or SQL databases on Windows file shares. These server applications expect their storage to reliable and always available and they do not generally handle IO errors or unexpected closures of handles very well. If the server application cannot access its storage this often leads to databases going offline or virtual machines stopping or crashing because they can no longer write to their disk.&lt;/p&gt;  &lt;p&gt;SMB Transparent Failover enables administrators to configure Windows file shares, in Windows Failover Clustering configurations, to be continuously available. Using continuously available file shares enables administrators to perform hardware or software maintenance on any cluster node without interrupting the server applications that are storing their data files on these file shares. Also, in case of a hardware or software failure, the server application nodes will transparently reconnect to another cluster node without interruption of the server applications. In case of a SMB scale-out file share (more on Scale-Out File Server in a following blog post), SMB Transparent Failover allows the administrator to redirect a server application node to a different file server cluster node to facilitate better load balancing.&lt;/p&gt;  &lt;p&gt;For more information on storing server application data on SMB file shares and other features to support this scenario, see &lt;a href="http://blogs.technet.com/b/windowsserver/archive/2012/03/15/windows-server-8-taking-server-application-storage-to-windows-file-shares.aspx"&gt;Windows Server “8” – Taking Server Application Storage to Windows File Shares&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;h1&gt;Installation and configuration&lt;/h1&gt;  &lt;p&gt;SMB Transparent Failover has the following requirements:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;A failover cluster running Windows Server 2012 with at least two nodes. The configuration of servers, storage and networking must pass the all tests performed in the Validate a Configuration wizard.&lt;/li&gt;    &lt;li&gt;File Server role is installed on all cluster nodes.&lt;/li&gt;    &lt;li&gt;Clustered file server configured with one or more file shares created with the continuously available property. This is the default setting.&lt;/li&gt;    &lt;li&gt;SMB client computers running the Windows 8 client or Windows Server 2012.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;To realize SMB Transparent Failover, both the SMB client computer and the SMB server computer must support SMB 3.0, which is introduced in Windows 8 and Windows Server 2012. Computers running down-level SMB versions, such as 1.0, 2.0 or 2.1 can connect and access data on a file share that has the continuously available property set, but will not be able to realize the benefits of the SMB Transparent Failover feature. &lt;/p&gt;  &lt;h2&gt;Installing and creating a Failover Cluster&lt;/h2&gt;  &lt;p&gt;Information about how to install the Failover Clustering feature, creating and troubleshooting a Windows Server 2012 Failover Cluster see these blog posts:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://blogs.msdn.com/b/clustering/archive/2012/04/06/10291601.aspx"&gt;Installing the Failover Cluster Feature and Tools in Windows Server 2012&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/b/clustering/archive/2012/05/01/10299698.aspx"&gt;Creating a Windows Server 2012 Failover Cluster&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/b/clustering/archive/2012/05/07/10301709.aspx"&gt;How to Troubleshoot Create Cluster failures in Windows Server 2012&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;Installing the File Server role&lt;/h2&gt;  &lt;p&gt;Once the Failover Cluster is up and running, we can install the File Server role. Do the following for each node in the Failover Cluster:&lt;/p&gt;  &lt;h3&gt;Graphical User Interface&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;Start &lt;b&gt;Server Manager&lt;/b&gt;&lt;/li&gt;    &lt;li&gt;Click &lt;b&gt;Add roles and features&lt;/b&gt;&lt;/li&gt;    &lt;li&gt;In the &lt;b&gt;Add Roles and Features Wizard, &lt;/b&gt;do the following&lt;b&gt;:&lt;/b&gt;&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;In &lt;b&gt;Before you begin&lt;/b&gt;, click &lt;b&gt;Next&lt;/b&gt;&lt;/li&gt;      &lt;li&gt;In &lt;b&gt;Select installation type&lt;/b&gt;, click &lt;b&gt;Next&lt;/b&gt;&lt;/li&gt;      &lt;li&gt;In &lt;b&gt;Select destination server&lt;/b&gt;, choose the server where you want to install the File Server role, and click &lt;b&gt;Next&lt;/b&gt;&lt;/li&gt;      &lt;li&gt;In &lt;b&gt;Select server roles&lt;/b&gt;, expand &lt;b&gt;File And Storage Services&lt;/b&gt;, expand &lt;b&gt;File and iSCSI Services&lt;/b&gt;, and &lt;b&gt;check&lt;/b&gt; the check box for &lt;b&gt;File Server &lt;/b&gt;and click&lt;b&gt; Next&lt;/b&gt;&lt;/li&gt;      &lt;li&gt;In &lt;b&gt;Select features&lt;/b&gt;, click &lt;b&gt;Next&lt;/b&gt;&lt;/li&gt;      &lt;li&gt;In &lt;b&gt;Confirm installation selections&lt;/b&gt;, click &lt;b&gt;Install&lt;/b&gt;&lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/7411.image_5F00_2.png"&gt;&lt;img title="image" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="image" src="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/8585.image_5F00_thumb.png" width="487" height="344" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;Figure 1 - Installing File Server role&lt;/p&gt;  &lt;h3&gt;PowerShell&lt;/h3&gt;  &lt;p&gt;In an elevated PowerShell shell, do the following:&lt;/p&gt;  &lt;p&gt;&lt;font style="background-color: rgb(204, 204, 204);" face="Consolas"&gt;Add-WindowsFeature -Name File-Services&lt;/font&gt;&lt;/p&gt;  &lt;h2&gt;Create clustered File Server&lt;/h2&gt;  &lt;p&gt;Once the File Server role is installed on all cluster nodes, we can create a clustered file server. In this example we will create a clustered file server of type “File Server for general use” and name it SMBFS. I will provide more information on “Scale-Out File Server for application data” in a follow-up blog post. &lt;/p&gt;  &lt;p&gt;Do the following to create a clustered file server.&lt;/p&gt;  &lt;h3&gt;Graphical User Interface&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;Start &lt;b&gt;Server Manager&lt;/b&gt;&lt;/li&gt;    &lt;li&gt;Click&lt;b&gt; Tools &lt;/b&gt;and select&lt;b&gt; Failover Cluster Manager&lt;/b&gt;&lt;/li&gt;    &lt;li&gt;In the &lt;b&gt;console tree&lt;/b&gt;, do the following&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Select and expand the cluster you are managing&lt;/li&gt;      &lt;li&gt;Select &lt;b&gt;Roles&lt;/b&gt;&lt;/li&gt;      &lt;li&gt;In the &lt;b&gt;Actions&lt;/b&gt; pane, click &lt;b&gt;Configure Role&lt;/b&gt;&lt;/li&gt;      &lt;li&gt;In &lt;b&gt;Before You Begin&lt;/b&gt;, click &lt;b&gt;Next&lt;/b&gt;&lt;/li&gt;      &lt;li&gt;In &lt;b&gt;Select Role&lt;/b&gt;, select &lt;b&gt;File Server&lt;/b&gt; and click &lt;b&gt;Next&lt;/b&gt;&lt;/li&gt;      &lt;li&gt;In &lt;b&gt;File Server Type&lt;/b&gt;, select the type of clustered file server you want to use&lt;/li&gt;      &lt;li&gt;In &lt;b&gt;Client Access Point&lt;/b&gt;, enter the name of the clustered file server&lt;/li&gt;      &lt;li&gt;In &lt;b&gt;Client Access Point&lt;/b&gt;, complete the Network Address for static IP addressed as needed and click &lt;b&gt;Next&lt;/b&gt;&lt;/li&gt;      &lt;li&gt;In &lt;b&gt;Select Storage&lt;/b&gt;, select the disks that you want to assign to this clustered file server and click &lt;b&gt;Next&lt;/b&gt;&lt;/li&gt;      &lt;li&gt;In &lt;b&gt;Confirmation&lt;/b&gt;, review your selections and when ready click &lt;b&gt;Next&lt;/b&gt;&lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/2627.clip_5F00_image004_5F00_2.jpg"&gt;&lt;img title="clip_image004" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="clip_image004" src="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/8407.clip_5F00_image004_5F00_thumb.jpg" width="456" height="317" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;Figure 2 – Select File Server Type&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/7002.clip_5F00_image006_5F00_2.jpg"&gt;&lt;img title="clip_image006" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="clip_image006" src="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/5758.clip_5F00_image006_5F00_thumb.jpg" width="461" height="318" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;Figure 3 - Configure Client Access Point&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/3782.clip_5F00_image008_5F00_2.jpg"&gt;&lt;img title="clip_image008" style="display: inline; background-image: none;" border="0" alt="clip_image008" src="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/2287.clip_5F00_image008_5F00_thumb.jpg" width="464" height="319" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;Figure 4 - Select Storage&lt;/p&gt;  &lt;h3&gt;PowerShell&lt;/h3&gt;  &lt;p&gt;In an elevated PowerShell shell, do the following:&lt;/p&gt;  &lt;p&gt;&lt;font style="background-color: rgb(204, 204, 204);" face="Consolas"&gt;Add-ClusterFileServerRole -Name SMBFS -Storage &amp;quot;Cluster Disk 1&amp;quot; -StaticAddress 192.168.9.99/24 &lt;/font&gt;&lt;/p&gt;  &lt;h2&gt;Create a file share that is continuously available&lt;/h2&gt;  &lt;p&gt;Now that we have created the clustered file server, we can create file shares that are continuously available. In this example we will create a file share named “appstorage” on the clustered file server we created previously. &lt;/p&gt;  &lt;p&gt;Do the following to create a file share that is continuously available:&lt;/p&gt;  &lt;h3&gt;Graphical User Interface&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;Start &lt;b&gt;Server Manager&lt;/b&gt;&lt;/li&gt;    &lt;li&gt;Click&lt;b&gt; Tools &lt;/b&gt;and select&lt;b&gt; Failover Cluster Manager&lt;/b&gt;&lt;/li&gt;    &lt;li&gt;In the &lt;b&gt;console tree&lt;/b&gt;, do the following&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Select and expand the cluster you are managing&lt;/li&gt;      &lt;li&gt;Select &lt;b&gt;Roles&lt;/b&gt;&lt;/li&gt;      &lt;li&gt;In the &lt;b&gt;Results&lt;/b&gt; pane, select the &lt;b&gt;file server&lt;/b&gt; where you want to create the file share and in the &lt;b&gt;Actions&lt;/b&gt; pane click &lt;b&gt;Add File Share&lt;/b&gt;. This will start the&lt;b&gt; New Share Wizard&lt;/b&gt;&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;In the New Share Wizard, do the following&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;In Select Profile, select the appropriate profile (SMB Share – Applications in this example) and click Next&lt;/li&gt;      &lt;li&gt;In &lt;b&gt;Share Location&lt;/b&gt;, select the &lt;b&gt;volume&lt;/b&gt; where you want to create the share and click &lt;b&gt;Next&lt;/b&gt;&lt;/li&gt;      &lt;li&gt;In &lt;b&gt;Share Name&lt;/b&gt;, enter the &lt;b&gt;share name&lt;/b&gt; and click &lt;b&gt;Next&lt;/b&gt;&lt;/li&gt;      &lt;li&gt;In &lt;b&gt;Configure Share Setting, &lt;/b&gt;verify&lt;b&gt; Enable continuous availability &lt;/b&gt;is set and click &lt;b&gt;Next&lt;/b&gt;&lt;/li&gt;      &lt;li&gt;In &lt;b&gt;Specify permissions and control access&lt;/b&gt;, modify the permissions as needed to enable access and click Next&lt;/li&gt;      &lt;li&gt;In &lt;b&gt;Confirmation&lt;/b&gt;, review your selections and when ready click &lt;b&gt;Create&lt;/b&gt;&lt;/li&gt;      &lt;li&gt;Click&lt;b&gt; Close&lt;/b&gt;&lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/5430.clip_5F00_image010_5F00_2.jpg"&gt;&lt;img title="clip_image010" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="clip_image010" src="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/3683.clip_5F00_image010_5F00_thumb.jpg" width="450" height="327" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;Figure 5 - Select Profile&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/5822.clip_5F00_image012_5F00_2.jpg"&gt;&lt;img title="clip_image012" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="clip_image012" src="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/1526.clip_5F00_image012_5F00_thumb.jpg" width="456" height="332" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;Figure 6 - Select server and path&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/5822.clip_5F00_image014_5F00_2.jpg"&gt;&lt;img title="clip_image014" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="clip_image014" src="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/4331.clip_5F00_image014_5F00_thumb.jpg" width="455" height="332" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;Figure 7 - Share Name&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/5482.clip_5F00_image016_5F00_2.jpg"&gt;&lt;img title="clip_image016" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="clip_image016" src="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/1273.clip_5F00_image016_5F00_thumb.jpg" width="451" height="330" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;Figure 8 - Configure Share Settings&lt;/p&gt;  &lt;p&gt;To verify a share has the continuously available property set, do the following:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Start &lt;b&gt;Server Manager&lt;/b&gt;&lt;/li&gt;    &lt;li&gt;Click&lt;b&gt; Tools &lt;/b&gt;and select&lt;b&gt; Failover Cluster Manager&lt;/b&gt;&lt;/li&gt;    &lt;li&gt;In the &lt;b&gt;console tree&lt;/b&gt;, do the following&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Select and expand the cluster you are managing&lt;/li&gt;      &lt;li&gt;Select &lt;b&gt;Roles&lt;/b&gt;&lt;/li&gt;      &lt;li&gt;In the &lt;b&gt;Results&lt;/b&gt; pane, select the &lt;b&gt;file server&lt;/b&gt; you want to examine&lt;/li&gt;      &lt;li&gt;In the &lt;b&gt;bottom window&lt;/b&gt;, click the &lt;b&gt;Shares&lt;/b&gt; tab&lt;/li&gt;      &lt;li&gt;Locate the share of interest and examine the &lt;b&gt;Continuous Availability&lt;/b&gt; property&lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;PowerShell&lt;/h3&gt;  &lt;p&gt;These steps assume the folder for the share is already created. If this is not the case, create folder before continuing.&lt;/p&gt;  &lt;p&gt;In an elevated PowerShell shell on the cluster node where the clustered file server is online, do the following to create a file share with continuous availability property set:&lt;/p&gt;  &lt;p&gt;&lt;font style="background-color: rgb(204, 204, 204);" face="Consolas"&gt;New-SmbShare -Name AppStorage –Path f:\appstorage –Scope smbfs –FullControl smbtest\administrator&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;In an elevated PowerShell shell on the cluster node where the clustered file server is online, do the following to verify a file share has continuous availability property set.&lt;/p&gt;  &lt;p&gt;&lt;font style="background-color: rgb(204, 204, 204);" face="Consolas"&gt;Get-SmbShare -Name AppStorage | Select *&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;PresetPathAcl : System.Security.AccessControl.DirectorySecurity&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;ShareState : Online&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;AvailabilityType : Clustered&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;ShareType : FileSystemDirectory&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;FolderEnumerationMode : Unrestricted&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;CachingMode : None&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;CATimeout : 0&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;ConcurrentUserLimit : 0&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font style="background-color: rgb(255, 192, 0);" face="Consolas"&gt;ContinuouslyAvailable : True&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;CurrentUsers : 0&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;Description :&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;EncryptData : False&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;Name : appstorage&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;Path : F:\Shares\appstorage&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;Scoped : True&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;ScopeName : SMBFS&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;SecurityDescriptor : O:BAG:DUD:(A;OICI;FA;;;WD)&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;ShadowCopy : False&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;Special : False&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;Temporary : False&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;Volume : \\?\Volume{266f94b0-9640-4e1f-b056-6a3e999e6ecf}\&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Note that we didn’t request the continuous availability property to be set. This is because the property is set by default. If you want to create a file share without the property set, do the following:&lt;/p&gt;  &lt;p&gt;&lt;font style="background-color: rgb(204, 204, 204);" face="Consolas"&gt;New-SmbShare -Name AppStorage -Path f:\appstorage -Scope smbfs –FullControl smbtest\administrator -ContinuouslyAvailable:$false&lt;/font&gt;&lt;/p&gt;  &lt;h1&gt;Using a file share that is continuously available&lt;/h1&gt;  &lt;p&gt;Now that we have created a clustered file server with a file share that is continuously available, let’s go ahead and use it. &lt;/p&gt;  &lt;p&gt;The below diagram illustrates the setup that I will be using in this section.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/8611.clip_5F00_image018_5F00_2.png"&gt;&lt;img title="clip_image018" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="clip_image018" src="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/4810.clip_5F00_image018_5F00_thumb.png" width="396" height="288" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;Figure 9 - Clustered File Server&lt;/p&gt;  &lt;p&gt;On the file share is a 10GB data file (testfile.dat) that is being accessed by an application on the SMB client computer (FSF-260403-10). The below screenshot shows the SMB Client Shares performance counters for &lt;a href="file:///\\smbfs\appstorage"&gt;\\smbfs\appstorage&lt;/a&gt; share as seen from the SMB Client. As you can see the application is doing 8KB reads and writes.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/0020.clip_5F00_image020_5F00_2.jpg"&gt;&lt;img title="clip_image020" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="clip_image020" src="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/8688.clip_5F00_image020_5F00_thumb.jpg" width="367" height="347" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;Figure 10 - Data Access&lt;/p&gt;  &lt;p&gt;Zeroing in on data requests/sec in graph form, we see the following:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/5875.clip_5F00_image022_5F00_2.jpg"&gt;&lt;img title="clip_image022" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="clip_image022" src="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/5556.clip_5F00_image022_5F00_thumb.jpg" width="375" height="296" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;In an elevated PowerShell shell on the cluster node where the clustered file server is online, do the following to:&lt;/p&gt;  &lt;p&gt;&lt;font style="background-color: rgb(204, 204, 204);" face="Consolas"&gt;Get-SmbOpenFile | Select *&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;ClientComputerName : [2001:4898:e0:32af:890b:6268:df3b:bf8]&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;ClientUserName : SMBTEST\Administrator&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;ClusterNodeName :&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font style="background-color: rgb(255, 192, 0);" face="Consolas"&gt;ContinuouslyAvailable : True&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;Encrypted : False&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;FileId : 4415226380557&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;Locks : 0&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;Path : F:\Shares\appstorage\testfile.dat&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;Permissions : 1180059&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;ScopeName : SMBFS&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;SessionId : 4415226380341&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;ShareRelativePath : testfile.dat&lt;/font&gt;&lt;/p&gt;  &lt;h3&gt;Planned move of the cluster group&lt;/h3&gt;  &lt;p&gt;With assurance that the file handle is indeed continuously available, let’s go ahead and move the cluster group to another cluster node. In an elevated PowerShell shell on one of the cluster nodes, do the following to move the cluster group:&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;Move-ClusterGroup -Name smbfs -Node FSF-260403-08&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;Name&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; OwnerNode&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; State&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;----&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ---------&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; -----&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;smbfs&amp;#160;&amp;#160;&amp;#160;&amp;#160; FSF-260403-08&amp;#160;&amp;#160; Online&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Looking at Data Requests/sec in Performance Monitor, we see that there is a short brown-out where IO is stalled of a few seconds while the cluster group is moved, but continues uninterrupted when the cluster group has completed the move. &lt;/p&gt;  &lt;p&gt;The tear down and setup of SMB session, connections and active handles between the SMB client and the SMB server on the cluster nodes is handled completely transparent to the application. The application does not see any errors during this transition, only a brief stall in IO. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/3718.clip_5F00_image024_5F00_2.jpg"&gt;&lt;img title="clip_image024" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="clip_image024" src="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/7522.clip_5F00_image024_5F00_thumb.jpg" width="393" height="304" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;Figure 11 - Move Cluster Group&lt;/p&gt;  &lt;p&gt;Let’s take a look at the operational log for SMB Client in Event Viewer (Applications and Services Log – Microsoft – Windows – SMB Client – Operational) on the SMB Client computer.&lt;/p&gt;  &lt;p&gt;In the event log we see a series of warning events around 9:36:01PM. These warning events signal the tear down of SMB connections, sessions and shares. There is also a series of information events around 9:36:07PM. These information events signal the recovery of SMB sessions, connections and shares. These events are very useful in understanding the activities during the recovery and that the recovery was successfulJ&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/4370.clip_5F00_image026_5F00_2.jpg"&gt;&lt;img title="clip_image026" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="clip_image026" src="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/5531.clip_5F00_image026_5F00_thumb.jpg" width="401" height="340" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;Figure 12 - Events for planned move&lt;/p&gt;  &lt;p&gt;So how does SMB Transparent Failover actually work? When the SMB client initially connects to the file share, the client determines whether the file share has the continuous availability property set. If it does, this means the file share is a clustered file share and supports SMB transparent failover. When the SMB client subsequently opens a file on the file share on behalf of the application, it requests a persistent file handle. When the SMB server receives a request to open a file with a persistent handle, the SMB server interacts with the Resume Key filter to persist sufficient information about the file handle, along with a unique key (resume key) supplied by the SMB client, to stable storage. &lt;/p&gt;  &lt;p&gt;If a planned move or failure occurs on the file server cluster node to which the SMB client is connected, the SMB client attempts to reconnect to another file server cluster node. Once the SMB client successfully reconnects to another node in the cluster, the SMB client starts the resume operation using the resume key. When the SMB server receives the resume key, it interacts with the Resume Key filter to recover the handle state to the same state it was prior to the failure with end-to-end support (SMB client, SMB server and Resume Key filter) for operations that can be replayed, as well as operations that cannot be replayed. Resume Key filter also protects the handle state after failover to ensure namespace consistency and that the client can reconnect. The application running on the SMB client computer does not experience any failures or errors during this operation. From an application perspective, it appears the I/O operations are stalled for a small amount of time.&lt;/p&gt;  &lt;p&gt;To protect against data loss from writing data into an unstable cache, persistent file handles are always opened with write through.&lt;/p&gt;  &lt;h2&gt;Unplanned failure of the active cluster node&lt;/h2&gt;  &lt;p&gt;Now, let’s introduce an unplanned failure. The cluster group was moved to FSF-260403-08. Since all these machines are running as virtual machines in a Hyper-V setup, I can use Hyper-V manager to reset FSF-260403-08. &lt;/p&gt;  &lt;p&gt;Looking at Data Requests/sec in Performance Monitor, we see that there is a slightly longer brown-out where IO is stalled. In this time period cluster detects that FSF-260403 has failed and starts the cluster group on another node. Once started, SMB can perform transparent recovery. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/0160.clip_5F00_image028_5F00_2.jpg"&gt;&lt;img title="clip_image028" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="clip_image028" src="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/8255.clip_5F00_image028_5F00_thumb.jpg" width="411" height="318" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;Figure 13 – Unplanned Failure&lt;/p&gt;  &lt;p&gt;And again the SMBClient event log shows events related to the event:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/2388.clip_5F00_image030_5F00_2.jpg"&gt;&lt;img title="clip_image030" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="clip_image030" src="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/4540.clip_5F00_image030_5F00_thumb.jpg" width="415" height="239" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;Figure 14 – Events for unplanned failure&lt;/p&gt;  &lt;p&gt;Now you will probably ask yourself: “Wait a minute. SMB is running over TCP and TCP timeout is typically 20 seconds and SMB uses a couple of them before determining the cluster node failed. So how come the recovery is ~10 seconds and not 40 or 60 seconds??”&lt;/p&gt;  &lt;p&gt;Enter Witness service.&lt;/p&gt;  &lt;p&gt;Witness service was created to enable faster recovery from unplanned failures, allowing the SMB client to not have to wait for TCP timeouts. Witness is a new service that is installed automatically with the failover clustering feature. When the SMB client initially connects to a cluster node, the SMB client notifies the Witness client, which is running on the same computer. The Witness client obtains a list of cluster nodes from the Witness service running on the cluster node it is connected to. The Witness client picks a different cluster node and issues a registration request to the Witness service on that cluster node. The Witness service then listens to cluster events related to the clustered file server the SMB client is connected to.&lt;/p&gt;  &lt;p&gt;If an unplanned failure occurs on the file server cluster node the SMB client is connected to, the Witness service on the other cluster node receives a notification from the cluster service. The Witness service notifies the Witness client, which in turns notifies the SMB client that the cluster node has failed. Upon receiving the Witness notification, the SMB client immediately starts reconnecting to a different file server cluster node, which significantly speeds up recovery from unplanned failures.&lt;/p&gt;  &lt;p&gt;You can examine the state of the Witness service across the cluster using the Get-SmbWitnessClient command. Notice that Get-SmbWitnessClient can be run on any cluster node and provides a cluster aggregate view of Witness service, similar to Get-SmbOpenFile and Get-SmbSessions. In an elevated PowerShell shell on one of the cluster nodes, do the following to:&lt;/p&gt;  &lt;p&gt;&lt;font style="background-color: rgb(204, 204, 204);" face="Consolas"&gt;Get-SmbWitnessClient | select *&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;State : RequestedNotifications&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;ClientName : FSF-260403-10&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font style="background-color: rgb(255, 192, 0);" face="Consolas"&gt;FileServerNodeName : FSF-260403-08&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;IPAddress : 2001:4898:E0:32AF:3256:8C83:59E5:BDB5&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;NetworkName : SMBFS&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;NotificationsCancelled : 0&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;NotificationsSent : 0&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;QueuedNotifications : 0&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;ResourcesMonitored : 1&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font style="background-color: rgb(0, 255, 0);" face="Consolas"&gt;WitnessNodeName : FSF-260403-07&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Examining the above output (run before the unplanned failure), we can see the SMB client (FSF-260403-10) is currently connected to cluster node FSF-260403-08 (SMB connection) and has registered for witness notification for SMBFS with Witness service on FSF-260403-07.&lt;/p&gt;  &lt;p&gt;Looking at Event Viewer (Applications and Services Log – Microsoft – Windows – SMBWitnessClient – Operational) on the SMB Client computer, we see that the Witness client received notification for SMBFS. Since the cluster group was moved to FSF-260403-07, which is also the Witness node for the Witness client, the following event shows the Witness client unregistering from FSF-260403-07 and registering with FSF-260403-09. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/1715.clip_5F00_image032_5F00_2.jpg"&gt;&lt;img title="clip_image032" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="clip_image032" src="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/2376.clip_5F00_image032_5F00_thumb.jpg" width="460" height="323" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;Figure 15 - Witness event log&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;h1&gt;Tips and Tricks&lt;/h1&gt;  &lt;h2&gt;Protecting file server services&lt;/h2&gt;  &lt;p&gt;LanmanServer and LanmanWorkstation runs in service hosts with other services. In extreme cases other services running in the same service hosts can affect the availability of LanmanServer and LanmanWorkstation. You can configure these services to run in their own service host using the following commands:&lt;/p&gt;  &lt;p&gt;sc config lanmanserver type= own&lt;/p&gt;  &lt;p&gt;sc config lanmanworkstation type= own&lt;/p&gt;  &lt;p&gt;The computer needs to be restarted for this change to take effect.&lt;/p&gt;  &lt;h2&gt;Loopback configurations&lt;/h2&gt;  &lt;p&gt;Accessing a file share, that has continuously available property set, as a loopback share is not supported.&lt;/p&gt;  &lt;p&gt;For example, SQL Server or Hyper-V storing their data files on SMB file shares must run on computers that are not a member of the file server cluster for the SMB file shares.&lt;/p&gt;  &lt;h2&gt;Using legacy tools&lt;/h2&gt;  &lt;p&gt;When creating file shares, the continuous availability property is set by default on tools introduced in Windows Server 2012, including the new file share creation wizard and the New-SmbShare command. If you have automation built around using older tools, such as NET SHARE or Explorer or using the NET APIs the continuous availability property will not be set by default and these tools do not support setting it. To work around this issue you can set the following registry key, which will cause all shares to be created with the property set regardless if they support it or not:&lt;/p&gt;  &lt;p&gt;Set-ItemProperty -Path &amp;quot;HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters&amp;quot; EnableCaAlways -Value 1 –Force&lt;/p&gt;  &lt;h2&gt;Witness service&lt;/h2&gt;  &lt;p&gt;By default the network traffic between the Witness Client and Witness Server requires mutual authentication and is signed. However the traffic is not encrypted, as it doesn’t contain any user data. It is possible to enable encryption of Witness network traffic.&lt;/p&gt;  &lt;p&gt;To configure the Witness client to send traffic encrypted, set the following registry key on each client:&lt;/p&gt;  &lt;p&gt;Set-ItemProperty -Path &amp;quot;HKLM:\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters&amp;quot; WitnessFlags -Value 1 –Force&lt;/p&gt;  &lt;p&gt;To configure the Witness Service to not accept unencrypted traffic, set the following registry key on each cluster node:&lt;/p&gt;  &lt;p&gt;Set-ItemProperty -Path &amp;quot;HKLM:\SYSTEM\CurrentControlSet\Services\SMBWitness\Parameters&amp;quot; Flags -Value 1 –Force&lt;/p&gt;  &lt;h2&gt;Disabling NetBios over TCP/IP&lt;/h2&gt;  &lt;p&gt;I have seen disabling NetBios over TCP/IP speed up failover times. To disable NetBios over TCP/IP for an interface, do the following in Network Connections:&lt;/p&gt;  &lt;p&gt;· Select the interface you want to modify, &lt;b&gt;right-click&lt;/b&gt; and select &lt;b&gt;Properties&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;· In interface properties, select &lt;b&gt;Internet Protocol Version 4 (TCP/IPv4)&lt;/b&gt; and click &lt;b&gt;Properties&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;· In &lt;b&gt;Internet Protocol Version 4 (TCP/IPv4)&lt;/b&gt; Properties, click &lt;b&gt;Advanced&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;· In &lt;b&gt;Advanced TCP/IP Settings&lt;/b&gt;, click the &lt;b&gt;WINS&lt;/b&gt; tab&lt;/p&gt;  &lt;p&gt;· On the &lt;b&gt;WINS&lt;/b&gt; tab, select the &lt;b&gt;Disable NetBIOS over TCP/IP&lt;/b&gt; radio button&lt;/p&gt;  &lt;p&gt;When disabling NetBIOS over TCP/IP it should be configured for all network interfaces on all cluster nodes.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/7266.clip_5F00_image034_5F00_2.jpg"&gt;&lt;img title="clip_image034" style="display: inline; background-image: none;" border="0" alt="clip_image034" src="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-45-66-metablogapi/2376.clip_5F00_image034_5F00_thumb.jpg" width="206" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Figure 16 – Disable NetBIOS over TCP/IP&lt;/p&gt;  &lt;h2&gt;Disable 8.3 name generation&lt;/h2&gt;  &lt;p&gt;SMB Transparent Failover does not support cluster disks with 8.3 name generation enabled. In Windows Server 2012 8.3 name generation is disabled by default on any data volumes created. However, if you import volumes created on down-level versions of Windows or by accident create the volume with 8.3 name generation enabled, SMB Transparent Failover will not work. An event will be logged in (Applications and Services Log – Microsoft – Windows – ResumeKeyFilter – Operational) notifying that it failed to attach to the volume because 8.3 name generation is enabled.&lt;/p&gt;  &lt;p&gt;You can use &lt;a href="http://technet.microsoft.com/en-us/library/ff621566(v=WS.10).aspx"&gt;fsutil&lt;/a&gt; to query and setting the state of 8.3 name generation system-wide and on individual volumes. You can also use fsutil to remove previously generated short names from a volume.&lt;/p&gt;  &lt;h1&gt;Conclusion&lt;/h1&gt;  &lt;p&gt;I hope you enjoyed this introduction to SMB Transparent Failover and agree how this feature is useful to provide continued access despite needing to occasionally restart servers when performing software or hardware maintenance or in the unfortunate event where a cluster node fails. Providing continued access to file share during these events is extremely important, especially for workloads such as Microsoft Hyper-V and Microsoft SQL Server.&lt;/p&gt;  &lt;p&gt;I am looking forward to dive into Scale-Out File Server in a future post.&lt;/p&gt;  &lt;p&gt;Claus Joergensen&lt;/p&gt;  &lt;p&gt;Principal Program Manager&lt;/p&gt;  &lt;p&gt;Windows File Server Team&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3502595" width="1" height="1"&gt;</description></item></channel></rss>