Windows Server 2012 R2 update stuck after restart at 9%
Try to access cmd from troubleshooting or SafeMode console, then run the following command:
dism.exe /image:C:\ /cleanup-image /revertpendingactions
The below text is copied from https://www.craythorne.co.za/server-2012-stuck-at-updating-your-system-8/:
The Scenario:
One of my Windows Server 2012 R2 Standard servers installed a large number of updates +200 all at once (so unfortunately I’ve no idea which one caused this problem).
The Problem:
After the reboot the server was stuck on the start-up splash screen stating “Updating your system 8%”. I tried the following
- Waiting several hours
- Rebooting
- Rebooting in Safe Mode (press F8 immediately as the server boots to access this boot option)
- Rebooting using Last Known Good Configuration (press F8 immediately as the server boots to access this boot option)
None of the above worked.
The Solution:
- Reboot the server, press F8 to access advanced boot options
- Select the Option "Repair Your Computer"
- In the Options screen select Troubleshoot > Command Prompt
- The server boots into a limited command prompt at the X drive.
- Get a list of all the available drives, type “wmic logicaldisk get name“. This is important as whilst in the repair environment the drive mappings often get changed around i.e. I was panicking when I changed to the C drive only to find it was empty. In fact the system drive was mapped to the E drive. There’s no obvious way to tell, you just have to change to each drive mapping a run a Dir command. (To know for sure, you can cd to every drive listed above and check if that has Windows related directory. )
- Navigate to the \Windows\Winsxs folder. Once here you need to find all the files called pending.xml* and rename them all by adding .OLD to the end of the file name. (In my server I had two pending.xml and pending.xml.random_number – I added .OLD to the end of both of these). The reason for this is it’s in one of these there is a corruption that’s the cause of the problem. ren pending.xml pending.xml.old
- If you have a lot of files with the name and a sequence of numbers, you can use the following from the commandline: for /r %i in (pending.xml*) do move %i %i.old
- Create a new blank pending.xml file in the \Windows\Winsxs folder; echo > pending.xml
- Next up is to run a DISM command to remove/revert all pending actions from the image, in our case these updates attempting to install. However before doing so you must create a scratch folder for the temporary files to be stored in. If you don’t complete this step you will get a 3017 error, which complains the default temporary location for the scratch folder is too small. Create the scratch folder in the \Windows directory; mkdir \windows\scratch
- Run the following command (NB my system drive was mapped to the E drive); DISM /Image:E:\ /Cleanup-Image /RevertPendingActions /scratchdir:E:\Windows\Scratch
- Once complete rename the \windows\SoftwareDistribution to SoftwareDistributionOLD; ren E:\windows\SoftwareDistribution SoftwareDistributionOLD
- Finally, run sfc /scannow – the System File Checker tool to repair missing or corrupted system files
- Reboot the server. The start-up splash screen should show spinning dots for a minute or two then boot normally. In my instance it then reported updates couldn’t be installed and so reverted those that had been installed. It then forced another reboot.
- At this stage the server is ready to have updates installed, but this time only do a few at a time to locate the faulty update.
F8 command prompt
and then
wmic logicaldisk get name
and then
dism.exe /image:C:\ /cleanup-image /revertpendingactions
worked for me. In my case the image in question was "D:
".
It worked for me too. My server was hanging after restart at 7%. F8 command prompt and then wmic logicaldisk get name and then dism.exe /image:D:\ /cleanup-image /revertpendingactions as in my case the image in question was "D:".