Using PowerShell To Send Metrics To Graphite


One side of monitoring that is difficult or expensive in the Windows world is performance monitoring. Windows comes with Performance Monitor, but that is only useful for short term monitoring or for troubleshooting a live performance problem. If you want to keep historic metrics, you might use something like SCOM, but it can be expensive and is a fairly complex product.

There is a tool that has been around for a few years in the Linux world called Graphite. This is a very simple, but powerful metric collection system which used to store and render time-series data. You can find out more about it at the Graphite website. There is also an excellent blog post which introduces you to the baisc concepts of Graphite here:

The problem I faced was there was no way to get Windows Performance counters over to the Graphite server. There were a ton of daemons which do this on Linux, but Windows was left out.

In the environment I look after at work, my servers are all Windows, so I ended ended up writing my own PowerShell functions to do this collection and forwarding to a Graphite server. This is done over UDP to the metric collection daemon used by Graphite called Carbon.

Here is an example graph which can be generated in a few clicks in Graphite. It received its metrics from my Graphite PowerShell functions. It is tracking LDAP searches against our 3 domain controllers for the last 24 hours.


Another example, comparing CPU usage to SQL Work Tables Created on our database server for the last week.


The Configuration File

First off, there is an XML configuration file where you can specify the details of your Graphite server, how regularly you want to collect your metrics, the metrics you want to collect, and any filters to remove metrics you don’t want (this is useful when you have multiple network adapters but only care about 1 or 2 of them that are connected).

Here is what the included configuration file looks like:

As you can see, it is very easy to add metrics which will be collected by the script. You can configure your MetricSendIntervalSeconds, which is how long you want the script to wait before sending the metrics to Graphite. Keep in mind it takes around 1.5 seconds to get the default metrics included in the script, so I don’t recommend you collect and send metrics more than every 5 seconds.

How The Functions Work

The script includes a few internal functions which are used to getting metrics over to Graphite. All the functions have inbuilt help which you can access via the Get-Help PowerShell CmdLet.

  • Load-XMLConfig – Loads the configuration values in the XML file into an object which can be used inside the rest of the functions
  • ConvertTo-GraphiteMetric  – This takes the name of a Windows Performance counter and converts it to a metric name usable by Graphite

  • Send-GraphiteMetric – submits metrics to the Graphite Carbon Daemon using UDP. This can be useful on its own, for example if you want to send a metric so you know when you are about to deploy a new patch from the developers. You can compare the time of this metric to environment performance and see if the patch caused any performance impacts. Etsy has a great artilce on how they do this with Graphite here:

If you wanted to manually send a metric on patch install so you can graph it against other metrics, you can use the following command, which will use the current date to create the metric.

  • Start-StatsToGraphite – this is an endless While loop which collects the metrics specified in the XML file and sends them to Graphite. If you change the XML file while the script is running, the next metric send interval it runs through, it will reload the XML configuration file automatically, so any new Performance Counters will start being collected and sent through to Graphite.

With the VerboseOutput configuration value set in the XML file, you will see the following output when you run Start-StatsToGraphite from an interactive PowerShell session.


The script can also be run as a service, to make sure you don’t miss any metrics even if the machine reboots.

To start using PowerShell to to send metrics to Graphite in your environment, you can find more details on a detailed installation guide over at GitHub:

Replacing a failed disk in Windows Server 2012 Storage Spaces with PowerShell


Failed hard disks are in-evadable. There are many ways to provide resiliency for hard disk failure, and Windows Server 2012/Windows Server 2012 R2′s build in feature to provide this is Storage Spaces.

A hard disk failed inside my Storage Pool, so lets switch over to PowerShell to get this resolved.


PS: You can skip to the bottom of this post for the TL;DR version.


Firstly, open up an Administrative PowerShell prompt. To get the status of my Storage Space (which I called pool) I run the command


I can see that my Storage Space named pool is in a degraded state.

To check the health of the volumes sitting inside the Storage Pool, use the command


