본문 바로가기
컴퓨터/Windows

이동할 수 없는 파일이 있는 지점을 벗어나 볼륨을 축소할 수 없습니다.

by Spring13 2024. 3. 1.

"이동할 수 없는 파일이 있는 지점을 벗어나 볼륨을 축소할 수 없습니다."

 

극단적인 예시

자주 보이는 메시지이다.


왜 발생하는가?


간단하게 설명하자면 말 그대로이다.

볼륨을 축소하여야 하는데, 그 지점에 파일이 위치하기 때문이다.

 

이미지는 Windows 98 SE의 디스크 조각 모음

위 이미지와 같이, 운영체제는 드라이브를 수많은 섹터가 1차원적으로 배치되어 있다고 가정한다. 이는 SSD이든 HDD이든, 그 외 매체이든 동일하다.

 

허접한 실력으로 만들었습니다.

그리고 운영체제는 이렇게 배열된 섹터를 일정한 크기로 묶어 클러스터를 형성하고, 이를 다시금 묶어 파티션을 형성한다.

 

그리고 파티션 위에 1:1로 논리적 단위인 볼륨을 형성한다.

 

 

볼륨 및 파티션의 크기를 조절할 때는 위 이미지와 같이 조절이 이루어진다.

 

그런데, 위 이미지와 같이 볼륨이 축소해야 하는 영역에 파일이 위치하면 해당 파일에 의해 볼륨 축소가 불가능하게 된다.


해결 방법


이 글에서는 총 3가지의 방법을 안내할 것이다. 이 3가지의 방법 중 필자는 마지막 3번째 방법인 DISM을 이용하는 방법을 가장 추천한다.


1. 디스크 조각 모음


뭔가 이상하게 들리지만 디스크 조각 모음이 도움이 될 수 있다.

위 이미지처럼 파일이 존재한다고 가정하자.

이때 주황색 파일을 제거한다.

이 상태에서 초록색 파일을 쓰면

초록색 파일은 파편화가 발생한다.

 

이러한 과정이 반복되면서 파일의 파편화가 심해지는 것이다.

이러한 상황에서 디스크 조각 모음을 진행하면 파편화된 파일이 한데 모이게 되므로, 문제가 해결될 수 있는 것이다.

 

그러나 이 방법을 추천하지는 않는다.

디스크 조각 모음의 작동 방식 때문이다.

이전에는 사실상 디스크를 다시 쓰는 수준으로, 앞에서부터 파일들을 다시 썼지만, 오늘날에는 그 정도로 파일을 다시 쓰지는 않고, 성능 저하가 없을 정도로만 파일의 파편화를 제거하는 수준이다.

이 때문에 파일의 파편화 자체는 해결되지만, 우리가 해결하고자 하는 볼륨 축소에는 도움이 되지 않을 수 있다.

더군다나 SSD와 같은 플래시 메모리 기반 운영체제의 경우, 별 도움도 안 되면서 드라이브 수명만 소모하는 결과를 낳을 수 있다.

이 때문에 이 방법보다는 아래의 DISM을 이용하는 방법을 추천한다.


그래도 이 방법은 아래와 같이 시스템 파일을 건드리거나 볼륨 포맷과 같은 복잡한 방법을 수행하지는 않으므로, 아래의 절차를 수행할 자신이 없는 사람들은 이 방법을 써 볼 수 있을 것이다.

 

디스크 조각 모음을 수행하는 방법은 다음과 같다.

드라이브 조각 모음 및 최적화를 관리자 권한으로 열어 조각 모음을 수행하거나,

 

관리자 권한으로 명령 프롬프트를 열어 아래의 예문을 참고하여 명령을 입력한다.

SSD를 조각 모음하려면 무조건 명령 프롬프트를 이용하여야 한다.

defrag "드라이브 문자"
defrag /d "드라이브 문자"

예를 들어, C 드라이브를 조각 모음하고 싶다면 아래와 같이 입력한다.

defrag C:
defrag /D C:

Defrag.exe는 디스크 조각 모음 모듈로, 디스크 조각 모음, SSD TRIM 등을 수행한다.

이후 기다리면 된다.


2. 시스템 파일 제거


