Hyper-V Server 2012 R2에서 windows.old를 올바르게 제거하십시오


22

Hyper-V Server 2012가 설치된 서버에 Hyper-V Server 2012 R2를 설치했습니다.이 작업을 수행하면 표준 Windows.old폴더가 만들어졌습니다. 이제 해당 폴더를 안전하게 제거하고 싶습니다. 전체 GUI로이를 수행하는 표준 방법은 디스크 정리를 사용하는 것이지만 물론 Hyper-V 서버에는 해당 옵션이 없습니다.

이 시나리오에서 해당 폴더를 제거하는 공식적인 방법이 있습니까? 이것이 Server Core라면 Desktop Experience를 포함한 전체 GUI를 설치할 수 있지만 폴더를 깨끗하게 제거하는 것만으로도 의미가 없습니다.

묻는 것의 주된 이유는 단지 rmdir /s그와 같은 것과는 달리 Windows.old폴더에 많은 정션이 있기 때문에 프로덕션 OS 사본에서 아무것도하지 않기를 원합니다.


명령 줄에서 cleanmgr.exe를 실행할 수 있다고 읽었습니다. 이것이 서버 코어 또는 2012에 적용되는지 확실하지 않습니까 ???
john

답변:


23

먼저 cleanmgr.exe (디스크 정리 도구)를 복사하여 실행하려고했지만 Core / Hyper-V Server에없는 DLL에 너무 많은 종속성이 있습니다.

대신 디렉토리를 수동으로 삭제했습니다.

먼저 모든 접합점과 심볼릭 링크를 제거했습니다. 이를 위해 SysInternals의 junction.exe 를 사용했습니다 . exe를 경로의 디렉토리에 복사하십시오. 모든 정션 목록을 얻기 위해 실행했습니다.

c:\tools\junction.exe -s -q C:\windows.old > %temp%\junc.txt

PowerShell을 열었습니다.

start powershell.exe

다음 스크립트를 실행하여 관련 줄을 찾아 junction.exe를 다시 실행하십시오.

 foreach ($line in [System.IO.File]::ReadLines("$env:temp\junc.txt"))
 {
     if ($line -match "^\\\\")
     {
         $file = $line -replace "(: JUNCTION)|(: SYMBOLIC LINK)",""
         & c:\tools\junction.exe -d "$file"
     }
 }

이로 인해 시스템의 모든 연결 지점과 단일 심볼릭 링크가 제거되었습니다.

cmd.exe로 돌아가서 권한을 지우고 모든 파일을 삭제하는 세 가지 명령을 실행했습니다.

 takeown /F C:\windows.old /R /D Y
 cacls C:\windows.old /T /G Everyone:F
 rd /s /q C:\windows.old

테스트에서 새 Hyper-V 서버 2012를 설치 한 다음 2012 R2로 업그레이드하면 Windows.old가 사라지고 모든 기존 정션 대상이 그대로 유지되면서 시스템이 제대로 실행됩니다.


junc.Txt의 내용은 무엇입니까? 그것을 pastebin에 게시 할 수 있습니까? 관심있는 것이 연결되어 있는지 궁금합니다.
longneck

pastebin.com/pYBGR4ap 는 junc.txt의 모든 관련 라인을 가지고 있습니다
Peter Hahndorf

감사합니다! 나는 또한 takeown존재한다는 것을 알고있다. 나는 그것이 내가 몰랐다는 것을 인정하는 것이 약간 당혹 스럽다.
MikeBaz-MSFT 2009 년

1
폴더를 삭제하기 전에 연결 지점을 수동으로 제거해야하는 이유는 무엇입니까? 연결 지점은 파일 시스템에 저장되므로 폴더와 함께 반드시 삭제됩니까?
Ashley

3
@AshleySteel-정션을 유지할 때 takeown과 같은 명령이 실패하기 때문입니다. 오류는 다음과 같습니다. 정보 : 시스템이 지정된 경로를 찾을 수 없습니다. ( "C : \ windows.old \ Documents and Settings \ All Users \ Application Data \ Application Data \ Application Data \ Application Data \ Application Data \ Application Data \ Application Data \ Application Data \ Application Data \ Application Data \ Microsoft \ Windows \" SystemData \ S-1-5-18 \ ReadOnly ") 오류 : 파일 이름, 디렉토리 이름 또는 볼륨 레이블 구문이 올바르지 않습니다. -이것은 재귀 문제처럼 보이고 파일 경로가 너무 길어지면 중단됩니다.
피터 한 도르프

4

Peter H의 대답을 사용하고 작동한다는 것을 확인했지만 여러 서버 에서이 작업을 수행해야하므로 로컬 또는 다른 컴퓨터에서 PS 원격을 통해 실행할 수있는 powershell 스크립트로 코드를 수정했습니다. 이것은 .ps1 파일입니다.

# Script to remove windows.old after an upgrade

# Assumes path to sysinternals is in the PATH env variable


$ErrorActionPreference = "Inquire"

junction.exe -accepteula -s -q C:\windows.old | out-file $env:temp\juncts.txt -force

foreach ($line in [System.IO.File]::ReadLines("$env:temp\juncts.txt"))
 {
     if ($line -match "^\\\\")
     {
         $file = $line -replace "(: JUNCTION)|(: SYMBOLIC LINK)",""
         & junction.exe -d "$file"
     }
 }

 takeown /F C:\windows.old /R /D Y
 echo y | cacls C:\windows.old /T /G Everyone:F

 rm C:\windows.old -recurse -force
 rm "$env:temp\juncts.txt" -force

그러나 이것은 치료를합니다. powershell.exe 권한을 높이는 것을 잊지 마십시오 ( "Run As Administrator")
Nexus

라인 : 에코 y | cacls C : \ windows.old / T / G Everyone : F 다음과 같아야합니다 : echo y | cacls C : \ windows.old / T / G Everyone : F <kbd> y </ kbd>와 <kbd> | </ kbd> 사이에 공백이 없습니다
user437960
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.