We can see that Media, Software and DocumentsPhotos volumes are have Degraded as their OperationalStatus. This means that they are still attached and accessible, but their reliability cannot be ensured should there be another drive failure. These volumes have either a Parity or Mirror parity setting, which has allowed Storage Spaces to save my data even with the drive failure.

The Backups and VMTemplates have a Detached operational status. I was not using any resiliency mode on this data as it is easily replaced, so it looks like I have lost the data on these volumes.

To get an idea what is happening at the physical disk layer I run the command


We can see that PhysicalDisk1 is in a failed state. As the HP N40L has a 4 bay enclosure with 4TB Hard Disks in them, it is easy to determine that PhyisicalDisk1 is in the first bay in the enclosure.

Retiring the failed Disk

Now I determined which disk had failed, the server was shutdown and the failed disk from the first bay was replaced with a spare 4TB Hard Disk.

With the server back online, open PowerShell back up with administrative permissions and check what the physical disks look like now


We can see that the new disk that was installed has taken the FriendlyName of PhysicalDisk1 and has a HealthStatus of Healthy. The failed disk has lost its FriendlyName and its OperationalStatus has changed to Lost Communication.

First lets single out the missing disk


Assign the missing disk to a variable

Next we need to tell the storage pool that the disk has been retired

Adding a new Disk

To add the replacement disk into the Storage Pool

Repairing the Volumes

The next step after adding the new disk to the Storage Pool is to repair each of the Virtual Disks residing on it.

We can see the the repair running by entering


The OperationalStatus of InService lets us know the volume is currently being repaired. The percentage completion of the repair can be found by running


Remove the lost VirtualDisks

Since there were no parity on the VMTemplates and Backups Volumes, they can be deleted with the following command

Removing the Failed Disk from the Pool

This step will not work if you still have Degraded disk in the Storage Pool, so make sure all repairs complete first.


Here is the Too Long; Didn’t Read version of the post

The full list of Windows Server Storage Spaces CmdLets can be found on TechNet here:

How to run VirtualBox on WHS 2011 – Part 2 of 2


If you have been following on from Part 1 in this series, I covered installing VirtualBox and how to manage VirtuaBox using the phpVirtualBox web interface. Hopefully you already have VirtualBox installed and running nicely on your Windows Home Server, and have a Virtual Machine or two.

All that’s left is to add the a few finishing touches too our configuration and we will have a great Virtual Machine hosting platform on top of Windows Home Server.

Automatically Start and Stop Virtual Machines on Boot-Up and Shutdown

On the rare occasion that you need to reboot your Windows Home Server, you want your Virtual Machines to be shutdown or paused and resumed when your server starts back up. Out of the box, VirtualBox doesn’t have this feature, but VBoxVMService can be configured to do this for us.

To perform these steps you are required to already have a Virtual Machine running on your system. The steps will need to be carried out for each Virtual Machine you want automatically stopped and started, so you will need to do this each time you add a Virtual Machine.

  • Browse to C:\Apps\VBoxVMService and open VBoxVmService.ini
  • Add the following lines to the end of the file, updating where necessary for your setup

  • To test if your configuration change worked easily:
    • Open something in your Virtual Machine, like an Explorer window or a Task Manager
    • On the WHS, from the Start Menu | Open Services | Click on the VBoxVMService and click Stop
    • Ensure you can no longer connect to your Virtual Machine (it’s just been put into a saved state)
    • In Services | Click on the VBoxVMService and click Start
    • Try and connect to your Virtual Machine again – upon reconnect you should have whatever you left open still there which means your Virtual Machine was saved and resumed successfully

Using Windows Accounts to Access the VirtualBox Web Interface

Instead of using just another username and password you need to remember to access the phpVirtualBox web interface, you can use Windows Home Server user accounts. This involves making a settings change in IIS to enable user account authentication, and disabling the password prompt in the phpVirtualBox configuration.

  • From the Start Menu | Open Internet Information Services (IIS) Manager
  • In the left navigation pane expand Your Server Name | Sites | Default Web Site and click on the VM virtual directory we created in Part 1 | In the right hand pane open Authentication

