Unsupported Cluster Configuration

Maybe Michael should go away more often.  I seem to get a lot more done when he’s out.

Today, I added the third node to the Hyper-V R2 cluster we’re currently testing.  When I did, VMM freaked out and all of the guests on the other two nodes went into a warning state.  The error they displayed:

Warning (13921)

Highly available virtual machine <INSERT NAME> is not supported by VMM because one or more of its network adapters is not configured correctly.

Recommended Action

Ensure that all of the virtual network adapters are either disconnected or connected to highly available virtual networks.

So, how do we fix this issue?  You use Google, of course.  A quick Google-ing gave the following information (edited for grammar):

For a VN [Virtual Network] to be marked as HA, the location and tag of the VN in all nodes must be the same.  For each VN in the cluster[, be sure that]:

  • The NICs to which the VN is attached in each node have the same location.
  • The Tag in the VN in each node is the same.
  • The VN Name is the same.
  • After you commit changes, refresh the cluster so ensure that the VN is detected as HA.

Our problem, specifically, was related to the network tagging.  To fix the tag, do the following:

  1. Open VMM, and navigate to the “Hosts” view.
  2. Right click on one of the hosts and select “Properties.”
  3. Navigate to the “Networking” tab.
    VMM Network Tab
  4. Once, there, you’ll need to click each network (in this case, we have two) and add text to the “Network tag:” field.  Keep in mind that these tags will need to be the same across all your hosts in order to make them highly available.
    VMM Network Tag
  5. Rinse and repeat for the rest of your hosts.
  6. Once you finish tagging, you’ll need to refresh the cluster node in VMM.
    vmmrefresh

That fixed our problem.  Maybe it will help you.

More information here in the “Troubleshoot ‘Unsupported Cluster Configuration’ Status for a Highly Available Virtual Machine” section.

The subsystem needed…

So, I’m bee-bopping along setting up a new Server 2008 R2 virtual host, when I get to our SAN software’s install.  When I tried to run the executable, the following error was thrown:

The subsystem needed to support the image type is not present.

A quick Googling led me to this Technet post.  The relevate parts of the post:

WOW64 is not present in Microsoft Hyper-V Server 2008 R2.  This change was made because Microsoft Hyper-V Server is supposed to be a single purpose OS, and users have asked for it to be as small as possible.  So, whenever possible, we will not include general Windows components that are not needed by Hyper-V.

And the resolution:

Issue this command to install WOW64 support:

start /w ocsetup ServerCore-WOW64

And of course: reboot.

2008 R2 High Availability

Michael and I are probably the only two people in the world that would find this even remotely amusing, but…

We’re testing 2008 R2′s Failover Clustering.  In particular, we’re going to test Hyper-V and highly available machines.  So, in Michael’s infinite wisdom, he asked me what to name the first test cluster.  I suggested the following:

clusterf

Installation Results

When you run the script mentioned here (to updated a Server Core 2008 install), you’ll see a part of the output called “Installation Results.”  In the infinite wisdom of Microsoft, they don’t seem to feel the need to plainly document these results.  They have instead included a number (1-3) to indicate the results of the installation.  Here are these codes in case you’re looking:

Exit Codes:
0 = scripting failure
1 = error obtaining or installing updates
2 = installation successful, no further updates to install
3 = reboot needed; rerun script after reboot

More here.

Disable Hibernation

If you’re in need of disabling hibernation on your 2008 servers (or your Vista desktop, as the case may be), open a command line and type this:

powercfg.exe /hibernate off

To turn it back on, replace “off” with “on”.

This will do away with that annoying file (hiberfil.sys) at the root of C:\ (or whatever your system volume’s drive letter may be) that is the size of your physical RAM – thus freeing up much space.

Keep in mind, however, that hibernation cannot be turned on if you have Hyper-V installed.  I’m curious, though, why would you hibernate a server?  And before those of you that use 2008 as a workstation complain, why would hibernation be enabled by default?

Create a Service in Windows

There are only a few things I hate more than SPAM.  Only a few.

Anyway, I’ve been migrating to my new server and with that comes email.  And, of course, with email comes SPAM filtering.  So, I’ve been trying to run SpamAssassin.  Luckily, someone ported SA to Windows.  But, in this case, you have to run the executable or the filtering doesn’t happen.

Now, any self-respecting admin won’t stay logged into his server 24 hours a day, seven days a week.  That’s where services come in.  Here’s a nice little (easy) write up for creating your own service in Windows.  Best of all, it was written by Microsoft.

A note: this article says it’s for 2003 and below (and does mention anything about 64-bit).  I’ve just finished installing spamd.exe as a service on my machine and it works fine.  That said, I offer no warranties or gaurantees this will work for everyone.  Alternatively, there is this from Microsoft’s K nowledgebase – I just didn’t have access to the resource kit at the time.  Happy spamming.

winsxs: The Bain of My Current Existance

Long time no see.

I was digging through one of our virtual terminal servers today to try and figure out why there was only 29.8MB of 20GB free on the system partition.  A large culprit turned out to be the C:\Windows\winsxs folder.  Unfortunately, there doesn’t seem to be a lot that can be done about this 6GB+ folder full of, well, crap.

From MSDN:

Administrators should not, for any reason, take it upon themselves to clean out the directory – doing so may prevent Windows Update and MSI from functioning properly afterwards.

