<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Tristan Watkins on IT Infrastructure &#187; Virtual Machine Archive</title>
	<atom:link href="http://tristanwatkins.com/index.php/tag/virtual-machine/feed/" rel="self" type="application/rss+xml" />
	<link>http://tristanwatkins.com</link>
	<description>Technical guidance for SharePoint, Cloud Services, Windows and more</description>
	<lastBuildDate>Fri, 21 Oct 2011 23:33:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.4</generator>
		<item>
		<title>SharePoint Development Productivity and Virtualisation Technologies</title>
		<link>http://tristanwatkins.com/index.php/sharepoint-development-productivity-and-virtualisation-technologies/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=sharepoint-development-productivity-and-virtualisation-technologies</link>
		<comments>http://tristanwatkins.com/index.php/sharepoint-development-productivity-and-virtualisation-technologies/#comments</comments>
		<pubDate>Tue, 30 Nov 2010 06:30:07 +0000</pubDate>
		<dc:creator>Tristan Watkins</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Virtualisation]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[EC2]]></category>
		<category><![CDATA[Hyper-V]]></category>
		<category><![CDATA[SharePoint 2010]]></category>
		<category><![CDATA[Virtual Machine]]></category>
		<category><![CDATA[VMWare]]></category>

		<guid isPermaLink="false">http://tristanwatkins.com/?p=1365</guid>
		<description><![CDATA[In the near future, I&#8217;ll be discussing the results of the SharePoint Development productivity testing that I&#8217;ve been working on for some time. A key part of the background to that story is a choice to virtualise SharePoint, and within that, a choice of virtualisation technology. In this post I&#8217;ll be reviewing the problem in [...]]]></description>
			<content:encoded><![CDATA[<p>In the near future, I&#8217;ll be discussing the results of the SharePoint Development productivity testing that I&#8217;ve been working on for some time. A key part of the background to that story is a choice to virtualise SharePoint, and within that, a choice of virtualisation technology. In this post I&#8217;ll be reviewing the problem in advance of a more detailed discussion of the productivity gains and losses with some of these technologies/approaches.</p>
<p>For clarity, I will quickly state the problem as I see it. <em>SharePoint 2010 system requirements and practitioner mobility requirements are inherently at odds</em>. What guidance exists for this unique problem space tends to regurgitate preferences/allegiances rather than comparing technologies and ratifying assumptions with real-world tests. At best, you get system performance indices for a single laptop model, but these results may vary when any hardware component is changed.</p>
<p><span id="more-1365"></span></p>
<h3>How can virtualisation improve system performance?</h3>
<p>It doesn&#8217;t. People look to virtualisation to solve other problems. However, SharePoint 2010 performs differently in different virtualisation technologies, and the margins of these differences vary by hardware configuration. By all means, the advantages of virtualisation often make it a desirable choice, but these performance characteristics need to be accounted for, lest system performance losses negate the productivity improvements that virtualisation can introduce.</p>
<h3>Why virtualise?</h3>
<p>There are a number of advantages to virtual systems over physical systems. Many of these benefits can also be obtained with sufficiently mature systems management technologies and physical systems, but these benefits are often easier, quicker or less costly to implement through virtualisation. Some of the benefits include:</p>
<ul>
<li>Provisioning times for new SharePoint environments.</li>
<li>Standardisation through cloned, network-isolated virtual machines.</li>
<li>Account for volatility with snapshots.</li>
<li>Standard builds per-project, to share with team      members, reducing project initiation costs.</li>
<li>Virtual appliances produced by Microsoft and third parties,      such as the Information Worker Demo VM.</li>
<li>Reduced hardware rebuilds by removing development tools and      SharePoint from the host.</li>
</ul>
<p>This list is by no means comprehensive. As I say, many of these benefits can be realised with scripting and/or management tools. This list is only intended to illustrate why it&#8217;s a powerful design option.</p>
<h3>An overview of virtualisation and related technologies</h3>
<p>Some example technologies by type:</p>
<ul>
<li>Type I      Hypervisors
<ul>
<li>VMWare       ESXi</li>
<li>Hyper-V</li>
</ul>
</li>
<li>Type II      Hypervisors
<ul>
<li>Oracle       VirtualBox</li>
<li>VMWare       Workstation</li>
</ul>
</li>
<li>Infrastructure      as a Service (IaaS)
<ul>
<li>Amazon       EC2</li>
<li>Azure       VM Role (forthcoming)</li>
</ul>
</li>
<li>Local      Systems
<ul>
<li>Native       Boot Windows 7 (virtual hard disk)</li>
<li>Citrix       XenDesktop (VDI)</li>
</ul>
</li>
</ul>
<p>Note: Virtual PC was not included because it doesn&#8217;t support 64-bit guest operating systems. SharePoint 2010 only runs on 64-bit systems.</p>
<p>Some of the <em>alleged</em> benefits of these approaches:</p>
<ul>
<li>Type I      Hypervisors
<ul>
<li>Better       performance**</li>
<li>Good       management options/tools</li>
</ul>
</li>
<li>Type II      Hypervisors
<ul>
<li>Host       Operating System</li>
<li>Easy       to use</li>
</ul>
</li>
<li>Infrastructure      as a Service (IaaS)
<ul>
<li>Pay       as you go</li>
<li>Scalability</li>
</ul>
</li>
<li>Local      Systems
<ul>
<li>Good       performance</li>
<li>Simple       to use</li>
</ul>
</li>
</ul>
<p>Some of the <em>alleged</em> drawbacks of these approaches:</p>
<ul>
<li>Type I      Hypervisors
<ul>
<li>No       Host Operating System***</li>
<li>Driver       issues*</li>
<li>Complicated</li>
</ul>
</li>
<li>Type II      Hypervisors
<ul>
<li>Historically       poor performance**</li>
<li>Historically,       less manageable (snapshots, import/export, etc)</li>
</ul>
</li>
<li>Infrastructure      as a Service (IaaS)
<ul>
<li>Requires       stable connectivity</li>
<li>Complicated</li>
<li>Pay-As-You-Go       requires diligence</li>
</ul>
</li>
<li>Local      Systems
<ul>
<li>Easy       to damage</li>
<li>Slow       to rebuild</li>
</ul>
</li>
</ul>
<p>*Hyper-V has driver issues on some newer laptops. These are most noticeable with graphics, although I have seen audio driver problems as well. Some of these driver issues may be fixed or <a title="Hyper-V video issues fixed by Windows Server 2008 R2 SP1 Beta?" href="../index.php/hyperv-video-issues-fixed-windows-server-2008-r2-sp1-beta/" target="_blank">alleviated in the SP1 Beta/RC for Windows Server 2008 R2</a>.</p>
<p>**This performance bias is one of the things I will be examining in more detail in later posts.</p>
<p>***This is only &#8220;sort of&#8221; true for Hyper-V, which invokes a &#8220;parent partition&#8221;. This is a special type of virtual machine that fulfils a similar role to a host operating system, and is often referred to as such.</p>
<h3>Why are &#8220;Local Systems&#8221; included?</h3>
<p>I&#8217;ve lumped these in for two reasons. 1) They share some characteristics with the other virtualisation technologies, like running from virtual hard drives. 2) By virtue of being local systems, they fundamentally negate some of the benefits that are obtained through virtualisation. Cloning these machines is not an option if SharePoint is installed and configured. It will be necessary to invest in scripting environment provision in order to retain those productivity benefits. It happens that many people choose to take this scripting approach, but it&#8217;s worth pointing out that network isolation and cloning can achieve similar results through virtualisation, and this does not obtain with Local Systems.</p>
<h3>What about shared, hosted development environments?</h3>
<p>In this scenario I&#8217;m thinking of hosted development farms, where some or all members of a team use a single environment. Based on my subjective reading of the community, this option seems to be fading away. I think there are three reasons why.</p>
<ol>
<li>Cost.      Running development environments on proper infrastructure is expensive.      Most components have been made redundant, the storage will be expensive if      it performs well, the power/cooling costs are considerably more expensive      than for laptops/desktops and you will need to pay people to      manage the systems. Even when these costs are split across multiple      developers, it&#8217;s still expensive unless resources are overcommitted, which negates productivity gains. It also      tends to be more expensive to provision new environments and this process      can often be an obstacle to business agility. In a nutshell, <em>these are      protections that are unnecessary for development environments.</em> Redundancy and resilience at this level is overkill given the      associated costs. The most important assets, such as code, standard images      and project-specific builds can be protected separately.</li>
<li>Hive      pollution. If these farms will support multiple projects, as they often do      per the previous comments about provisioning, then these systems will      inherently differ from the test/stage/UAT/production systems they should      resemble. Core files in the hive can be altered from project-to-project,      resulting in unexpected behaviour when moving code between these      environments. This can seriously complicate troubleshooting and should be      avoided.</li>
<li>Mobility.      These farms aren&#8217;t terribly useful to people who are travelling or who are      working on-site with restricted outbound connectivity.</li>
</ol>
<p>All of this said, there are times when project-specific requirements may make shared farms a good option. It may be sensible to take another look for:</p>
<ul>
<li>Integration      projects.</li>
<li>Developing      with large amounts of data.</li>
<li>Projects      with heavy infrastructure requirements, such as FAST.
<ul>
<li>Perhaps       individual development environments can consume a shared FAST Service       Application?</li>
</ul>
</li>
</ul>
<p>Generally speaking, I believe these resources should be provided only in these niche cases.</p>
<h3>How is this different from IaaS?</h3>
<p>The main differences are costs and capital. Cloud-based infrastructure services are fundamentally just virtualised hosting on an enormous scale. This scale lowers costs to a point where it may be affordable to deploy individual machines per-developer. Although in my analyses I found that IaaS would be more expensive than desktop workstations over three years, this still may be compelling when cash flow issues preclude significant one-time investment or credit flows are restricted. IaaS should also be kept in mind when specific projects require significant provisioning or investment for a short term, for instance testing in a large farm.</p>
<p>While providing a single cloud-based VM per-user solves the first two issues with shared development environments, mobility is still an issue. In many places, stable mobile broadband is flaky at best. Additionally, there are key architectural differences that need to be accounted for when working in the cloud, and on a Pay-As-You-Go basis. I address all of this in <a title="SharePoint 2010 Infrastructure for Amazon EC2 Part IV: Cost Analysis" href="../index.php/sharepoint-2010-infrastructure-amazon-ec2-cost-analysis/" target="_blank">my series on SharePoint 2010 Infrastructure for Amazon EC2</a>.</p>
<h3>Which approach is best?</h3>
<p>This is a high-level overview of the design constraints that limited my choices, before I plunged into a concrete performance review of the remaining technologies.</p>
<p><span style="text-decoration: underline;">Local Systems</span><br />
In my view, Local Systems are only a better choice if the supporting IT systems and processes are very mature and the performance benefits are clear and significant. For most development scenarios, that has yet to be proven. I&#8217;ve postponed this virtual to physical performance comparison for now, as the other benefits of virtualisation have ruled this approach out for us, but I hope to revisit it in the new year.</p>
<p><span style="text-decoration: underline;">IaaS</span><br />
IaaS has two key planning considerations. The first is fairly obvious. Outbound RDP Connectivity needs to be open whenever the systems are needed. I encourage people to consider this in some detail and pilot with many types of users before diving in. The second consideration is Pay-As-You-Go. While cloud providers often have an always-on option, it’s usually pretty pricey. The alternative is to find a mechanism to limit compute usage to when it is truly being used, without introducing usability problems. Management tools or scripting may be able to answer these problems, but no one should enter in to this process thinking it will be easy. <em>This is not an easy option</em>. For a more detailed consideration of these issues, refer to <a title="SharePoint 2010 Infrastructure for Amazon EC2 Part IV: Cost Analysis" href="../index.php/sharepoint-2010-infrastructure-amazon-ec2-cost-analysis/" target="_blank">my series on EC2</a>.</p>
<p><span style="text-decoration: underline;">Type II Hypervisors</span><br />
VMWare Workstation is the most mature desktop virtualisation product on the market, although in recent years VirtualBox has been gaining share. Choosing between these technologies for my tests was never going to be easy, but I reduced it to a few factors:</p>
<ul>
<li>I’ve      never met a VirtualBox user that would complain about using VMWare but I      can’t say that proposition is reversible. There are a lot      of SharePoint practitioners with a strong preference for VMWare.</li>
<li>VMWare      Workstation has native interoperability with other VMWare assets. While VirtualBox      supports the VMDK file format, it’s not quite the same thing.</li>
<li>Both      products are fairly inexpensive in the grand scheme of things.</li>
<li>I had      stability issues with VirtualBox circa version 3.14 that left a bad taste      in my mouth.</li>
</ul>
<p>Perhaps most importantly, I felt that the performance comparison of VMWare Workstation to Hyper-V would be the most valuable decision-making information.</p>
<p><span style="text-decoration: underline;">Type I Hypervisors</span><br />
Most Type I Hypervisors would not be suitable for desktop virtualisation because they don’t have a host operating system. While it would be possible to boot a guest OS and remote in to other Virtual Machines over internal networks, this is a complicated approach and the networking requirements would be enough to put off most developers. However, as mentioned above, Hyper-V is a notable pseudo-exception to this with its parent partition.</p>
<p>We’ve been using the Hyper-V role in Windows Server 2008 R2 for development for a little over a year now. While we have successfully capitalised on many of the productivity benefits of virtualisation through this approach, there are a few issues that have never been entirely satisfactory:</p>
<ul>
<li>Despite      having the host OS, using Hyper-V is still complicated for      non-Systems people – particularly the networking.
<ul>
<li>Work-around       solutions for Wireless networking are fiddly.</li>
<li>Lack       of self-contained NAT requires the use of Internet Connection Sharing in       order to achieve network isolation, which some users struggle with.</li>
</ul>
</li>
<li>Lack of      Sleep/Hibernate is painful for many users.</li>
<li>Graphics      performance is poor – particularly with large PowerPoint/Visio files,      large images and video.</li>
<li>Audio      can also suffer during large file operations.</li>
<li>Hyper-V is not ready for laptop power schemes.</li>
</ul>
<p>Despite these niggles, we’ve continued to use Hyper-V while waiting for the <a title="Hyper-V video issues fixed by Windows Server 2008 R2 SP1 Beta?" href="../index.php/hyperv-video-issues-fixed-windows-server-2008-r2-sp1-beta/" target="_blank">forthcoming graphics/memory improvements in Windows Server 2008 R2 SP1</a>. I would class these usability problems as significant inconveniences that sometimes manifest themselves in lost productivity – particularly with new users learning our approach.</p>
<h3>New Problems in SharePoint 2010</h3>
<p>Since we properly immersed ourselves in SharePoint 2010 development, negative reports about performance started to roll in. These proved hard to validate until a few months ago when my colleagues showed me first page load times after an IISRESET in excess of one minute. This was concrete and repeatable. The problem was more severe on some systems than others, but it was clearly a problem.</p>
<p>The performance tests I’ve been conducting have been an effort to pick apart these results in Hyper-V. Was this new in SharePoint 2010 or did it amplify something that was minor before? Do we get the same problems on different virtualisation technologies, in the cloud or is this a symptom of virtualisation itself? In my next post I’ll discuss the environments, the tests and the testing process.</p>
]]></content:encoded>
			<wfw:commentRss>http://tristanwatkins.com/index.php/sharepoint-development-productivity-and-virtualisation-technologies/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Optimising the SharePoint 2010 IW Demo VM Part 2</title>
		<link>http://tristanwatkins.com/index.php/optimising-the-sharepoint-2010-iw-demo-vm-2/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=optimising-the-sharepoint-2010-iw-demo-vm-2</link>
		<comments>http://tristanwatkins.com/index.php/optimising-the-sharepoint-2010-iw-demo-vm-2/#comments</comments>
		<pubDate>Fri, 30 Jul 2010 06:20:20 +0000</pubDate>
		<dc:creator>Tristan Watkins</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Virtualisation]]></category>
		<category><![CDATA[Exchange 2010]]></category>
		<category><![CDATA[Hyper-V]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[SharePoint 2010]]></category>
		<category><![CDATA[Virtual Machine]]></category>

		<guid isPermaLink="false">http://tristanwatkins.com/?p=1114</guid>
		<description><![CDATA[Continuing on from Part 1, in this post I&#8217;ll discuss the Microsoft 2010 Information Worker Demo Exchange VM, the SahrePoint VM&#8217;s event logs and potential future improvements to the environment. Exchange Server Reconfiguration Tidying up the Exchange server is a much more straight-forward process. In fact, all of the changes that I made are network [...]]]></description>
			<content:encoded><![CDATA[<p>Continuing on from <a title="Optimising the SharePoint 2010 IW Demo VM Part 1" href="http://tristanwatkins.com/index.php/optimising-the-sharepoint-2010-iw-demo-vm-1/" target="_blank">Part 1</a>, in this post I&#8217;ll discuss the Microsoft 2010 Information Worker Demo Exchange VM, the SahrePoint VM&#8217;s event logs and potential future improvements to the environment.</p>
<h2>Exchange Server Reconfiguration</h2>
<p>Tidying up the Exchange server is a much more straight-forward process. In fact, all of the changes that I made are network orientated per the network changes from the first post, so if you are not adding a second NIC or a second fixed IP address on the original internal NIC, these steps aren’t necessary.<br />
<span id="more-1114"></span></p>
<ul>
<li>Import the virtual machine. Plug the Hyper-V Internal Network in to the first NIC and add a second NIC with the Hyper-V ICS Network plugged in to it.</li>
<li>
<div>The initial IP address is 192.168.150.2.</div>
</li>
<li>Rename the Local Area Connection NIC to <em>Hyper-V Internal Connection</em> (or your preference).</li>
<li>Rename the Local Area Connection 2 (or maybe 3) NIC to <em>Hyper-V ICS Connection</em> (or your preference).</li>
<li>In IPv4 properties on the <em>Hyper-V ICS Connection</em>, change the Advanced TCP/IP Settings to not &#8220;Register this connection&#8217;s addresses in DNS&#8221;, as it is dynamic.</li>
<li>I disabled IPv6 on both NICs as it is already disable on our host’s network connections.</li>
<li>
<div>Add a second IPv4 address to the <em>Hyper-V Internal Connection</em>:  192.168.200.151/255.255.255.0.</div>
<ul>
<li>
<div>Added the same address on the DNS tab for this NIC.</div>
</li>
</ul>
</li>
</ul>
<ul>
<li>Check DNS to make sure the new address was added.</li>
<li>Added a HOSTS file entry for <em>demo2010b</em> pointing at 192.168.200.151.</li>
<li>Tested logging on via Remote Desktop from the Host machine.</li>
</ul>
<p>Shutdown/snapshot and optionally export the VM if time/resources permit.</p>
<h2>Reviewing SharePoint Server event logs</h2>
<p>This section details my review of the event logs in the shipped state. I did not take any action except for the last two items regarding DCOM fixes and the SharePoint Health Logs. I believe that most of these errors are probably an effect of running so many things in one environment, but I’d welcome comments if you have any insight to share.</p>
<ul>
<li><strong>SetSPN for WSMAN warnings</strong>:<em> The WinRM service failed to create the following SPNs: WSMAN/demo2010a.contoso.com; WSMAN/demo2010a.<br />
Additional Data<br />
The error received was 8344: %%8344.<br />
User Action<br />
The SPNs can be created by an administrator using setspn.exe utility.</em><br />
Presumably these SPNs can be created manually or the rights to create the SPNs can be assigned to the WinRM service account if needed, but I am not making any changes here until I see that it is necessary to do so. There are some Kerberos Audit Failures in the security logs but since the SharePoint environment is self-contained and there are no secondary hops, I don&#8217;t think this is worthwhile.</li>
<li><strong>VSS Error 8320</strong>:<em> Volume Shadow Copy Service error: Failed resolving account Administrator with status 1376. Check connection to domain controller and VssAccessControl registry key.<br />
Operation:<br />
Initializing Writer<br />
Context:<br />
Writer Class Id: {a6ad56c2-b509-4e6c-bb19-49d8f43532f0}<br />
Writer Name: WMI Writer<br />
Error-specific details:<br />
Error: NetLocalGroupGetMemebers(Administrator), 0&#215;80070560, The specified local group does not exist.<br />
</em>There are a number of articles that discuss fixes for this Warning but since this is an unusual configuration (SharePoint/SQL on a DC) and the warning is about the &#8220;Administrator&#8221; account, I am hesitant to make this change, for fear of introducing instability. Further reading at <a href="http://www.experts-exchange.com/OS/Microsoft_Operating_Systems/Server/Windows_Server_2008/Q_25455278.html" target="_blank">Experts Exchange</a>, <a href="http://technet.microsoft.com/en-us/library/cc787108(WS.10).aspx" target="_blank">Technet</a> and <a href="http://forums.anandtech.com/showthread.php?t=2085091" target="_blank">AnandTech</a>.</li>
<li>There are <strong>two errors regarding the ULS config file, 7105 and 7056</strong>. I&#8217;m honestly unsure what to make of these errors since they refer to <em>C:\Program Files\Common Files\Microsoft Shared\ULS\14\uls.config.xml</em> and I&#8217;m not certain how that is used in generating the ULS log files for SharePoint which are appearing normally at <em>C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\LOGS</em>. Not taking any action for now.</li>
<li><strong>Microsoft.ResourceManagement.ServiceHealthSource Error 22</strong>:<br />
<em>The Forefront Identity Manager Service cannot connect to the SQL Database Server.<br />
The SQL Server could not be contacted. The connection failure may be due to a network failure, firewall configuration error, or other connection issue. Additionally, the SQL Server connection information could be configured incorrectly.<br />
Verify that the SQL Server is reachable from the Forefront Identity Manager Service computer. Ensure that SQL Server is running, that the network connection is active, and that the firewall is configured properly. Last, verify the connection information has been configured properly. This configuration is stored in the Windows Registry.<br />
</em>This error seems to occurs before the FIM Sync service starts, which may or may not be a related issue. The User Profile Service Application is available though, so I believe this has something to do with this connection attempt occurring before the Service Application is able to connect with SQL.</li>
<li><strong>CAPI2 Error</strong>:<br />
<em>Failed extract of third-party root list from auto update cab at: &lt;<a href="http://www.download.windowsupdate.com/msdownload/update/v3/static/trustedr/en/authrootstl.cab">http://www.download.windowsupdate.com/msdownload/update/v3/static/trustedr/en/authrootstl.cab</a>&gt; with error: A required certificate is not within its validity period when verifying against the current system clock or the timestamp in the signed file.</em><br />
This issue <a href="http://social.technet.microsoft.com/Forums/en/w7itproinstall/thread/1e7d815a-4d31-44d1-8f1c-373a8d091582">seems to have emerged in July of this year on Windows 7 and Windows Server 2008 R2 machines</a>. Unfortunately there&#8217;s no clear resolution at this time, but also no clear negative impact on this system, so I’m not taking any action for now.</li>
<li><strong>DCOM 10016 error</strong>. A fix for this has been <a href="http://www.mattgrovesblog.com/2009/10/dcom-error-10016-with-sharepoint-2010.html">documented well by Matt Groves</a>.</li>
<li>
<div>SharePoint Health Reports:</div>
<ul>
<li>Almost all of the warnings and errors in the Health Report are either one-time issues that no longer exist or are symptoms of the single-server install on a DC.</li>
<li>An exception to this is the &#8220;Validate the My Site Host and individual My Sites are on a dedicated Web application and separate URL domain&#8221; message, which is accurate. The environment has not been configured with a dedicated MySite application.</li>
<li>The one other issue was &#8220;The Unattended Service Account Application ID is not specified or has an invalid value&#8221;. This has not been set up in the VM and will need to be configured in the Secure Store Service if it will be used.</li>
<li>I have chosen to disable all of these rules, as they are undesirable in a demo environment. I also deleted the existing alerts.</li>
</ul>
</li>
</ul>
<h2>Pending</h2>
<p>As I mentioned above, I hope to revisit this VM and create new snapshots that will reduce load by disabling bulky services. This snapshot branch might resemble something like this:</p>
<ul>
<li>Current state, as above
<ul>
<li>Most SharePoint Services turned off in Services on Server</li>
<li>BI Indexing Connector Service , FAST, OCS and Project Server removed. All SharePoint Services turned on</li>
<li>As above, but with FAST</li>
<li>As above, but with OCS</li>
<li>As above, but with Project Server</li>
<li>BI Indexing Connector Service , FAST, OCS and Project Server removed. All SharePoint Services turned off</li>
<li>As above, but with Search/FAST</li>
<li>As above, but with OCS</li>
<li>As above, but with Project Server</li>
</ul>
</li>
</ul>
<p>I really haven’t planned this yet or discussed these options with users of this environment, so it could wind up looking completely different. Also, this many snapshots would probably chew up too much disk space and get confusing for the users. But watch this space for updates as I hope to revisit the topic again. And please feel free to suggest other optimisations or additions that work well for you.</p>
]]></content:encoded>
			<wfw:commentRss>http://tristanwatkins.com/index.php/optimising-the-sharepoint-2010-iw-demo-vm-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Optimising the SharePoint 2010 IW Demo VM Part 1</title>
		<link>http://tristanwatkins.com/index.php/optimising-the-sharepoint-2010-iw-demo-vm-1/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=optimising-the-sharepoint-2010-iw-demo-vm-1</link>
		<comments>http://tristanwatkins.com/index.php/optimising-the-sharepoint-2010-iw-demo-vm-1/#comments</comments>
		<pubDate>Thu, 29 Jul 2010 06:23:34 +0000</pubDate>
		<dc:creator>Tristan Watkins</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Virtualisation]]></category>
		<category><![CDATA[Hyper-V]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[SharePoint 2010]]></category>
		<category><![CDATA[Virtual Machine]]></category>

		<guid isPermaLink="false">http://tristanwatkins.com/?p=1094</guid>
		<description><![CDATA[Around the time that Microsoft released the public beta of SharePoint 2010 they also released a demonstration virtual machine, known as the 2010 Information Worker Virtual Machine, which was updated to RTM in mid-June. This is a fantastic resource for demonstrating SharePoint 2010. The content and demonstration scenarios (including walk-throughs) represent a huge investment from [...]]]></description>
			<content:encoded><![CDATA[<p>Around the time that Microsoft released the public beta of SharePoint 2010 they also released a demonstration virtual machine, known as the 2010 Information Worker Virtual Machine, which was <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=751fa0d1-356c-4002-9c60-d539896c66ce&amp;displaylang=en">updated to RTM in mid-June</a>. This is a fantastic resource for demonstrating SharePoint 2010. The content and demonstration scenarios (including walk-throughs) represent a huge investment from Microsoft and it would be foolish not to at least evaluate these assets. Personally, I think it’s silly to reinvent this wheel.</p>
<p>Now the public beta trial is expiring and people are moving to the RTM build. It appears to be much improved, in that more of the product works in this version and a few niggles have been fixed now. However, it&#8217;s widely acknowledged that the resource requirements for this virtual machine are gargantuan due to the breadth of what it offers.<br />
<span id="more-1094"></span></p>
<h2>What you get</h2>
<p>The first of these VMs doesn&#8217;t just have SharePoint Server 2010 (Enterprise). It has:</p>
<ul>
<li>Active Directory Domain Services</li>
<li>DNS</li>
<li>SQL 2008 R2</li>
<li>Office Professional Plus 2010 (including Visio and Project)</li>
<li>SharePoint Designer 2010</li>
<li>Visual Studio 2010</li>
<li>Office Web Applications</li>
<li>FAST Search for SharePoint 2010</li>
<li>Project Server 2010</li>
<li>Office Communication Server 2007 R2</li>
</ul>
<p>There is a second VM with Exchange Server 2010 which you can use as needed. Note: when downloading the RAR files which self-extract to the VM export files, I highly recommend using the Akamai download links. They will save you time and frustration.</p>
<h2>Why I’m writing about it</h2>
<p>The first of these VMs does a lot, and will chew up more virtual resources than most physical demo machines have to provide. In this post I documented the tweaks I made to our copy of the Virtual Machines and I&#8217;ve reviewed the event logs to identify any other issues that are present in the shipped state. I also spent some time fixing the start-up of some services due to observed delays in network connectivity.</p>
<p>The optimisations achieved here are not immense but they establish a firmer baseline from which to carry out further improvements. Unfortunately I have not had the time to explore the best approach to taking these core assets and removing the bulky bits in order to provide snapshots that unleash bits of the functionality as needed. With time I hope to revisit this and potentially explore other uses for this environment.</p>
<h2>SharePoint Server Reconfiguration</h2>
<p>These are the steps I’ve taken to reconfigure the SharePoint Virtual Machine:</p>
<ul>
<li>Imported the virtual machine. Plugged the Hyper-V Internal Network in to the first NIC and added a second NIC with the Hyper-V ICS Network plugged in to it. To understand more about the NIC naming conventions I&#8217;m using here and how we use these Hyper-V networks, please refer to <a href="http://tristanwatkins.com/index.php/building-a-sharepoint-20072010-development-environment/">my series on SharePoint development environments</a>.
<ul>
<li>If you&#8217;re curious, we dual-boot our Sales laptops in to this development environment so our sales people can use Hyper-V as needed.</li>
</ul>
</li>
<li>The default SharePoint VM RAM is set to 5120MB (5GB) RAM. This could be increased up to ~6GB on a host with 8GB RAM, assuming the load on the root partition is minimal during demonstration and the Exchange VM is not being used concurrently.</li>
<li>If using a UK keyboard through the Hyper-V Virtual Machine Connection, the password will need to be entered as <em>pass<strong>&#8220;</strong>word1</em></li>
<li>Note: at login a warm-up script runs, which I will discuss more in a moment.</li>
<li>I changed the time zone to London.</li>
<li>I changed UAC to &#8220;Notify me only when programs try to make change to my computer (do not dim my desktop)&#8221;. I find that with <a title="Known Hyper-V graphics performance issues" href="http://tristanwatkins.com/index.php/the-definitive-word-on-hyper-v-high-end-graphics-performance/" target="_blank">Known Hyper-V graphics performance issues</a> this setting achieves the right balance between usability and security.</li>
</ul>
<h3>Service start-up</h3>
<ul>
<li>I reviewed the event logs to identify which Manual Services would start up at a delay. Approximately five minutes after the machine started the Virtual Disk Service started up. That was followed by the following services:
<ul>
<table border="2" cellspacing="0" cellpadding="2" width="400">
<tbody>
<tr>
<td width="239" valign="top"><strong>Service</strong></td>
<td width="161" valign="top"><strong>Startup Type</strong></td>
</tr>
<tr>
<td width="239" valign="top">Application Experience</td>
<td width="161" valign="top">Manual</td>
</tr>
<tr>
<td width="239" valign="top">BI Indexing Connector Service</td>
<td width="161" valign="top">Automatic (Delayed Start)</td>
</tr>
<tr>
<td width="239" valign="top">Certificate Propagation</td>
<td width="161" valign="top">Manual</td>
</tr>
<tr>
<td width="239" valign="top">Diagnostic Policy Service</td>
<td width="161" valign="top">Automatic (Delayed Start)</td>
</tr>
<tr>
<td width="239" valign="top">Diagnostic System Host</td>
<td width="161" valign="top">Manual</td>
</tr>
<tr>
<td width="239" valign="top">Distributed Transaction Coordinator</td>
<td width="161" valign="top">Automatic (Delayed Start)</td>
</tr>
<tr>
<td width="239" valign="top">FAST Search for SharePoint</td>
<td width="161" valign="top">Automatic</td>
</tr>
<tr>
<td width="239" valign="top">FAST Search for SharePoint Browser Engine</td>
<td width="161" valign="top">Manual</td>
</tr>
<tr>
<td width="239" valign="top">FAST Search for SharePoint QRProxy</td>
<td width="161" valign="top">Manual</td>
</tr>
<tr>
<td width="239" valign="top">FAST Search for SharePoint Sam Admin</td>
<td width="161" valign="top">Manual</td>
</tr>
<tr>
<td width="239" valign="top">FAST Search for SharePoint Sam Worker</td>
<td width="161" valign="top">Manual</td>
</tr>
<tr>
<td width="239" valign="top">Function Discovery Provider Host</td>
<td width="161" valign="top">Manual</td>
</tr>
<tr>
<td width="239" valign="top">IPsec Policy Agent</td>
<td width="161" valign="top">Manual</td>
</tr>
<tr>
<td width="239" valign="top">Microsoft .Net Framework NGEN v4.0.30319_X86</td>
<td width="161" valign="top">Automatic (Delayed Start)</td>
</tr>
<tr>
<td width="239" valign="top">Microsoft .Net Framework NGEN v4.0.30319_X64</td>
<td width="161" valign="top">Automatic (Delayed Start)</td>
</tr>
<tr>
<td width="239" valign="top">Network Connections</td>
<td width="161" valign="top">Manual</td>
</tr>
<tr>
<td width="239" valign="top">Network List Service</td>
<td width="161" valign="top">Manual</td>
</tr>
<tr>
<td width="239" valign="top">Office 64 Source Engine</td>
<td width="161" valign="top">Manual</td>
</tr>
<tr>
<td width="239" valign="top">Office Software Protection Platform</td>
<td width="161" valign="top">Manual</td>
</tr>
<tr>
<td width="239" valign="top">Portable Device Enumerator Service</td>
<td width="161" valign="top">Manual</td>
</tr>
<tr>
<td width="239" valign="top">Remote Access Connection Manager</td>
<td width="161" valign="top">Manual</td>
</tr>
<tr>
<td width="239" valign="top">Remote Desktop Services</td>
<td width="161" valign="top">Manual</td>
</tr>
<tr>
<td width="239" valign="top">Remote Desktop Services Configuration</td>
<td width="161" valign="top">Manual</td>
</tr>
<tr>
<td width="239" valign="top">Remote Desktop Services UserMode Port Redirector</td>
<td width="161" valign="top">Manual</td>
</tr>
<tr>
<td width="239" valign="top">Secure Socket Tunneling Protocol Service</td>
<td width="161" valign="top">Manual</td>
</tr>
<tr>
<td width="239" valign="top">SPP Notification Service</td>
<td width="161" valign="top">Manual</td>
</tr>
<tr>
<td width="239" valign="top">SQL Full-Text Daemon Launcher</td>
<td width="161" valign="top">Manual</td>
</tr>
<tr>
<td width="239" valign="top">Telephony</td>
<td width="161" valign="top">Manual</td>
</tr>
<tr>
<td width="239" valign="top">Windows Defender</td>
<td width="161" valign="top">Automatic (Delayed Start)</td>
</tr>
<tr>
<td width="239" valign="top">Windows Module Installer</td>
<td width="161" valign="top">Manual</td>
</tr>
<tr>
<td width="239" valign="top">Windows Remote Management</td>
<td width="161" valign="top">Automatic (Delayed Start)</td>
</tr>
<tr>
<td width="239" valign="top">Windows Search</td>
<td width="161" valign="top">Automatic (Delayed Start)</td>
</tr>
<tr>
<td width="239" valign="top">Windows Update</td>
<td width="161" valign="top">Automatic (Delayed Start)</td>
</tr>
<tr>
<td width="239" valign="top">WinHTTP Web Proxy Auto-Discovery Service</td>
<td width="161" valign="top">Manual</td>
</tr>
</tbody>
</table>
</ul>
</li>
<li>In my testing, switching the <em>Network Connections</em> and <em>WinHTTP Web Proxy Auto-Discovery Service</em> services to Automatic would reduce time to CTRL+ALT+DEL from five minutes to three minutes. It’s worth verifying these results in your environment.</li>
</ul>
<h3>Service Hardening</h3>
<p>I disable the following services, per my normal virtual machine hardening processes. I don’t believe that any of them are necessary in this environment:</p>
<ul>
<li>Certificate Propagation</li>
<li>Desktop Windows Manager Session Manager</li>
<li>Distributed Link Tracking Client</li>
<li>Encrypted File System</li>
<li>Function Discovery Provider Host</li>
<li>Function Discovery Resource Publication</li>
<li>IP Helper</li>
<li>Microsoft iSCSI Initiator Service</li>
<li>Multimedia Class Scheduler</li>
<li>Problem Reports and Solutions Control Panel Support</li>
<li>Remote Procedure Call (RPC) Locator</li>
<li>Smart Card</li>
<li>Smart Card Removal Policy</li>
<li>Special Administration Console Helper</li>
<li>Tablet PC Input Service</li>
<li>Windows Audio</li>
<li>Windows Audio Endpoint Builder</li>
<li>Windows Error Reporting Service</li>
<li>Windows Search</li>
<li>Wired AutoConfig</li>
</ul>
<p>I also disabled these services. I have no idea why they were ever enabled.</p>
<ul>
<li>Microsoft Fibre Channel Platform Registration Service</li>
<li>Microsoft FTP Service</li>
</ul>
<p>Following a reboot to assess boot times after hardening, I was prompted with a firewall exception warning for SharePoint Workspace. I allowed this exception.</p>
<h3>MSCONFIG</h3>
<p>I mentioned earlier that a warm-up script launched at login. I reviewed the contents of the script and identified that it enumerated all sites in the farm, so I browsed to each site that was getting warmed up to have a look at that content. Most of these sites pull up the “select a template” page, indicating that there is not content in the web application, so I have chosen to disable the script for now and will likely revisit the use of the <a title="IIS.NET application warm-up module" href="http://www.iis.net/download/applicationwarmup" target="_blank">IIS.NET application warm-up module</a> when it matures. In the mean time, I recommend that recipients of this build take a snapshot of the VM while the <a href="http://intranet">http://intranet</a> and Central Admin web applications are fully warmed up for their needs so they can roll back to that point as needed.</p>
<p>While in MCSONFIG, I turned off:</p>
<ul>
<li>Watson Subscriber for SENS Network Notifications</li>
<li>EcmCopyLinks</li>
<li>
<div>Warm Up</div>
</li>
<li>
<div>Optional:</div>
<ul>
<li>
<div>Microsoft Office 2010 (these are sync services – probably best to leave them running)</div>
</li>
<li>
<div>Microsoft Office Communicator 2007 R2 (this is preferential)</div>
</li>
</ul>
</li>
</ul>
<h3>Housekeeping and simple benchmarks</h3>
<p>At this point I wanted to take some basic start-up timings so I shut down the VM, but before starting back up I changed the Hyper-V VM’s BIOS settings to boot from IDE before CD. After that I took some pretty unscientific measurements of boot times and resource consumption on my Dell XPS M1330:</p>
<ul>
<li>CTRL+ALT+DEL: 2:56.</li>
<li>Desktop: 3:47.</li>
<li>Baseline RAM consumption down from &gt;4.5GB to ~3.65GB before hitting the intranet and Central Administration web apps (remember, they aren’t warmed up anymore).</li>
<li>RAM consumption at just under 4GB after hitting Central Administration.</li>
<li>RAM consumption at ~4.25GB after hitting <a href="http://intranet">http://intranet</a>.</li>
</ul>
<p>After taking these measurements I shut down the VM and took a snapshot.</p>
<h3>Network changes</h3>
<p>These changes are optional, depending on how you will use the VM in your environment. I opted to add a second IP address on our existing internal network range, as follows:</p>
<ul>
<li>The initial IP address is 192.168.150.1/255.255.255.0.</li>
<li>Rename the Local Area Connection NIC to <em>Hyper-V Internal Connection</em> (or your preference).</li>
<li>Rename the Local Area Connection 2 (or maybe 3) NIC to <em>Hyper-V ICS Connection</em> (or your preference).</li>
<li>In IPv4 properties on the <em>Hyper-V ICS Connection</em>, change the Advanced TCP/IP Settings to not &#8220;Register this connection&#8217;s addresses in DNS&#8221;, as it is dynamic.</li>
<li>I disabled IPv6 on both NICs as it is already disable on our host’s network connections.</li>
<li>
<div>Add a second IPv4 address to the <em>Hyper-V Internal Connection</em>: 192.168.200.150/255.255.255.0.</div>
<ul>
<li>I also added 192.168.200.150 on the DNS tab for this NIC.</li>
</ul>
</li>
<li>Check DNS to make sure the new address is added.</li>
<li>Add a HOSTS file entry in the root partition for <em>demo2010a</em> pointing at 192.168.200.150.
<ul>
<li>If desirable, add another entry pointing for intranet.contoso.com pointing at 192.168.200.150. This can be used for browsing from the root partition’s browser.</li>
</ul>
</li>
<li>Tested logging on via Remote Desktop and browsing to Central Admin from the Host machine.</li>
</ul>
<h3>Client tools and other changes</h3>
<p>Some final changes are optional, but I think generally desirable.</p>
<ul>
<li>Install Firefox, Opera, Safari, Chrome.</li>
<li>Install PDF Exchange Viewer or your choice of PDF viewer.</li>
<li>Update: As mentioned by Leon Zandman in the comments here, <a href="http://technet.microsoft.com/en-us/sysinternals/bb897434">the free SysInternals ZoomIt tool</a> is very useful for presentations. You may also want to consider adding it.</li>
<li>Add the environment variable path to the 14 hive’s BIN.</li>
</ul>
<p>And that’s it for the SharePoint VM. Shutdown and take a new snapshot, optionally deleting the first one. I would suggest exporting the VM if time/resources permit, noting that export operations can be time-consuming and disk intensive.</p>
<p>In <a title="Optimising the SharePoint 2010 IW Demo VM Part 2" href="http://tristanwatkins.com/index.php/optimising-the-sharepoint-2010-iw-demo-vm-2/" target="_blank">part two</a> I&#8217;ll discuss the Exchange VM, event logs and potential future improvements.</p>
]]></content:encoded>
			<wfw:commentRss>http://tristanwatkins.com/index.php/optimising-the-sharepoint-2010-iw-demo-vm-1/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Recovering from Hyper-V Virtual Machine corruption</title>
		<link>http://tristanwatkins.com/index.php/recovering-from-virtual-machine-corruption/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=recovering-from-virtual-machine-corruption</link>
		<comments>http://tristanwatkins.com/index.php/recovering-from-virtual-machine-corruption/#comments</comments>
		<pubDate>Fri, 28 May 2010 22:56:09 +0000</pubDate>
		<dc:creator>Tristan Watkins</dc:creator>
				<category><![CDATA[Virtualisation]]></category>
		<category><![CDATA[AVHD]]></category>
		<category><![CDATA[Corruption]]></category>
		<category><![CDATA[Hyper-V]]></category>
		<category><![CDATA[Hyper-V Manager]]></category>
		<category><![CDATA[Snapshot]]></category>
		<category><![CDATA[VHD]]></category>
		<category><![CDATA[Virtual Har]]></category>
		<category><![CDATA[Virtual Machine]]></category>

		<guid isPermaLink="false">http://tristanwatkins.com/?p=941</guid>
		<description><![CDATA[I was recently working with a Hyper-V VM that had a large branch of snapshots that I wanted to clean up, in order to conserve disk space. This was a SharePoint 2010 development VM which I&#8217;d configured specifically for a project, so I didn&#8217;t need all of the earlier snapshots. The environment has two VMs [...]]]></description>
			<content:encoded><![CDATA[<p>I was recently working with a Hyper-V VM that had a large branch of snapshots that I wanted to clean up, in order to conserve disk space. This was a SharePoint 2010 development VM which I&#8217;d configured specifically for a project, so I didn&#8217;t need all of the earlier snapshots. The environment has two VMs (one domain controller, everything else on the other), so I deleted all of the snapshots that I needed to get rid of on the first VM, one-by-one. From previous experience I knew that I could delete multiple snapshots before the initial merge operation completed. Hyper-V creates a queue of the merge operations that need to complete before the virtual machine can be restarted again. I left myself with only the latest snapshot and moved on to the second virtual machine to do the same. At this point I got a little too clever and started deleting the second snapshot before the first snapshot deletion was queued. It usually only takes a few seconds to complete but I jumped the gun and Hyper-V Manager threw two errors (4096 and 16410) regarding Virtual Machine file access when I tried to delete the second snapshot.</p>
<p><span id="more-941"></span><a href="http://tristanwatkins.com/wp-content/uploads/HyperV_Error_4096.png"><img style="display: inline; border: 0px;" title="Hyper-V_Error_4096" src="http://tristanwatkins.com/wp-content/uploads/HyperV_Error_4096_thumb.png" border="0" alt="HyperV Error 4096 thumb Recovering from Hyper V Virtual Machine corruption" width="549" height="387" /></a></p>
<p><a href="http://tristanwatkins.com/wp-content/uploads/HyperV_Error_16410.png"><img style="display: inline; border: 0px;" title="Hyper-V_Error_16410" src="http://tristanwatkins.com/wp-content/uploads/HyperV_Error_16410_thumb.png" border="0" alt="HyperV Error 16410 thumb Recovering from Hyper V Virtual Machine corruption" width="548" height="388" /></a></p>
<p>After that I tried to delete other snapshots but I kept getting errors and the VM entered a <em>Saved-Critical</em> state. This will happen when Hyper-V Manager cannot access a file system location or cannot find a file, for instance when a removable hard drive is pulled out.</p>
<p>Approximately 30 seconds later, Hyper-V thought that it regained access to the location:</p>
<p><a href="http://tristanwatkins.com/wp-content/uploads/HyperV_Error_4098.png"><img style="display: inline; border: 0px;" title="Hyper-V_Error_4098" src="http://tristanwatkins.com/wp-content/uploads/HyperV_Error_4098_thumb.png" border="0" alt="HyperV Error 4098 thumb Recovering from Hyper V Virtual Machine corruption" width="549" height="390" /></a></p>
<p>However, I couldn&#8217;t get any snapshots to delete and the virtual machine wouldn&#8217;t start. After a few minutes of panicked clicking I decided to restart the Hyper-V services. When they came back up my VM disappeared. The Virtual Machine configuration file was corrupted.</p>
<p><a href="http://tristanwatkins.com/wp-content/uploads/HyperV_Error_16310.png"><img style="display: inline; border: 0px;" title="Hyper-V_Error_16310" src="http://tristanwatkins.com/wp-content/uploads/HyperV_Error_16310_thumb.png" border="0" alt="HyperV Error 16310 thumb Recovering from Hyper V Virtual Machine corruption" width="548" height="388" /></a></p>
<p>The next event suggests that a snapshot file was also corrupted.</p>
<p><a href="http://tristanwatkins.com/wp-content/uploads/HyperV_Error_16330.png"><img style="display: inline; border: 0px;" title="Hyper-V_Error_16330" src="http://tristanwatkins.com/wp-content/uploads/HyperV_Error_16330_thumb.png" border="0" alt="HyperV Error 16330 thumb Recovering from Hyper V Virtual Machine corruption" width="548" height="385" /></a></p>
<p>These 16310 and 16330 errors repeated for a while. Panic continued. Eventually I rebooted. On reboot the VM was still missing and the 16310/16330 errors persisted.</p>
<p>On a hunch I decided to see what the AVHD files (the differencing disks that correlate with snapshot states) looked like.</p>
<p><a href="http://tristanwatkins.com/wp-content/uploads/HyperV_AVHDFiles.png"><img style="display: inline; border: 0px;" title="Hyper-V_AVHDFiles" src="http://tristanwatkins.com/wp-content/uploads/HyperV_AVHDFiles_thumb.png" border="0" alt="HyperV AVHDFiles thumb Recovering from Hyper V Virtual Machine corruption" width="548" height="265" /></a></p>
<p>This looked very much like what I would have expected if nothing had gone wrong (and if none of the snapshot deletions completed). Sticking with this line of inquiry (and what the 16310 error suggests), I created a new virtual machine and pointed it at the most recent AVHD file (selected above). All of my snapshots were missing but the virtual machine created successfully. I started the virtual machine and it was clearly in the same state it was in before I took the most recent snapshot, with a few caveats. In my panic I forgot to re-create my second NIC, so the VM started with only one (the one that I specified when I created the new VM). I also forgot to give it a second CPU. So I shut down the VM, made these changes, restarted, reconfigured the second NIC and tested that everything worked to my expectations. Recovery complete, so I shut down both VMs again.</p>
<p>At this point I&#8217;d recovered the VM but I still had a bunch of unnecessary data in my branch of differencing disks. In order to clean this up, I took a new snapshot of both VMs and exported the latest snapshot of each of them. This merged all the differences across the AVHD files in to a new, self-contained VHD file. After the exports finished I deleted the old VMs, waited for the Destroy operations to complete, cleaned up lingering files on the file system and imported the new exports. I took a new snapshot, as this is my new stable starting point and everything was (relatively speaking) back to normal. Phew!</p>
<p>With hindsight, I would have handled the recovery as follows:</p>
<ul>
<li>Create new VM, pointing at latest differencing disk (or whichever snapshot state you wanted to preserve).</li>
<li>Reconfigure processors.</li>
<li>Reconfigure network adapters in Hyper-V Manager.</li>
<li>Start the virtual machine.</li>
<li>Reconfigure NICs in the guest.</li>
<li>Reboot.</li>
<li>Test everything is working as expected in the VM.</li>
<li>Shut Down.</li>
<li>Snapshot.</li>
<li>Export.</li>
<li>Delete old VM from Hyper-V Manager.</li>
<li>Wait for the Destroy operation to complete.</li>
<li>Delete any lingering files from the file system.</li>
<li>Import the exported virtual machines.</li>
</ul>
<p>As I hinted at above, having gone through this process, it occurred to me that you could probably point at whichever AVHD file you wanted to, if you didn&#8217;t want to use the latest snapshot, assuming none of the AVHD files were corrupted. In this case it was just the virtual machine XML file and possibly the snapshot file that were corrupted, rather than the VHD file and differencing disks (AVHD files) themselves. The problem would be identifying which AVHD file corresponds to the snapshot that you want to keep, but in principal I think this would work.</p>
<p>I should note that this is probably unsupported, but you&#8217;re not really losing anything because otherwise you would have only been able to recover the first VHD file. This technique wouldn&#8217;t be much use if you didn&#8217;t know which snapshot you were after or if you wanted to recover the entire snapshot tree, but this fix gives you some recovery where the virtual machine file and the snapshot tree are corrupted but the disk data is not.</p>
]]></content:encoded>
			<wfw:commentRss>http://tristanwatkins.com/index.php/recovering-from-virtual-machine-corruption/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Publishing a network-isolated virtual machine with RemoteApp</title>
		<link>http://tristanwatkins.com/index.php/publishing-a-network-isolated-virtual-machine-with-remoteapp/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=publishing-a-network-isolated-virtual-machine-with-remoteapp</link>
		<comments>http://tristanwatkins.com/index.php/publishing-a-network-isolated-virtual-machine-with-remoteapp/#comments</comments>
		<pubDate>Wed, 21 Apr 2010 06:30:56 +0000</pubDate>
		<dc:creator>Tristan Watkins</dc:creator>
				<category><![CDATA[Consultancy and Design]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Virtualisation]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[Hyper-V]]></category>
		<category><![CDATA[ICS]]></category>
		<category><![CDATA[mdop]]></category>
		<category><![CDATA[med-v]]></category>
		<category><![CDATA[Remote Desktop Services]]></category>
		<category><![CDATA[RemoteApp]]></category>
		<category><![CDATA[SharePoint 2007]]></category>
		<category><![CDATA[SharePoint 2010]]></category>
		<category><![CDATA[TsAppAllowList]]></category>
		<category><![CDATA[Virtual Machine]]></category>
		<category><![CDATA[Windows Server 2008 R2]]></category>
		<category><![CDATA[Workgroup]]></category>

		<guid isPermaLink="false">http://tristanwatkins.com/?p=897</guid>
		<description><![CDATA[To understand the development environment design choices that this article pertains to, it may be worth glancing at the design section of my SharePoint development series before diving in, if you haven&#8217;t already followed those posts. Cloning isolated VMs vs. scripted installation One of the challenges we&#8217;ve always faced with SharePoint development has been the [...]]]></description>
			<content:encoded><![CDATA[<address>To understand the development environment design choices that this article pertains to, it may be worth glancing at <a title="Building a SharePoint 2007/2010 development environment - Part II: Design" href="http://tristanwatkins.com/?p=499" target="_self">the design section of my SharePoint development series</a> before diving in, if you haven&#8217;t already followed those posts.</address>
<h2>Cloning isolated VMs vs. scripted installation</h2>
<p>One of the challenges we&#8217;ve always faced with SharePoint development has been  the tension between cloning actually identical environments versus automating  the deployment across distinct environments (or worse, repeating the installation manually). In the first case we save time  by eliminating reconfiguration and this ensures a consistent experience for each user. This is particularly beneficial for software development. These benefits can also be  obtained by scripting installation/configuration/deployment but there&#8217;s a  considerable overhead associated with developing and testing those scripts. As SharePoint 2010 is still quite new and we&#8217;ve been working on projects for some time now, we didn&#8217;t have the luxury of waiting for those refinements and we needed to take advantage of these efficiencies as we had done with SharePoint 2007 projects.</p>
<p><span id="more-897"></span>This cloning approach has one big drawback: it requires network isolation in order to prevent network, machine or SID duplication issues. We  can make up for that partially by using Network Address Translation (NAT) so  that we can get outbound connectivity from the VMs (we do this using Internet  Connection Sharing to an internal network), but this doesn&#8217;t provide any inbound connectivity for  Remote Desktop connections to the VMs or the SharePoint applications in them. Remote Desktop access may be desirable because of the limitations of the Hyper-V Virtual Machine Connection or because the users do not have permissions to Hyper-V itself. Alternately, it may be desirable to expose the virtual machine&#8217;s browser or another application directly, as I&#8217;ll describe later in this article.</p>
<p>Before I detail the approach to publishing a network-isolated remote desktop connection, I should note that it&#8217;s also possible to lock down the environment using Windows Firewall and Hyper-V networking so that inbound traffic is <em>isolated enough</em> that most duplication issues are accounted for &#8211; but this requires considerable planning, additional reconfiguration and it&#8217;s a large enough topic that it requires another post (I will try to revisit this soon). In short, I think each approach addresses different needs. For now, I&#8217;ll talk about RemoteApp.</p>
<h2>RemoteApp to a Remote Desktop</h2>
<p>It&#8217;s been some time since I looked at the new features in Windows Server 2008 R2. I spent most of last Summer getting to grips with them but have been living in a world of SharePoint 2010 since, so I never got a chance to revisit the interesting developments with Remote Desktop Services. Among them is RemoteApp, which allows us to publish applications  (rather than a terminal session) on a server through Remote Desktop Web Access.  That application could be Word, PhotoShop, SQL Server Management Studio, ULS  Viewer or whatever might be useful.</p>
<p>In the last couple of weeks I&#8217;ve  addressed a couple of requirements by publishing a saved Remote Desktop  connection file through Remote Desktop Web Access. To give a brief overview of the solution, I&#8217;ve logged on to the Hyper-V host server and saved a Remote Desktop connection file pointed at the target  Virtual Machine. This  relies on the Hyper-V host&#8217;s internal network connection to the virtual  machine and our  LAN connection to the Hyper-V host (the VM does not have an external network connection). Then I published that saved remote desktop connection file using RemoteApp. Users launch the connection through the Remote Desktop Web Application. This is a very basic example of how RemoteApp can  help us by bridging a network barrier that we have to maintain.</p>
<h2>RemoteApp to a Remote Application</h2>
<p>If we get slightly more complex we can also get to the real beauty of this approach. RDP connection files can now be customised so  that you can expose an application inside of the target machine.  This is like Windows 7&#8242;s XP Mode, except I&#8217;m able to take advantage of the  remote machine&#8217;s applications through Remote Desktop Services without having to  log on to either the Hyper-V server&#8217;s terminal or the virtual machine. Put another way, I can log on to my Hyper-V server&#8217;s Remote Desktop Web Application portal and launch an RDP file. That RDP file bypasses both terminals and provides me with the application that I&#8217;m really after &#8211; say, ULS Viewer, or a browser that can render the network-isolated SharePoint data. Here&#8217;s a more detailed scenario:</p>
<ul>
<li>
<div>A Hyper-V server on the network has a number of virtual machines that fully  replicate our domain infrastructure.</div>
<ul>
<li>Because this is an exact copy of our live environment we need to keep the test environment completely network-isolated.</li>
</ul>
</li>
<li>We&#8217;re testing Word 2010 on multiple operating systems before rolling it out  across the network.</li>
<li>The tester needs to be able to access the Word Application but should not  have access to the rest of the infrastructure.</li>
<li>We have XP, Vista and Windows 7 VMs on the Hyper-V server – all running Word  2010.</li>
<li>
<div>We log on to the Hyper-V server and create saved RDP files to each of those  VMs.</div>
<ul>
<li>We modify those RDP files so that they expose only the Word application.  This is a few lines of added or modified XML in the connection file and a change to the <em>TsAppAllowList</em> registry key on each virtual machine. More detail on <a href="http://blogs.msdn.com/rds/archive/2010/03/08/remoteapp-for-hyper-v-vdi-deployment.aspx">that  approach</a> here.</li>
</ul>
</li>
<li>We add each of these saved RDP files as Remote Applications in the <em>RemoteApp Manager</em> Remote Desktop  Services node on the Hyper-V server. To be clear, this is new Remote Desktop Services functionality. It only happens to be a Hyper-V server because we&#8217;re exposing Hyper-V guests.</li>
<li>The tester logs on to the Remote Desktop Web Access site and launches the RDP  files as needed. Each file will expose an instance of Word 2010 which is running  in the remote (and isolated) virtual machine&#8217;s context.</li>
</ul>
<p>This experience is improved if you install the Hyper-V server&#8217;s certificate for the Remote Desktop Web Application site. Also note, you will be prompted twice to authenticate &#8211; once to the Hyper-V server and once to the virtual machine. That&#8217;s not a great user experience, but it&#8217;s also not the worst. To be honest, I haven&#8217;t had the time to see if it can be improved with Kerberos or another approach. I&#8217;d be interested to hear more if others have deployed this approach for more critical loads or more demanding users.</p>
<h2>Other uses</h2>
<p>There are loads of potential uses for desktop virtualisation like this. One  of the most obvious ways that it could be used would be to allow a team member  to access an isolated development environment (or one of its applications) over the LAN. This wasn&#8217;t possible with my earlier design, and frankly, you don&#8217;t want to do a lot of this, but sometimes it can be really useful.</p>
<p>I realise this is conceptually difficult, so feel free to ask questions if this hasn&#8217;t been my clearest post. I&#8217;ve skipped some steps that are required to deploy the Remote Desktop Services. That&#8217;s another topic that is beyond the scope of this post. Again, I&#8217;m happy to answer questions about that, although I&#8217;d recommend hitting TechNet for a few hours before diving in. There&#8217;s loads of new functionality here and you may find another option suits your needs better. To the initiate, the Microsoft App-V, MED-V, MDOP story might look a bit &#8220;nice to have&#8221;, or possibly too complex, but this really isn&#8217;t complicated to implement and engaging with this new technology has opened my mind to other design options that I had previously shut out. Definitely worth a look.</p>
]]></content:encoded>
			<wfw:commentRss>http://tristanwatkins.com/index.php/publishing-a-network-isolated-virtual-machine-with-remoteapp/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>MAC duplication issues with captured VMs and WDS</title>
		<link>http://tristanwatkins.com/index.php/mac-duplication-issues-with-captured-vms-and-wds/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=mac-duplication-issues-with-captured-vms-and-wds</link>
		<comments>http://tristanwatkins.com/index.php/mac-duplication-issues-with-captured-vms-and-wds/#comments</comments>
		<pubDate>Fri, 12 Mar 2010 01:07:34 +0000</pubDate>
		<dc:creator>Tristan Watkins</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[IT Management]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[Virtualisation]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Hyper-V]]></category>
		<category><![CDATA[MAC]]></category>
		<category><![CDATA[MVSMP]]></category>
		<category><![CDATA[Virtual Machine]]></category>
		<category><![CDATA[Windows 7]]></category>
		<category><![CDATA[Windows Deployment Services]]></category>
		<category><![CDATA[Windows Server 2008 R2]]></category>

		<guid isPermaLink="false">http://tristanwatkins.com/?p=868</guid>
		<description><![CDATA[I&#8217;ve previously reported problems with MAC duplication on Hyper-V host external network connections on Windows Server 2008 R2, which I&#8217;ve never fully resolved, although we have been successfully working around the issue as detailed in the first link above. A couple of weeks ago I was working simultaneously on my Windows Server 2008 R2 laptop [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve <a title="Routine loss of connectivity on a Hyper-V host’s external connection" href="http://tristanwatkins.com/?p=115" target="_self">previously reported</a> problems with <a title="More on routine loss of external network connectivity on Hyper-V hosts (not guests)" href="http://tristanwatkins.com/?p=492" target="_self">MAC duplication on Hyper-V <strong>host</strong> external network connections</a> on Windows Server 2008 R2, which I&#8217;ve never fully resolved, although we have been successfully working around the issue as detailed in the first link above.</p>
<p>A couple of weeks ago I was working simultaneously on my Windows Server 2008 R2 laptop with Hyper-V (the same laptop build that&#8217;s been previously mentioned) and a Windows 7 x64 build that I was using for testing, when I noticed severe but intermittent network problems on both machines. After a fair amount of head scratching, I noticed that the two laptops had duplicated MAC addresses. Blatantly that shouldn&#8217;t happen, as the whole point of a MAC address is to provide uniqueness. The most perplexing issue was that the addresses conflicted across two different operating systems. However, it happened. Both wired adapters on the two machines had the MAC address 00-21-9B-DC-8E-0B. I uninstalled the wired adapter on the Windows 7 machine and scanned for new hardware. When the device reinstalled the problem went away.<span id="more-868"></span></p>
<p>Since then I&#8217;ve been poking around a bit and I&#8217;ve found this <a title="Desktop Files" href="http://technet.microsoft.com/en-us/magazine/2007.12.desktopfiles.aspx" target="_blank">old TechNet article</a> from December 2007 in which Wes Miller says:</p>
<p style="padding-left: 30px;">In addition to changing the SID and the machine name, you also need to change certain values that may be specific to the virtual computing technology you&#8217;re using. In particular, you need to change the MAC address (the unique ID for networking devices). Plus, many virtual applications also have their own unique identifier. Most store these in their own machine configuration files, so you&#8217;ll want to know how to manipulate those entries (and maintain their validity). Note that many virtualization products that support Pre-Boot Execution Environment (PXE) key the SMBIOS UUID based on their own unique ID—emphasizing the need to change this (or let the virtualization software change it for you, if supported) if you&#8217;re joining it to a domain; otherwise, managing WDS or RIS-client systems can become impossible (if GUIDs conflict). <strong>Most of the virtualization solutions I&#8217;ve worked with can have severe networking problems in the case of duplicate MAC addresses</strong>; so if you are not just moving a virtual machine, it&#8217;s very important that you change the MAC address if the virtualization software does not do it for you.</p>
<p>That&#8217;s by no means conclusive, but I&#8217;m not turning up much else. So if you&#8217;re encountering network problems with <a title="Building virtual Windows Deployment Services images" href="http://tristanwatkins.com/?p=233" target="_blank">WDS images that began their life as a virtual machine</a>, you may want to consider automating the un/re-installation of the NICs post-deployment or addressing that with WAIK somehow. Otherwise just make sure to do it manually before giving the machine to the recipient, or people will wind up with a rather frustrating network issue.</p>
<p>If we get around to doing any more testing of this or gather more evidence from internal deployments, I&#8217;ll post the findings here. In the mean time I thought I&#8217;d update the ongoing saga here.</p>
]]></content:encoded>
			<wfw:commentRss>http://tristanwatkins.com/index.php/mac-duplication-issues-with-captured-vms-and-wds/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Building virtual Windows Deployment Services images</title>
		<link>http://tristanwatkins.com/index.php/building-virtual-windows-deployment-services-images/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=building-virtual-windows-deployment-services-images</link>
		<comments>http://tristanwatkins.com/index.php/building-virtual-windows-deployment-services-images/#comments</comments>
		<pubDate>Mon, 21 Sep 2009 23:36:58 +0000</pubDate>
		<dc:creator>Tristan Watkins</dc:creator>
				<category><![CDATA[Virtualisation]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Virtual Machine]]></category>
		<category><![CDATA[Windows Deployment Services]]></category>
		<category><![CDATA[Windows Server 2008 R2]]></category>

		<guid isPermaLink="false">http://tristanwatkins.com/?p=233</guid>
		<description><![CDATA[While I&#8217;ve been ripping off Virtual PC Guy I may as well stay at it. He has a great tip in his geeking out with WDS post suggesting that custom installation images can be built up in a virtual machine and captured from virtual rather than capturing the physical build. This allows for ongoing maintenance [...]]]></description>
			<content:encoded><![CDATA[<p>While I&#8217;ve been ripping off Virtual PC Guy I may as well stay at it. He has a <a title="Virtual PC Guy" href="http://blogs.msdn.com/virtual_pc_guy/archive/2009/08/25/geeking-out-with-windows-deployment-services.aspx" target="_blank">great tip in his geeking out with WDS post</a> suggesting that custom installation images can be built up in a virtual machine and captured from virtual rather than capturing the physical build. This allows for ongoing maintenance of the build without worrying about capturing the same image multiple times by taking a snapshot before SysPrep. It&#8217;s a great suggestion.</p>
<p>I&#8217;d actually geared myself up for this approach with the release of Windows Server 2008 R2 RTM, since <a title="Technet" href="http://technet.microsoft.com/en-us/library/dd363560(WS.10).aspx" target="_self">Windows Deployment Services supports deployment of VHDs</a> now, but I deflated myself a bit when I realised this was only a means of deploying for native boot from VHD rather than deploying a VHD to hardware as though it was a captured WIM. When I figured this out I went back to capturing physical images, and blindly overlooked this option. Nice one!</p>
]]></content:encoded>
			<wfw:commentRss>http://tristanwatkins.com/index.php/building-virtual-windows-deployment-services-images/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows Time, the PDC Emulator and the VM</title>
		<link>http://tristanwatkins.com/index.php/windows-time-the-pdc-emulator-and-the-vm/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=windows-time-the-pdc-emulator-and-the-vm</link>
		<comments>http://tristanwatkins.com/index.php/windows-time-the-pdc-emulator-and-the-vm/#comments</comments>
		<pubDate>Sat, 14 Mar 2009 14:21:49 +0000</pubDate>
		<dc:creator>Tristan Watkins</dc:creator>
				<category><![CDATA[Authentication]]></category>
		<category><![CDATA[Virtualisation]]></category>
		<category><![CDATA[Kerberos]]></category>
		<category><![CDATA[PDC Emulator]]></category>
		<category><![CDATA[Time]]></category>
		<category><![CDATA[Virtual Machine]]></category>

		<guid isPermaLink="false">http://tristanwatkins.com/?p=27</guid>
		<description><![CDATA[Or&#8230; why it&#8217;s important to disable Host Time Synchronisation on a domain controller. A few months ago I reminded myself of a major gotcha when planning a virtual infrastructure. Assume that you run more than one domain in more than one forest and that trusts are in place to authenticate users across those forests. This [...]]]></description>
			<content:encoded><![CDATA[<p>Or&#8230; why it&#8217;s important to <a title="Why reading best practice guidance is a good idea" href="http://technet.microsoft.com/en-us/library/cc708332.aspx" target="_blank">disable Host Time Synchronisation on a domain controller</a>.</p>
<p>A few months ago I reminded myself of a major gotcha when planning a virtual infrastructure. Assume that you run more than one domain in more than one forest and that trusts are in place to authenticate users across those forests. This could be a development/test/staging environment, or as will no doubt be more common in the coming years, it could be a virtualised infrastructure.<span id="more-27"></span></p>
<p>Assume that Kerberos needs to operate across these domains for any number of purposes, from application authentication to Active Directory migration. If you want Kerberos to work, you&#8217;re going to need to synchronise time across these domains, as the clock synchronisation is used to time stamp tickets in order to prevent replay attacks. Time synchronisation is of course built in to the Windows domain infrastructure, and should support this nicely. <a title="Technet Windows Time configuration article" href="http://support.microsoft.com/kb/816042/" target="_self">Configuring the Windows Time service on a PDC emulator</a> is a bit fiddly, but should be achievable for anyone who runs a multiple domain infrastructure. But what if it goes wrong?</p>
<p>I spent a few hours bashing my head against this utterly confounding problem until the obvious whacked me in the face. The problem:</p>
<ul>
<li>I would run w32tm /resync /rediscover and all would synchronise successfully, then about five seconds later the clock would revert to its former time, about 2 minutes and 45 seconds ahead of the recently received absolute value</li>
<li>There were no error logs, just successful resynchronisation messages and then nothing to indicate why the clock reverted</li>
<li>I set the registry keys to enable debug logging and this revealed nothing more than that the time of the events was shifting as you would expect</li>
</ul>
<p>Then it hit me. The PDC emulator was a virtual machine and the host virtual server was in another domain/forest. That host server was failing time synchronisation with its DC, so I manually reset the host clock and voila! The PDC emulator was synchronised within seconds. Obviously there&#8217;s another task to find out why the host was failing synchronisation with its time server, but that&#8217;s totally beside the point.</p>
<p>The lesson: Obey the best practice guidance and turn off Host Time Synchronisation for virtual domain controllers. In Virtual Server 2005 R2 the setting is in the Virtual Machine Addition Properties.</p>
<p>And a follow-up note: once Host Time Synchronisation is disabled you will need to find a new source of reliable clock for the the VMs, as they don&#8217;t have a CMOS clock to rely on. You could use something as simple and free as <a title="World Time Server" href="http://www.worldtimeserver.com/atomic-clock/" target="_blank">Atomic Clock Sync</a>. If you fail to do this the VMs will lose time when they are shut down.</p>
]]></content:encoded>
			<wfw:commentRss>http://tristanwatkins.com/index.php/windows-time-the-pdc-emulator-and-the-vm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

