Tip of the Week 5 – When sfc fails, DISM prevails

In the last month or so, I have come across a number of servers where the only possible cause remaining for the “issues” is file system/OS corruption. This has been across various scenarios; Cloud hosted, on premise physical, on site virtualised etc. and each time the obvious Googleable thing to try is a sfc /scannow.

For those who do not know this command, it is an old, old, old Windows built in tool designed to scan and repair corruption within Windows itself, notable directories such as System32. File system corruption can occur for many reasons, a dodgy build of the OS to start with, Windows Update issues, potentially caused even by viruses, or remnants of. So the cool thing about running sfc /scannow (from an elevated Command Prompt), is that it is has been around since Windows 98 – incidentally my first OS on a PC that was solely mine!

So sure, I have run this many times, probably more than a hundred, but recently on more advanced operating systems such as 2012R2 and 2016, I have seen it failing a little. Usually the result of the scan states

“Windows Resource Protection found corrupt files but was unable to fix some of them

Details are included in the CBS.Log windir\Logs\CBS\CBS.Log.”

So if you see this does it mean your system is totally broken…

All is not lost

If you have seen my previous posts on DISM you will know it is great for keeping a system tidy, especially when it comes to Windows Updates and the bits they leave behind. However, did you know that DISM could also be used to repair the file system? – Well no, neither did I until this year!

There are a couple of commands very useful to try, when a sfc fails:

  • DISM /Online /Cleanup-Image /CheckHealth

    This checks for corruption without attempting repair

  • DISM /Online /Cleanup-Image /ScanHealth

    This checks for Windows Image corruption and takes significantly longer than a CheckHealth

  • DISM /Online /Cleanup-Image /RestoreHealth

    BINGO! – this one will actually attempt the repair of a corrupted filesystem, and from experience means an sfc /scannnow will also complete without errors.

Please note I am not saying this is the solution to all file system/OS corruption, what I’m saying is in the last few weeks it has saved 3 servers from being binned!

So yet again, system maintenance via the DISM tool is a winner, whether keeping it tidy or just in one piece.

Tip of the Week 4 – DISM Cleanups

In the last post I covered DISM for the purpose of changing/upgrading the version of Windows, and we found that the DISM tool has existed since 2008, however in 2012R2 they added much improved, usable functionality. Did you know DISM is also responsible for things such as Windows updates?

Under the hood DISM is the tooling being used to install and maintain those wonderful Windows Updates you get every month on Patch Tuesday (is that still a thing?) Which also means we can use the toolset to also tidy up afterwards. Remember Disk Clean up (cleanmgr)? Well it’s a nicer CLI version of the Updates clean-up in there.

There are 3 levels of update clean up via DISM

  • Component Clean up – this cleans up updated components i.e. removing the packages used to install the updates
  • Reset Base – same as above, but means all deletes all superseded versions of every component in the component store, meaning you won’t be able to uninstall service packs/updates applied before this point in time
  • SPSuperseded – removes all backup components needed to uninstall the service pack, also you cannot remove the service pack anymore after using this command.

In short doing 2 and 3 will free up more space but makes rolling back very difficult, option 1 is a nice way to keep the system tidy:

Example on Windows Server 2012R2

  • Disk is at 37.1GB free after being fully updated and having key applications installed

  • Component cleanup is run and takes quite a while… (I had to go out and check 3 hours later, suspect it took ~1 hour)

  • Following the cleanup run we can see around 7GB has been freed up on the system

From this quick demonstration above it’s clear to see that significant disk space is used up by irrelevant, outdated files. The only reason to keep these is if you want to remove an update and reapply later, but surely not all 7GB worth…

I’ve started using the dism cleanup commands during my build process, so that before I start using a server in anger, I get it to as clean a state as possible, fully updated but tidy!

The full commands for DISM cleanup are:

  • dism /online /Cleanup-Image /StartComponentCleanup
  • dism /online /Cleanup-Image /StartComponentCleanup /ResetBase
  • dism /online /Cleanup-Image /SPSuperseded

Tip of the Week 3 – Converting Server Eval to full version

NOTE: You will require a valid Windows Server product key for this to work, this is in no way intended as a workaround to legitimate licensing.

Sometimes when just messing around with an idea or trying to prove a concept out you may find yourself quickly downloading an ISO from Microsoft for whatever OS version you’re testing on. Perhaps you haven’t got access to your usual ISO library or forgot credentials for your Volume Licensing portal etc.

The only issue with the TechNet downloads is that they are Evaluation editions, this means that within a certain number of days (usually 60 or 180 depending on version) you will not be licensed, activated or legit… slight problem here is that within 180 days you’ve probably built your best dev/test platform in years and don’t want to lose it, in fact you want to move it to your production servers, keeping it and maintaining it for eternity. Do you build a new VM with the proper ISO and Product key?

The answer is no, just upgrade your edition.

A while ago now, Microsoft introduced DISM (Deployment Image Servicing and Management tool) – a handy suite of command line tools for managing such situations. So how do I convert from evaluation to Server Standard or Datacenter editions, and what versions of Windows Server does this work with?

  1. Open Command Prompt as Administrator
  2. Open PowerShell as Administrator – it’s the 21st Century
  3. Run the following command:

    dism /Online /Get-CurrentEdition

  4. The image above shows I’m running Version 10 (Server 2016) and I’m on a Server Standard license, therefore not Eval. However if you were on an Evaluation license it would say ServerStandardEval
  5. In order to upgrade the license to a full version, or to go from Server Standard to Datacenter edition you can run the following:

    DISM /online /Set-Edition:<edition ID> /ProductKey:XXXXX-XXXXX-XXXXX-XXXXX-XXXXX /AcceptEula

    The <edition ID> will be either ServerStandard or ServerDatacenter

  6. The ProductKey is the bit unique to you/ your company, however, if you use KMS keys you can obtain these from the following page: https://docs.microsoft.com/en-us/windows-server/get-started/kmsclientkeys – I won’t go into the KMS vs. MAK conversation here but feel free to Google it to work out which you have/need.
  7. Here’s an example I ran using a KMS key:

    Note it removes the “package” of the one installed and replaces it with the one you’re putting in, A reboot will also be necessary.

For more info regarding DISM go here: https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/what-is-dism

DISM has been around since Windows 7/ Server 2008 but it’s been most useful since 2012R2 onwards, I will be posting some additional DISM tips in the next post!