이 문제와 관련하여 검색을 해 보면 수많은 글들이, 시스템 복원 파일, 페이징 파일 등 시스템 파일을 해당 원인으로 지목하고 있다는 것을 알 수 있다.

실제로 해당 파일들은 볼륨 크기 조절을 방해하는 요소 중 하나이며, 이 때문에 이들을 제거하는 것으로 문제를 해결할 수도 있다.

그러나 이 방법 역시 근본적인 해결책은 되지 못하는데, 일반적인 파일이 볼륨 뒤쪽에 존재하는 경우가 있기 때문이다.

거기에다가 시스템 설정을 조작하므로, 그 과정에서 문제가 발생할 수 있다. 이 때문에 아래 접은 글에 해당 방법을 기술하였다.


더보기

시스템 복원 파일 제거


먼저 시스템 복원 파일을 제거하는 방법이다.

'검색 창'을 이용하거나,

 

'설정 앱'을 이용하여 '시스템 속성 창'을 연다.

 

 이후 [구성] 단추를 눌러 복원 구성 창을 열고 [삭제] 단추를 눌러 복원 지점을 삭제한다.


가상 메모리 및 페이징 파일 제거


가상 메모리 및 페이징 파일을 제거하는 방법은 다음과 같다.

'설정 > 시스템 > 정보'에서 [고급 시스템 설정]을 누른다.

 

'시스템 속성' 창의 '고급' 탭에서 '성능' 항목의 [설정] 단추를 눌러 성능 옵션 창을 연다.

 

열린 창에서 [고급] 탭으로 진입한다.

 

'가상 메모리' 항목에서 [변경] 단추를 누른다.

 

 새로 창이 열리면, [모든 드라이브에 대한 페이징 파일 크기 자동 관리]를 해제하고, [페이징 파일 없음]을 누른 뒤, [확인]을 누른다.

 

이후 재부팅하여 파티션 작업을 수행한다.


경우에 따라 페이징 파일 문제가 생겼다면서 임시 페이징 파일을 만들었다는 메시지가 뜨는 경우가 있는데, 일단 볼륨 축소를 시도해 보고 안되면 설정을 원래대로 복원한 다음 아래의 DISM을 이용하는 방법을 시도한다.


3. DISM을 이용하여 이미지 백업 후 포맷, 이후 백업한 이미지 적용


가장 확실한 방법 중 하나이다. 모든 파일을 백업한 후, 볼륨을 포맷하면 해당 볼륨에는 어떠한 파일도 남아있지 않은 상태가 된다. 볼륨에 파일이 없으니 당연히 볼륨의 크기를 조절하는 데에 어떠한 문제도 없다.

이 상태에서 백업한 이미지를 볼륨에 적용하면 가장 앞의 섹터에서부터 파일들을 다시 쓰기 때문에, 결과적으로 볼륨의 크기는 줄어들면서, 해당 볼륨의 파일들은 그대로 남아있게 되는 결과를 얻을 수 있다.

추가적으로 DISM은 애초에 이러한, 즉 이미지를 만들고 이를 적용하기 위한 도구이므로 문제가 생길 여지도 적다.


가장 확실한 Windows RE로 진입하여 명령 프롬프트를 열고, 이곳에서 작업을 진행하는 것이다.

그러나 경우에 따라 안전 모드나,  Windows 일반 모드로 진입하여 작업을 수행해야 하는 경우도 있다.

 

C 드라이브의 이미지를 생성하려면 무조건 Windows RE에서 작업을 수행해야 한다. 온라인 상태의 Windows가 DISM의 C 드라이브 접근을 거부해, 이미지를 캡처할 수 없기 때문이다.

D 드라이브와 같은 보조 드라이브의 경우, RE나 안전 모드로 진입하여 작업을 수행하는 것이 좋다.

Windows의 일반 모에서 작업을 수행해도 큰 문제는 없으나, 다른 프로그램의 방해가 있을 수 있다.

 

여담으로, Windows RE에서 작업하는 경우에는 "notepad"를 입력하여 메모장을 연 후 작업하면 보다 쉽게 작업할 수 있다.

메모장을 연 후, '파일 > 열기'를 눌러 열기 창을 눌러 작업하면 보다 편하게 작업할 수 있다.

 

 