Figure - Modify Authentication Properties of the VM Virtual Directory

  • In the Authentication screen select Anonymous Authentication and click Disabled in the action pane on the right | select Basic Authentication and click Enabled in the action pane on the right

Figure - Disable Anonymous Authentication and Enable Basic

  • Now IIS has been configured, open C:\Apps\phpvirtualbox\config.php and uncomment (remove the # in-front) and update this line.
  • We also need to set some permissions on the C:\Windows\Temp folder, otherwise phpVirtualBox complains after the authentication change
    • Browse to C:\Windows | Right click on the Temp folder | Choose Properties
    • Click the Security tab and click Edit
    • In the Permissions for Temp screen click Add and enter the name Authenticated Users
    • After the account has been added put a tick in the Modify permissions box

Figure - Give Authenticated Users Modify Permissions

After you save the configuration file, browse to and you will be given a password dialog box. Enter your WHS username and password and you will be logged onto the phpVirtualBox interface.

Remote Desktop Virtual Machine Access Over the Web

One of the great features of VirtualBox is the remote desktop access to the Virtual Machines using the Microsoft Remote Desktop Protocol. phpVirtualBox utilizes this to allow us to remotely manage our virtual machines using the web interface.

We need to configure phpVirtualBox’s host name setting to allow us to access the virtual machines using the domain.

  • Open C:\Apps\phpvirtualbox\config.php in notepad
  • Uncomment the following line and enter in your home server domain name

The tasks below will need to be performed for each new virtual machine that is created.

Figure - Select a Virtual Machine and edit its settings

  • Select the Display menu item | Choose the Remote Display tab
  • Tick Enable Server and enter a Server Port (make sure you choose an unused port number) | For Authentication Method choose External | Press OK

Figure - Enable remote display and choose a port number and external authentication

  • We need to add a VirtualBox service as an exception in the Windows Firewall on the Windows Home Server to allow the remote desktop connection
    • On your WHS open the Start menu and enter Windows Firewall with Advanced Security in the search box | Open Windows Firewall with Advanced Security
    • Select Inbound Rules on the left | Click New Rule on the right
    • Select Program | Click Next
    • Select This program path | Click Browse and choose C:\Program Files\Oracle\VirtualBox\VBoxHeadless.exe

    Figure - Add a firewall rule for VBoxHeadless.exe 

    • Select Allow the connection | Click Next
    • Leave Domain, Private and Public ticked | Click Next
    • Enter the name VirtualBoxHeadless | Click Finish
  • A port forward in your router also needs to be created to allow a connection from the internet into the remote desktop session. This step is dependent on what type of router you have, but here is my port forwarding rule for reference

Figure - Make a port foward in your router to the Server Port entered earlier

  • Back in the VirtualBox web interface we can now click on the Console button at the top right hand side of the window when you select a virtual machine
  • You will be presented with a username and password box | Enter the username Administrator and the Administrator password for your WHS. (Note: The reason we need to use the Administrator account is because it is the one running the VirtualBox services)

Figure - Enter your WHS Administrator username and password 

  • You can now manage your virtual machine via remote desktop over the web!

Figure - Remotely managing a virtual machine over the web 

Just a quick note about security. We enabled External authentication for remote desktop in step 3 to prevent people being able to connect to the virtual machines using the Remote Desktop client in the event someone stumbles upon the ports that have been forwarded to allow the remote desktop access. This extra authentication ensures no one can jump onto any of the virtual machines without knowing the Administrator password.

Hopefully you have enjoyed this series on getting VirtualBox running on Windows Home Server 2011 with all the trimmings!

How to run VirtualBox on WHS 2011 – Part 1 of 2


One of the slight drawbacks of my migration from a Windows Server 2008 R2 file server to a Windows Home Server 2011 file server was the lack of Hyper-V in WHS 2011. I used to run a few Virtual Machines under Hyper-V for testing purposes and wanted to do the same under WHS 2011. I decided to use VirtualBox as I have had a great experience with it before on my desktop’s and laptops.

After following Part 1 and Part 2 in this series of articles you will be able to:

  • Host Virtual Machines on your Windows Home Server 2011 box
  • Manage Virtual Machines using a Web Interface
  • Login to managing your Virtual Machines using WHS user accounts
  • Remotely RDP into your Virtual Machines even if they are Linux machines
  • Shutdown machines automatically upon shutting down your WHS
  • Start machines automatically up booting up your WHS

In Part 1 we will cover:

  • Installing Virtual Box
  • Installing phpVirtualBox in IIS for web management of VirtualBox

VirtualBox Application

  • Download the latest version of VirtualBox from
  • Follow the VirtualBox installation steps accepting the defaults
  • After install has finished configure default location for Virtual Machines
  • Open the Oracle VM VirtalBox application
  • In the top navigation pane choose File | Preferences
  • In the General tab | Modify the Default Machine Folder. I would not recommend putting them in a WHS shared folder, or the C:\ drive. Just put them in a separate folder on one of your hard drives.
    Figure - Set the VirtualBox Default Machine Folder
  • Download and install the Oriacle VM VirtualBox Extension Pack from This will enable us to RDP into the virtual machines.

Run VirtualBox as a Service

  • Download the latest version of VBoxVMService
  • Open the VBoxVMService zip file you downloaded | Open the vms | Extract the contents into C:\Apps\VBoxVMService
    Figure - Extract VBoxVMService
  • Open C:\Apps\VBoxVMService\VBoxVmService.iniin notepad and update the values accordingly, removing the [Vm0] and [Vm1] sections:

    Note: It is important to have RunWebService=yes as this will be used by our web interface.

  • Open a command prompt and enter the following commands:
  • You will receive the Service VBoxVmService installed after you enter your command if it worked successfully:
    Figure - VBoxVmService successfully installed
  • As the service installation adds an environment variable, restart the Windows Home Server now

VirtualBox Web Interface

As most Windows Home Servers are headless boxes, it would be nice if we could manage our virtual machine through a web interface so we don’t need to remote desktop into the server each time we want to manage VirtualBox. phpVirtualBox will handle this for us.

  • Download the latest version of phpVirtualBox
  • Extract phpVirtualBox to C:\Apps\phpvirtualbox
  • Browse to the C:\Apps\phpvirtualbox folder | Rename config.php-example to config.php
  • Open config.phpin a notepad | Modify the configuration file with the username and password you will be running VirtualBox as (most likely Administrator)

Now that phpVirtualBox has been configured, we need to configure IIS to serve the web page. First we need to give IIS PHP support.

  • Download and install the Microsoft Web Platform Installer
  • From the Start Menu | Open Internet Information Services (IIS) Manager
  • In the left navigation pane click on Your Server Name and open Web Platform Installer in the right hand pane
    Figure - Open Web Platform Installed in IIS
  • After the Web Platform Installer loads do a search for PHP
  • In the search results click on the Add buttons next to PHP 5.3.10 and PHP Manager for IIS
  • Press the Install button down the bottom right and click I Accept
  • Now IIS supports PHP, we can finish the phpVirtualBox configuration.
  • Add the C:\Apps\phpvirtualbox as a virtual directory in IIS
    • From the Start Menu | Open Internet Information Services (IIS) Manager
    • Expand out Your Server | Expand out Sites | Right click on Default Web Site and choose Add Virtual Directory
      Figure - Add a Virtual Directory in IIS
    • Give it the alias VM and set its Physical path to C:\Apps\phpvirtualbox
      Figure - Configure the VM Virtual Directory
  • Open the web browser on the WHS server and browse to http://localhost/vm use the default username and password admin / admin
    Figure - Open phpVirtualBox
  • You are now logged in to the web interface and can start managing and creating your virtual machines!
    Figure - Manage VirtualBox from the browser
  • You can also access your virtual machine management web page from the internet using SSL thanks to the build in WHS remote web access. Just browse to from anywhere:
    Figure - Access your Virtual Machines over the internet using SSL

In the next part of this series we cover:

    • Login to managing your Virtual Machines using WHS user accounts
    • Remotely RDP into your Virtual Machines even if they are Linux machines
    • Shutdown machines automatically upon shutting down your WHS
    • Start machines automatically up booting up your WHS

Update: Part 2 of the series has now been posted here.

Update (1/4/2014): Fixed link to phpVirtualBox as it has moved to SourceForge

How to integrate Windows Phone 7 with WHS 2011


Microsoft has released a connector for Windows Phone 7 which allows you to manage your Windows Home Server 2011 from your mobile phone.

What Can It Do?

With the My Home Server application you can do a few cool things including:

  • Stream music. pictures and video to your phone
  • Receive alerts from your Windows Home Server
  • Administer accounts
  • View backup statuses of computers on your network
  • Add a home screen tile to monitor alerts and disk space

    Figure - View your WHS alerts on your Windows Phone

Install on your Windows Home Server 2011

  1. Go to and download WSS_PhoneConnector.wssx
  2. Run WSS_PhoneConnector.wssx and follow the prompts to install the add-in
  3. Open the WHS Dashboard | In the top navigation pane choose Add-ins | Ensure that the Windows Server Solutions Phone ConnecterlistedFigure - Ensure the Windows Server Phone Connecter add-in is installed

Install on your Windows Phone 7

  1. Go to the Marketplace and install My Home Server (or use this link
  2. After the application has been installed, open it and click Add An Account
  3. Enter in the address of your home server, for example:
  4. Enter in your WHS network user name and password, and the WHS server password and select Sign In
  5. If you don’t already have set, you will be recommended to setup a lock screen PIN on your phone

That’s it – you can now access your Windows Home Server 2011 from your Windows Phone!

Note: For streaming to work to your Windows Phone 7 (and other devices), you must have port 80 port forwarded to your Windows Home Server in your router, as streaming is conducted over this port.

  • Updated 22/03/2012 – Added link to My Home Server in Marketplace (thanks Ahmed) and picture of app.

How to Install Subsonic on WHS 2011


Windows Home Server 2011 makes a great server for hosting your media on. Out of the box it has cool interface for streaming your media over the web, but unfortunately it doesn’t play nicely with mobile devices like the iPhone, iPad or Android.

If you want to stream music from your WHS 2011 to an iPhone, iPad or Android, you have to go third-party.

Enter Subsonic, a free, web-based media streamer which transcodes music on the fly so it can be streamed to pretty much any device. You can find an extensive list of Subsonic mobile Apps here, but it includes apps iOS, Android, Windows Phone 7 and more.

  1. Download Subsonic from
  2. Run the installer, which will automatically install Java
  3. Follow the prompts until the install has finished
  4. You will notice the Subsonic item in your system tray, double click it and verify Subsonic is running:
    Figure - Subsonic Control Panel
  5. Switch over to the Settings tab and change the port number to something other than 80 (as the Windows Home Server Remote Access web page runs on this port), then switch back over to the Status tab and stop and start the Subsonic service
    Figure - Change your port number to something other than 80
  6. Open a browser and point it to http://localhost:port (port being the port you selected earlier
  7. On the home screen click on here to change your administrator password straight away
    Figure - Change the SubSonic default admin password
  8. Follow the prompts and change your admin password, and logout then log back in to verify it worked
  9. Once you are in click Settings in the top navigation bar
  10. Under Media Folders, update the folder path for Music and click Save. I am sharing an iTunes folder over the network to keep my iTunes library centralized, so I will be sharing my iTunes library
    Figure - Specifiy your music folder
  11. We will do a force update of our library, so head over to the Search menu and click Update search index now
    Figure - To update your library straight away, click "Update Search Index Now"
  12. Leave the index running for a while, my music library took around 15 minutes to scan
  13. Enjoy your music streaming via the web browser!
  14. Optional – if you want to stream music while you are not at home over the internet, setup a port forward in your router to the Subsonic port you configured earlier (port 4040 in my example above) and enjoy your music on the road. My internet connection uploads at 100kb/s (1Mbit), and it streamed flawlessly to my iPhone joined to a wireless network on a different internet connection.

The good thing about Subsonic is that installs itself as a service, so the next time you reboot your Windows Home Server, Subsonic will start automatically.

How to Fix Timeout While Mounting LUN in NetApp SnapDrive


When you are trying to mount a LUN (by using Connect Disk) in SnapDrive, you may get an error saying “A timeout of 120 secs elapsed while waiting for volume arrival notification from the operating system”.

Figure - SnapDrive timeout when connecting to a LUN

This generally occurs when you have created a LUN using the NetApp System Manager first, and then tried to connect to it in SnapDrive.

The reason for this error message is that when SnapDrive is connecting to a disk, it expects to see a formatted partition being connected – and when this doesn’t occur, it doesn’t know what to do and times out.

Clean up the mess

As the LUN mapping has failed half way through, you need to remove the igroups that have been added to the LUN, otherwise you will receive a “The specified LUN /vol/xxx is already mapped to at least one initiator” error.

  1. Connect to the filer using telnet
  2. Run the following command:
  3. You will get a message back saying the igroup has been unmapped from the LUN

Connect the LUN again

  1. Open SnapDrive and start connecting to your LUN again, as the process starts to occur you will see the following status messages appearing:Figure - LUN Status Message
  2. At this point, open up Computer Management and then in the left navigation pane select Disk Management
  3. You will notice a new, unformatted drive appear. If you don’t see it keep refreshing until it appearsFigure - In Disk Management you will notice the LUN disk appear
  4. You will need to be quick (you only have 120 seconds until time out remember), so initialize the diskFigure - Right click on the disk and select Initialize Disk
  5. After the disk has initialized, right click on the empty drive space and choose Format | Follow the prompts to format the disk and specify the drive letter you choose when connecting to the LUN using SnapDriveFigure - Specify a drive letter for the new LUN, matching the one in SnapDrive
  6. SnapDrive should now discover the disk and map it correctly

To prevent this occurring, create your LUN’s using the SnapDrive interface instead of NetApp System Manager, as SnapDrive will format the LUN on creation.

How to Resend Reporting Services Email Subscriptions When Troubleshooting


Troubleshooting Microsoft Reporting Services email subscriptions can be a pain. How many times have you created a new subscription a few minutes in advance and not received it, then you are unsure if you set the schedule time correctly, or if you pressed the save button, or if the fix you made to reporting services didn’t work? It’s a time consuming process, but thankfully, there is a better way.

Bad Example - Setting the report to run in a few minutes is annoying and can go wrong

Instead, you can run some SQL commands on your reporting services to trigger the running and resending of this report.

  1. Use SQL Server Management Studio and connect to the database engine of your reports server
  2. Click the New Query button
  3. Run this SQL query, which gives you a list of all the reports with schedules:
  4. From the Results pane, determine the job name of the report you want to trigger. Right click on the job name and click copy
    Running the SQL query will give you a list of jobs with subscriptions
  5. Click the New Query button again to open a blank query window
  6. Run this SQL query, replacing YourJobNameHere with your Job Nameretrieved from the last step
  7. When you execute the query, the Message window should say Job ‘YourJobNmae’ started successfully.Good Example - Using a SQL query to resend the report

If you don’t receive the report – then you know you didn’t fix the initial problem, but now at least, you have a fast way to resend the report each time you change a Reporting Services / SMTP setting.

How To Setup Hyper-V Dynamic Memory with Windows 2008 R2 SP1


I was very excited with the announcement that Windows 2008 R2 Service Pack 1 would bring memory over-commit (dynamic memory) to Hyper-V, something that has been available in VMWare for a while now. Although I wouldn’t use this feature in a production environment (read this blog post for an explanation why: Memory over commitment, not for production servers), this new technology is perfect for use in the development and testing Hyper-V environment at SSW.

The explanation on how to setup Dynamic Memory In Windows 2008 R2 is below, but before you try it out – be aware that it is currently in Beta, and there is no word if you will be able to update to Service Pack 1 RTM, or if the Hyper-V integration components that need to be installed to use the Dynamic memory features can be upgraded. For this reason I recommend you only use “disposable” VM’s.

The Setup Process

  1. Downloaded the ISO from the Microsoft TechNet Evaluation Center
  2. Back up all of the development Hyper-V images from a Windows 2008 Hyper-V Server. I simply copied the .vhd files.
    Note: In my environment, the server is an Intel Core2Quad with 8GB of DDR2 RAM
  3. (If required – in my case, the server only had Windows 2008) Reformat the server and installed Windows 2008 R2 Enterprise
  4. Install all available Windows Updates
  5. Run SSW Diagnostics to check for all green ticks (latest version of all software)
  6. Extract Service Pack 1 from the ISO file to the C:\ drive and ran setup.exe to begin the Service Pack 1 Beta installation.
    After installing you will see Service Pack 1 Beta Installed - v.178
  7. (If required) Join the server to your separate Hyper-V domain and install the Hyper-V Server role.
    Note: At SSW we have a separate Hyper-V domain which all of the Hyper-V servers are joined to. This allows all the Hyper-V servers to continue functioning and allows them to be managed in the case the primary domain was to go down.
  8. Open the Hyper-V Manager and click on New | Virtual Machine (I could have chosen to do an import / export, but I used this method as it was faster and the machines are very basic, just 1 drive and network adapter).Attach the old VHD file were backed up before the format. The Virtual Machine creation process is exactly the same with the new service pack.
  9. After the new virtual machine has been created, right click on it and click on Settings…
  10. In the settings for the Virtual Machine click on Memory
  11. This is where the changes have been made:
    In the new Hyper-V Memory Options Screen We Now Have The 2nd "Dynamic" Option! Awesome!
  12. When you choose the Dynamic option, there are several settings which you will have to understand:
    • Startup RAM
    This is the lowest amount of RAM that virtual machine needs to start up. For a Windows 7, Vista and Server 2008 this is 512mb. For Windows 2003 this is 128mb. This should be as low as possible for optimal memory utilization and potentially higher consolidation ratios.
    • Maximum RAM
    The maximum amount of memory the virtual machine is allowed to use. I recommend using the old static memory values from your VM’s for this.
    • Memory Buffer (the first slider)
    Specifies how much memory Hyper-V will attempt to assign to the machine compared to the amount of memory that is actually needed. The memory buffer will not be maintained if there is not enough physical memory available in the computer. For example if this setting was 10%: A virtual machine has a maximum memory level of 2048mb, and it is actually needs 1000mb of RAM, Hyper-V will attempt to give this VM 1100mb of RAM (1000mb + 10%).
    • Memory Priority
    Provides Hyper-V a way to determine how to distribute memory amount Virtual Machines if there is not enough physical memory available.
  13. These are the settings I used for my VM, as I want to get as many VM’s as possible on this development server:
    The Changed Memory Settings for the Development VM.  The Startup and Maxium RAM have been specified, and the buffer taken down to 5%
  14. To make use of the new dynamic memory features you need to install a new version of Integration Services. Start the VM and from the Action pane of the VM click Install Integration Services Setup Disk
  15. In the VM the CD auto run dialog should pop up. Install Integration Services then restart your VM.
  16. If you go back to the Hyper-V Manager you will notice 2 new columns that now have values in them:
    • Current Memory
    This is how much memory is currently allocated to this Virtual Machine. You will see this value change depending on how much memory the VM is using.
    • Memory Available
    The amount of memory allocated to the memory buffer, as a percentage of the committed memory in the virtual machine. This value can be negative. For example, a negative value is displayed when there is not enough available memory to give the virtual machine its buffer. A negative value also indicates that there is not enough available memory for Hyper-V to provide the virtual machine with as much memory as it currently needs. This value will not appear unless you install the new integration services

    The new Current Memory & Memory Avaliable Columns

  17. Now for the best practices.
    • Remember – only use disposable VM’s in the beta
    • Use static memory first before installing integration components. After you have installed integration components, then switch to dynamic memory. If you don’t do this, your VM’s will only be able to use their Startup Memory until the integration components have been installed, which causes huge disk paging as the VM’s have to use their page file for their memory. This makes it EXTREAMLY slow to install integration components

    Bad Example: VM's without the new integration compoents will need to page memory - leading to disk I/O problems

    Good Example: The disk queue length is much better as the VM's aren't paging. Please note the change in scale between the 2 images - unfortunately this depends on the current values being read from the disk can't be changed in Resource Monitor.

Congratulations – you have installed and configured Hyper-V Dynamic memory.

SysAdmin’s Mind – How I Setup My Home Desktop PC : Hardware


What goes on in a System Administrators mind? When they are in the office our priorities are Servers, Virtual Machines, VLANs, iSCSI Targets and all sorts of business level IT. The question is, how much of this knowledge do us System Administrator’s take home with us? How much to we apply to our own personal setups? With my “SysAdmin’s Mind” posts you will get an insight into how I do things at home – and along the way you may learn a thing or two that you can apply to your own setup.

I have just started setting up a new desktop computer for myself so in my first post will cover the hardware side of the system.

If you are interested in building your own computer system I recommend you try out one of the following resources as I will not be going into any depth on how to build computers or select hardware.

The Case

To me, a high quality case is one of the most important pieces of hardware to have. Purchasing a high quality case is an investment – it will last you years. My current case has been through 3 new systems. It has a few war scars (scratches) but I know it will last me a long time. When I purchase a case I look for the following:

tick Sturdy, high quality materials – I have seen countless times where people have purchased cheap cases which warp and bend when you pick them up. I have seen this cause fractured motherboards
tick Spots for fans – Having several places to mount fans is a must. Look for cases that support 120mm fans as these are generally quieter than 80mm fans. A fan on the top of the case blowing hot air out the top is a bonus
tick Fans in front of the hard drive bay – Fans blowing cool air onto your hard drives will make them last much longer and keep your data safe
tick Gaps between the hard drives – Having a gap between hard drives so air can get through will mean the difference between a drive that lasts a long time and one that doesn’t. NEVER sit hard drives physically on top of each other – your asking for heat problems
tick Tool-less design – Being a System Administrator I like to tinker a lot. Having thumb-screws on the side panel and screw-less hard drive and optical drive mounts save me having to rummage for a screw driver
tick Front USB Ports – who likes bending down unnecessarily?
tick Wheels (Optional) – This is a life saver if you ever take your case to LAN’s

The case I am using is a CoolerMaster Stacker 810, which is now discontinued. If I was going to purchase a new one I would probably go for a CoolerMaster Cosmos Pure.

 My CoolerMaster Stacker 810

Front case grills removed showing hard drive bay fans


Cable Mess Inside The Case

Having a good case is only half the battle. After installing the hardware inside the case its time to make it neat and tidy. This not only makes the computer more pleasant to tinker with, but it allows for maximum airflow and minimum temperatures:

tick Modular Power Supplies – A modular power supply allows you to disconnect the power cables you don’t need which reduces cluster inside the case.
Link : Modular Power Supplies on PC Case Gear (Australian Online PC Store)
tick Cable ties are your friend – Cable ties are a System Administrators best friend. They can be used to hold, tie and fasten anything!
Link : Cable Ties on Jaycar
tick Cable tidy’s – Cable ties can be used to group cables inside your case into one loom. Try and tuck the cables away inside your case and leave plenty of room around the video card, CPU and hard drives
Link : JML Cable Tidy on Amazon

The cable tidy job inside the case

 The 5mm gap between the drives allowing for airflow - also shows the cable tidys

The modular powersupply

The combination for a good quality case and a tidy inside allowing for maximum airflow and cooling will allow your components to be more stable and have a longer lifespan. This means I spend less time fixing hardware issues – no System Administrator likes coming home and having to troubleshoot their own hardware!