But, alas, this is just another day in the life.  I’m bleeding from my eyeballs.  We’re still looking for a fix, workaround, way to move it, or a way to delete it, but I don’t have much confidence that that approach.

Really, Microsoft?  Really?

Windows Server 2008

Today is officially billed as “Laptop Rebuild Day.”  And today, I will be reloading Windows Server 2008 on my laptop.  Rumor (and experience) has it that it performs much better than Vista.  So, an article from Mark Wilson on how to turn this desktop-in-disguise server OS into your everyday workstation:

Windows Server 2008 is a great workstation operating system too

Updating Windows Server 2008 Core

Tonight is “Server Night.” A night set aside on the third Tuesday of every month dedicated to drinking a lot of caffeine and causing downtime for the company.

The first task of the night: update our Core installations (which includes several virtual servers and physical servers alike). The problem comes in with the fact that Core has no GUI (go figure) and everything has to be done at the command line. Herein lies our problem, how to update the stupid thing?

So, naturally, a Google marathon has ensued all morning. I read blog after blog after Microsoft KB. One blog appeared as my shining light in the darkness: Nathan’s Daily Grind – more specifically, this post: How to apply WSUS updates to a Windows Server 2008 Core machine.

This led me over to a MSDN article: Searching, Downloading, and Installing Updates, which solved my problems. I’ve posted the text of the MSDN article below for posterity.

Searching, Downloading, and Installing Updates

The scripting sample in this topic shows you how to use Windows Update Agent (WUA) to scan, download, and install updates.

The sample searches for all the applicable software updates and then lists those updates. Next, it creates a collection of updates to download and then downloads them. Finally, it creates a collection of updates to install and then installs them.

If you want to search, download, and install a specific update that you identify by using the update title, see Searching, Downloading, and Installing Specific Updates.

Before you attempt to run this sample, note the following:

  • WUA must be installed on the computer. For more information about how to determine the version of WUA that is installed, see Determining the Current Version of WUA.
  • The sample does not provide its own user interface.
  • WUA prompts the user to restart the computer if an update requires a restart.
  • The sample can download updates only by using WUA. It cannot download updates from a Software Update Services (SUS) 1.0 server.
  • Running this sample requires Windows Script Host (WSH). For more information about WSH, see the WSH section of the Microsoft Platform SDK. If the sample is copied to a file named WUA_SearchDownloadInstall.vbs, you can run the sample by opening a Command Prompt window and typing the following command at the command prompt.

cscript WUA_SearchDownloadInstall.vbs

Example

Set updateSession = CreateObject("Microsoft.Update.Session")
Set updateSearcher = updateSession.CreateupdateSearcher()

WScript.Echo "Searching for updates..." & vbCRLF

Set searchResult = _
updateSearcher.Search("IsInstalled=0 and Type='Software'")


WScript.Echo "List of applicable items on the machine:"

For I = 0 To searchResult.Updates.Count-1
Set update = searchResult.Updates.Item(I)
WScript.Echo I + 1 & "> " & update.Title
Next

If searchResult.Updates.Count = 0 Then
WScript.Echo "There are no applicable updates."
WScript.Quit
End If

WScript.Echo vbCRLF & "Creating collection of updates to download:"

Set updatesToDownload = CreateObject("Microsoft.Update.UpdateColl")

For I = 0 to searchResult.Updates.Count-1
Set update = searchResult.Updates.Item(I)
WScript.Echo I + 1 & "> adding: " & update.Title
updatesToDownload.Add(update)
Next


WScript.Echo vbCRLF & "Downloading updates..."


Set downloader = updateSession.CreateUpdateDownloader()
downloader.Updates = updatesToDownload
downloader.Download()


WScript.Echo vbCRLF & "List of downloaded updates:"

For I = 0 To searchResult.Updates.Count-1
Set update = searchResult.Updates.Item(I)
If update.IsDownloaded Then
WScript.Echo I + 1 & "> " & update.Title
End If
Next


Set updatesToInstall = CreateObject("Microsoft.Update.UpdateColl")

WScript.Echo vbCRLF & _
"Creating collection of downloaded updates to install:"

For I = 0 To searchResult.Updates.Count-1
set update = searchResult.Updates.Item(I)
If update.IsDownloaded = true Then
WScript.Echo I + 1 & "> adding: " & update.Title
updatesToInstall.Add(update)
End If
Next

WScript.Echo vbCRLF & "Would you like to install updates now? (Y/N)"
strInput = WScript.StdIn.Readline
WScript.Echo

If (strInput = "N" or strInput = "n") Then
WScript.Quit
ElseIf (strInput = "Y" or strInput = "y") Then
WScript.Echo "Installing updates..."
Set installer = updateSession.CreateUpdateInstaller()
installer.Updates = updatesToInstall
Set installationResult = installer.Install()

'Output results of install
WScript.Echo "Installation Result: " & _
installationResult.ResultCode
WScript.Echo "Reboot Required: " & _
installationResult.RebootRequired & vbCRLF
WScript.Echo "Listing of updates installed " & _
"and individual installation results:"

For I = 0 to updatesToInstall.Count - 1
WScript.Echo I + 1 & "> " & _
updatesToInstall.Item(i).Title & _
": " & installationResult.GetUpdateResult(i).ResultCode
Next
End If