아래의 설명에서는 C 드라이브의 파티션을 축소하여 공간을 확보하고, 확보한 공간을 C 드라이브 바로 뒤에 위치한 D 드라이브에 추가해 줄 것이다.


이미지 백업


아래의 예문을 참고하여 명령줄을 입력한다.

DISM /capture-image /capturedir:"캡쳐할 드라이브의 문자" /imagefile:"이미지 파일을 저장할 경로" /name:"내부적으로 사용할 이미지 이름"

 

예를 들어, C 드라이브의 이미지를 "E:\drive_c.wim"이라는 파일로 저장하고, 이미지의 이름을 C_backup으로 하고 싶다면,

DISM /capture-image /capturedir:c: /imagefile:E:\drive_c.wim /name:C_backup
DISM /capture-image /capturedir:c: /imagefile:"E:\drive_c.wim" /name:"C_backup"

처럼 입력하면 된다.

 

C 드라이브와 D 드라이브의 파일들을 모두 이미지로 백업하였으면 다음 단계로 넘어간다.

 

이 과정에서 액세스가 거부되었다면서 오류가 발생하는 경우가 있는데, 대부분 파일 권한과 관련된 내용이다.

이런 경우 Windows의 일반 모드나 안전 모드로 재진입하여 권한 문제를 해결해 주거나, 일반 모드나 안전 모드에서 이미지 생성을 진행하면 된다.

 

안전 모드

