업데이트가 내려받기 단계에서 실패하고 "일부 업데이트 파일이 없거나 문제가 있습니다" 와 함께 오류 코드가 표시된다. 0x8007000d(데이터가 잘못되었습니다), 0x80070002(파일을 찾을 수 없습니다), 0x800f081f(원본 파일을 찾을 수 없음)가 대표적이다.
세 코드 모두 내려받은 업데이트 캐시가 깨졌거나 구성 요소 저장소(component store)가 손상된 경우를 가리킨다. 복구 순서는 같다.
관리자 권한 명령 프롬프트에서 서비스를 멈추고 캐시 폴더를 비운 뒤 다시 올린다. 폴더는 다음 업데이트 때 자동으로 다시 만들어진다.
net stop wuauserv
net stop bits
net stop cryptsvc
net stop msiserver
ren %windir%\SoftwareDistribution SoftwareDistribution.old
ren %windir%\System32\catroot2 catroot2.old
net start wuauserv
net start bits
net start cryptsvc
net start msiserver
폴더 이름을 바꾸는 방식이 지우는 것보다 안전하다. 문제가 생기면 되돌릴 수 있다.
캐시를 지워도 같은 코드가 반복되면 시스템 파일 자체가 손상된 것이다. DISM 으로 구성 요소 저장소를 고친 뒤 SFC 를 돌린다. 순서를 바꾸면 SFC 가 복구 원본을 찾지 못한다.
DISM /Online /Cleanup-Image /ScanHealth
DISM /Online /Cleanup-Image /RestoreHealth
sfc /scannow
RestoreHealth 가 0x800f081f 로 실패하면 인터넷에서 원본을 받지 못한 것이다. 같은 빌드의 ISO 를 마운트해 원본을 지정한다.
DISM /Online /Cleanup-Image /RestoreHealth /Source:WIM:D:\sources\install.wim:1 /LimitAccess
문제 해결사를 한 번 돌려 본다. 설정 → 시스템 → 문제 해결 → 기타 문제 해결사 → Windows 업데이트 순서다.
특정 누적 업데이트 하나만 계속 실패한다면 Microsoft 업데이트 카탈로그에서 해당 KB 의 .msu 를 직접 받아 설치하는 편이 빠르다. 실패 원인은 %windir%\Logs\CBS\CBS.log 와 다음 명령으로 만든 로그에서 확인한다.
Get-WindowsUpdateLog
디스크 여유 공간도 확인한다. 기능 업데이트는 임시 공간을 크게 요구하므로 시스템 드라이브에 최소 20GB 이상을 비워 둔다.