When you upgrade your Windows operating system and if upgrade is failed at some point, you’ll be provided an error code. This error code basically gives you the hint to resolve upgrade error. Although, an error message is usually accompanied with an error code but if it is not, then you can use this guide to identify where the upgrade failed and the cause for it.
To understand this guide, let us consider a scenario. An user performed upgrade to Windows 10 but the upgrade failed and he received following error:
0x8007001F – 0x2000D, The installation failed in the SAFE_OS phase with an error during MIGRATE_DATA operation
From above message, you might want to know following things:
1. What is SAFE_OS phase?
2. What does MIGRATE_DATA means here?
3. What is the actual root cause for this error and how you can fix it?
To answer above questions, you should have a quick understanding about upgrade phases and installation blocks and this information is provided below.
Understanding Windows Upgrade Error Codes
About Upgrade Phases
When an upgrade is performed, it is divided into following four phases:
1. Downlevel phase: In this phase, usually upgrade errors are not seen because at this stage upgrade is not started. Here, only thing ensured is that current OS and upgrade source remains accessible. You’ll see ‘Installing Windows’ for this phase on UI.
2. Safe OS phase: Most of upgrade errors are seen in this phase. Under this phase, a recovery partition will be configured plus a rollback would be established which may help you to downgrade to previous OS if required. Required services and devices will be started. As far as UI is concerned, you’ll see Working on updates during this phase. If this phase is involved in upgrade error, you may see 0x2000C, 0x2000D with error code.
3. First boot phase: This can be considered as the first boot of upgraded OS because initial settings are configured now. Upgrade error containing 0x3000C, 0x3000D shows upgrade blocked in this phase.
4. Second boot phase (OOBE boot phase): Upgrade settings are concluded here and at the end of this phase, you’ll spot the familiar account setup animation. If you got upgrade code that includes 0x4000C, 0x4000D, your upgrade would have been blocked in this phase.
Your system will be restarted during change of phase.
Identification Of Error Codes
So back to scenario considered above, the error code we got was 0x8007001F – 0x4000D. The first part here, i.e. 0x8007001F is referred as result code. While the second part is 0x4000D, and it will be called extend code. You have to summarize interpretation of these codes to identify root cause for an upgrade failure.
Finding Out Result Code
Let us take the result code first. A result code could be Win32 code or NTSTATUS code. Win32 code usually starts with 8, for example 0x8007001F. While NTSTATUS code starts with C, for example 0xC1900102. Now examine last four digits of result code to identify what it means. For example, taking 0x8007001F, last four digits are 001F. Similarly for 0xC1900102, last four digits are 0102.
Okay so we now have information about result code. If you got Win32 code, refer to this documentation for its interpretation. Following that, for error code 0x8007001F, the interpretation of 0x0000001F has to be taken and it is A device attached to the system is not functioning. This means for error code 0x8007001F, an external device connected to the system during upgrade is blocking the upgrade. Removing the device will help you to resolve the error.
Similarly, if you got NTSTATUS code, then you need to refer this documentation. For example, taking error code 0xC1900102, we will take reference corresponding to 0x00000102 and it means STATUS_TIMEOUT.
Finding Out Extend Code
For our previously considered scenario, the extend code was 0x4000D, so it clearly shows that upgrade failed during second boot phase. Additionally, first digit of extend code which is 4 here, is called as phase. While last two digits which is 0D here, referred as operation. So the extend code will tell us in what phase upgrade error occurred and during what operation. To find interpretation of phase and operation, see respective values in this documentation. For 0x4000D, the first digit 4 corresponds to SP_EXECUTION_OOBE_BOOT. And last two digit 0D corresponds to SP_EXECUTION_OP_MIGRATE_DATA.
Based upon above information, the statement i.e. The installation failed in the SAFE_OS phase with an error during MIGRATE_DATA operation mentioned with error code 0x8007001F – 0x2000D is completely justified.
Hope you find this article useful!