1. 개요 안전 모드란 일반 모드, 즉 일반적인 동작 시 문제가 발생하였을 때, 문제에 대한 원인과 그 해결 방안을 찾기 위하여 만들어진 모드이다. 이를 통해 일반 모드에서 할 수 없는 동작(접근

sprout13.tistory.com


파티션 포맷 & 크기 변경


파티션 크기 변경은 안전 모드에서 수행할 수 없다.

파티션 크기 변경에 필요한 서비스가 실행되고 있지 않기 때문이다.

이 때문에, RE에서 DISKPART를 이용하거나, 일반 모드의 Windows에서 파티션 크기 변경을 시도해야 한다.

이때, Windows가 설치된 파티션의 크기를 조정하는 경우 얄짤없이 Windows RE를 이용해야 한다.


DISKPART를 입력하여, DISKPART를 실행한다.

 

먼저 크기를 조절할 파티션이 위치하는 디스크를 선택한다.

"List Disk"를 입력하면 디스크의 목록이 뜨므로, 이것의 도움을 받을 수 있다.

 

"List Partition"을 입력하여 파티션 번호를 확인하고, "Select Partition"을 입력하여 원하는 파티션을 선택한다.

 

여기서는 먼저 Windows 파티션(C 드라이브)을 선택한다. 대부분 3번 파티션이 Windows가 설치된 파티션일 것이다.

 

원하는 파티션을 선택하였으면 파티션을 포맷한다.

DISKPART의 FORMAT 명령을 이용한다.

더보기
DISKPART> HELP FORMAT

    Windows에서 사용할 지정된 볼륨을 포맷합니다.

구문:  FORMAT [[FS=<FS>] [REVISION=<X.XX>] | RECOMMENDED] [LABEL=<"label">]
                [UNIT=<N>] [QUICK] [COMPRESS] [OVERRIDE] [DUPLICATE] [NOWAIT]
                [NOERR]

    FS=<FS>     파일 시스템의 유형을 지정합니다. 파일 시스템을 지정 하지 않으면
                FILESYSTEMS 명령으로 표시 기본 파일 시스템은
                표시됩니다.

    REVISION=<X.XX>

                파일 시스템 수정 버전을 지정합니다 (해당 하는 경우).

    RECOMMENDED 지정할 경우 권장 사항이 있다면 기본값 대신 권장 파일 시스템 및 수정 버전 사용
                하십시오. 권장 파일 시스템이(있을 경우)
                FILESYSTEMS 명령에 의해 표시됩니다.

    LABEL=<"label">

                볼륨 레이블을 지정 합니다.

    UNIT=<N>    기본 할당 단위 크기를 재정의합니다. 기본 설정
                을 일반용으로 하십시오. 기본값은
                특정 파일 시스템에 대한 할당 단위 크기가
                FILESYSTEMS 명령으로 표시됩니다.

                NTFS 압축은
                4096 이상의 할당 단위 크기를 지원하지 않습니다.

    QUICK       빠른 포맷을 수행 합니다.

    COMPRESS    NTFS로만 압축: 새 볼륨에서 만들어지는 파일은
                기본으로 압축됩니다.

    OVERRIDE    필요한 경우 파일 시스템을 먼저 분리합니다. 항상
                볼륨에 대해 열린 핸들은 더 이상 유효하지 않습니다.

    DUPLICATE   UDF만:이 플래그는 UDF 포맷, 버전 2.5 또는
                그 이상. 이 플래그는 파일 시스템 메타
                데이터를 디스크의 두 번째 섹터 집합에 복제하는 포맷 작업을 지시합니다. 응용
                프로그램 예를 들어 복구 또는 복구 응용
                프로그램에서 중복된 메타 데이터가 사용됩니다. 기본 메타 데이터 섹터가
                손상된 경우, 중복 섹터에서 파일 시스템 메타 데이터를 읽습니다.

    NOWAIT      포맷
                프로세스가 진행 중인 동안 명령을 즉시 반환합니다. NOWAIT을 지정 하지 않으면
                DiskPart에서 포맷 진행률을 백분율 단위로 표시합니다.

    NOERR       스크립팅 전용입니다. 오류가 발생하면 DiskPart
                은 오류가 발생하지 않은 것처럼 명령을 계속 처리합니다.
                NOERR 매개 변수가 없는 경우 오류로 인해 DiskPart가 오류 코드를 사용하여.
                을 종료하게 됩니다.

이 작업이 성공하려면 볼륨을 선택 해야 합니다.

예:

    FORMAT FS=NTFS LABEL="New Volume" QUICK COMPRESS
    FORMAT RECOMMENDED OVERRIDE

아래의 예문을 참고하여 명령을 입력한다.

FORMAT FS=NTFS QUICK

이 예문은 선택한 파티션에 위치한 볼륨을 NTFS 파일 시스템으로 빠른 포맷 한다.

 

볼륨을 포맷하였으면 파티션의 크기를 축소할 차례이다.

DISKPART의 Shrink 명령을 이용한다.

DISKPART> help shrink

    포커스가 있는 볼륨의 크기를 지정된 양만큼 줄입니다. 볼륨 끝에 있는 사용되지 않은 공간에서
    사용 가능한 디스크 공간을 만듭니다.

구문:  SHRINK [DESIRED=<N>] [MINIMUM=<N>] [NOWAIT] [NOERR]
        SHRINK QUERYMAX [NOERR]

    DESIRED=<N> 원하는 공간 크기를 MB로 지정하여 볼륨의 크기를 줄입니다. 원하는
                양이 지정되지 않은 경우 볼륨에서 사용 가능한 최대 공간인 만큼
                줄어듭니다.

    MINIMUM=<N> 볼륨의 크기를 줄일 최소 공간(MB)을
                지정합니다.

    QUERYMAX    볼륨을 축소할 수 있는 최대 바이트 수를 반환합니다.
                (볼륨에서 사용 가능한 여유 공간) 응용 프로그램이 현재 이
                볼륨에 액세스 하는 경우 값이 변경 될 수 있습니다.

    NOWAIT      축소 프로세스가 진행 중인 동안 명령을 즉시 반환합니다.

    NOERR       스크립팅 전용입니다.오류가 발생하면 DiskPart 는 오류가
                발생하지 않은 것처럼 계속 명령을 처리합니다. NOERR 매개 변수가
                없는 경우 오류로 인해 DiskPart가 오류 코드를 사용하여
                종료됩니다.

    MINIMUM 양을 지정하지 않으면 볼륨이 DESIRED 양(지정된 경우) 또는 볼륨에서 사용 가능한 최대 공간
    으로 줄어듭니다. MINIMUM이 지정되었지만 사용 가능한 공간이 충분하지 않은 경우 이 명령은 실패합니다.

    이 명령은 기본 볼륨과 단순 또는 동적 스팬 볼륨에 대해 작동 합니다.
    NTFS 파일 시스템을 사용하여 포맷된 볼륨이나 파일 시스템이 없는 경우에만 볼륨의 크기를 줄일 수 있습니다.

    이작업이 성공하려면 볼륨을 선택해야 합니다.

    이 명령은 OEM, ESP 또는 복구 파티션에서는 작동하지 않습니다.

예:

    SHRINK DESIRED=500 MINIMUM=250
    SHRINK QUERYMAX

 

아래의 예문을 참고하여 명령을 입력한다.

SHRINK MINIMUM=축소할 저장 공간의 크기(MB 단위)

 

예를 들어 최소 16GB의 공간을 축소하고 싶다면 다음과 같이 입력한다.

SHRINK MINIMUM=16384

 

Windows에서 16GB=16384MB이므로 이와 같이 입력한다.


공간을 확보하였으니 확보한 공간을 D 드라이브에 추가해 줄 차례이다.

아쉽게도, 파티션 구조 상, 어떠한 파티션 앞의 빈 공간을 그 뒤의 파티션에 추가해 줄 수 있는 방법은 매우 드물다.

서드파티 프로그램이면 가능할 수도 있지만, 이마저도 저장된 정보의 손실이 발생할 수 있는 위험이 있다.

 

따라서 가장 안전한 방법인, 뒤의 파티션을 삭제하고, 새로 파티션을 만드는 방법이 가장 적절하다.


D 드라이브의 파티션을 선택한다.

"Delete Partition Override"를 입력한다.

Delete Partition Override

 

그러면 해당 파티션이 삭제된다.

 

파티션을 삭제하였으면 다시 파티션을 생성해주어야 한다.

 

"Create Partition Primary"를 입력한다.

해당 명령은 디스크의 연속된 빈 공간 하나를 모두 이용하여 파티션을 하나 만든다.

 

Format 명령을 이용하여 볼륨을 포맷한다.

FORMAT FS="파일 시스템 형식" QUICK
FORMAT FS=NTFS QUICK

 

"Assign Letter=D"를 입력하여 드라이브 문자를 할당한다.

 

 

이상으로 파티션 크기 조절 작업이 완료되었다.

이제 백업한 파일들을 볼륨에 다시 적용해주어야 한다.


백업 이미지 적용


"EXIT"를 눌러 DISKPART를 종료한 후, 아래의 예문을 참고하여 DISM을 이용한 이미지 적용 작업을 수행한다.

DISM /Apply-Image /ImageFile:"이미지 파일의 경로" /ApplyDir:"이미지를 적용할 디렉터리 경로" /Index:1

 

예를 들어 이전 단계에서 C 드라이브를 백업해 둔 이미지를 적용하기 위해서는 다음과 같이 입력한다.

DISM /Apply-Image /ImageFile:"E:\Drive_C.WIM" /ApplyDir:"C:" /Index:1

 

D 드라이브 역시 같은 방법을 수행한다.

 

이 과정에서 권한 문제로 인해 상술한 안전 모드에서 이미지를 생성하였다면 이미지를 적용할 때에도 안전 모드에서 이미지를 적용할 필요가 있다.


모든 단계를 정상적으로 수행하였다면 바로 재부팅하여도 문제가 없다.

 

그러나 절차를 수행하는 과정에서 무엇인가 문제가 있었던 경우, 부팅이 불가능할 수 있다.

 

이때는 다시 RE로 진입한 후, 아래의 명령을 입력한다.

BCDBoot C:\Windows /l ko-kr
C:\Windows\System32\reagentc /setreimage /path R:\Recovery\WindowsRE /target C:\Windows

1번째 명령은 부팅 영역을 재구성하는 명령이고, 2번째 명령은 부팅 영역을 재구성함으로써 손실된 Windows RE 이미지 경로를 재구성하는 명령이다.

이제 재부팅하여도 문제가 없을 것이다.


여담


DISM을 이용하여 파티션 조정을 한 후, UWP 기반 앱을 구동하려고 하면 이러한 메시지가 뜰 수 있다.

별 신경 쓸 필요 없으며, 앱을 다시 실행하면 정상적으로 실행된다.

시스템 복원을 수행한 후에도 발생하는 것으로 보아 내부적으로 링크가 연결이 되지 않았거나 기타 문제가 있는 것으로 보인다.


참고하면 좋은 글


728x90
반응형

댓글