C 드라이브를 채운 WSL2, 개발 환경을 D로 옮기려면

개발 도구와 AI 모델을 설치할 때마다 C 드라이브가 꽉 찬다. 지금 쓰는 Ubuntu의 프로젝트와 계정 설정까지 D 드라이브로 통째로 옮길 수 있을까?

C 드라이브를 채운 WSL2, 개발 환경을 D로 옮기려면
세 줄 요약
  • 직접 이동은 기존 배포판 이름을 유지하며, 별도 이름으로 가져오면 이전 환경을 남겨 시험할 수 있다.
  • Windows 쪽 프로젝트와 전역 WSL 설정은 배포판 밖에 있어 별도로 보관한다.
  • 가져온 배포판의 사용자·프로젝트를 확인한 뒤 기본 배포판을 바꾸고, 이전본 삭제는 마지막에 한다.

바로 옮길 때와 기존 환경을 남길 때

WSL2의 Ubuntu를 C 드라이브에서 D 드라이브로 옮겨도 Linux를 처음부터 설치할 필요는 없다. 현재 배포판의 저장 위치를 바꾸는 방법과, 배포판을 파일로 내보낸 뒤 새 위치에 가져오는 방법이 있다. 첫 방법은 같은 이름으로 계속 쓰기에 편하고, 두 번째 방법은 원래 배포판을 남겨 놓고 새 환경에서 프로젝트가 열리는지 시험하기에 맞다.

용량이 다시 차는 일도 이동을 선택하는 이유다. 한 Pengwin 이용자는 Reddit에서 C 드라이브를 정리했지만 AI 모델과 패키지를 설치하면서 또 공간이 부족해져 다른 드라이브로 옮기는 방법을 물었다. 이 경우 캐시 일부를 지워도 앞으로 저장할 모델의 위치가 그대로다. 배포판을 더 여유 있는 디스크로 옮기면 그 안에 새로 설치하는 파일도 새 위치에 쌓인다.

선택이동 뒤 배포판준비할 공간
직접 이동을 선택한다.기존 이름과 등록을 유지하고 저장 경로를 바꾼다.목적지의 배포판 공간과 별도 백업 공간이 필요하다.
내보낸 뒤 다른 이름으로 가져온다.원래 배포판과 새 배포판을 함께 남긴다.원래 배포판 외에 내보낸 파일과 새 배포판의 공간이 필요하다.

두 절차는 대안이다. 아래 공통 준비를 마친 뒤 한쪽을 선택하면 된다. 직접 이동에 성공한 배포판을 다시 가져올 필요는 없다. 반대로 원래 환경을 보존하며 비교하고 싶다면 처음부터 다른 이름으로 가져오는 경로를 쓰는 편이 명확하다.

C 드라이브에서 실제로 옮겨지는 파일

WSL2는 Linux 파일을 ext4.vhdx라는 가상 디스크에 저장한다. 이 파일은 사용량에 따라 커진다. Linux에서 보이는 파일시스템의 최대 크기, 그 안의 사용량, Windows에서 가상 디스크 파일이 차지하는 공간은 서로 다른 값이다. 기본 최대 크기로 1TB가 표시돼도 C 드라이브에 이미 1TB를 예약했다는 뜻은 아니다.

따라서 D 드라이브에 필요한 여유 공간을 Linux의 최대 크기만 보고 정하지 않는다. Windows에서 현재 가상 디스크 파일의 속성을 보고 크기와 디스크 할당 크기를 확인하고, D 드라이브의 여유 공간과 함께 본다. 내보낸 tar 파일과 가져온 가상 디스크를 D에 함께 둘 계획이라면 둘이 동시에 존재할 공간도 필요하다. 실제 압축 여부와 파일 상태가 달라 일률적으로 몇 배면 충분하다고 정할 수는 없다.

프로젝트가 어디에 있는지도 이동 범위를 바꾼다. /home/jiyun/projects는 Linux 쪽 경로지만, /mnt/c/Users/Jiyun/projects는 Windows C 드라이브를 통해 접근하는 경로다. 배포판을 D로 옮겨도 후자의 Windows 파일이 함께 D로 이동하지는 않는다. Microsoft는 Linux 명령으로 작업하는 프로젝트를 Linux 파일시스템에 두는 방식을 권장한다. Windows에 둘 필요가 있는 자료는 그 경로를 유지하거나 Windows에서 별도로 이전한다.

Windows 사용자 폴더의 .wslconfig도 배포판 밖에 있다. 이 파일은 여러 WSL2 배포판에 적용되는 전역 설정이다. 반면 Linux 안의 /etc/wsl.conf는 해당 배포판 설정이므로 내보낼 Linux 파일에 속한다. 두 설정 파일의 위치와 적용 범위가 달라 배포판 백업 파일 하나를 Windows 쪽 설정까지 포함한 PC 전체 백업으로 사용할 수는 없다.

배포판 이름을 적고 종료한 뒤 백업하기

아래 Windows 명령은 PowerShell에서 실행한다. 예시의 배포판 이름은 Ubuntu이며 실제 목록에 Ubuntu-24.04처럼 나오면 그 이름으로 바꾼다. 먼저 설치된 배포판과 WSL 프로그램 버전을 각각 조회한다.

wsl --list --verbose
wsl --version
wsl --help

목록의 VERSION 열에 나오는 1 또는 2는 배포판이 WSL1과 WSL2 중 무엇을 쓰는지 나타낸다. wsl --version은 설치된 WSL 구성요소의 버전을 보여준다. 이 가이드는 WSL2를 대상으로 한다. 현재 설치본의 도움말에서 --manage와 --move 지원도 확인한다. 지원하지 않는 설치본은 wsl --update로 업데이트한 뒤 도움말을 다시 보거나, 아래의 내보내기·가져오기 경로를 사용한다.

배포판을 끄기 전에 평소 Linux 터미널에서 whoami와 pwd를 실행해 사용자 이름과 프로젝트 경로를 적어 둔다. 실행 중인 개발 서버나 데이터베이스는 각 프로그램의 종료 절차로 멈추고, 편집 중인 파일을 저장한 뒤 WSL에 연결된 편집기도 닫는다. 그래야 내보낸 파일과 이동 뒤 시험할 작업의 상태를 맞출 수 있다.

파일 탐색기로 D:\WSL-Backups 폴더를 먼저 만든다. D가 아니라 별도 백업 디스크를 써도 된다. 다음 첫 명령은 모든 WSL 배포판과 WSL2 가상 머신을 종료하므로 다른 배포판에서 진행 중인 작업도 저장한 뒤 실행한다.

wsl --shutdown
wsl --export Ubuntu "D:\WSL-Backups\Ubuntu-20261026.tar"

내보내기는 기본적으로 tar 파일을 만든다. 오류 없이 끝났는지 확인하고 지정 경로에 파일이 생겼는지 본다. 같은 경로에 이미 보관한 백업이 있으면 새 이름을 쓴다. 이 파일에는 홈 폴더 안의 SSH 키나 개인 설정도 포함될 수 있으므로 공개 공유 폴더에 두지 않는다.

파일이 존재한다는 사실만으로 실제 복원까지 시험된 것은 아니다. 복원 가능성을 먼저 확인하려면 아래의 별도 이름 가져오기 절차를 이용한다. C 드라이브에 남은 원래 배포판을 삭제하지 않고도 가져온 환경의 사용자와 프로젝트를 점검할 수 있다.

기존 이름을 유지하는 직접 이동

도움말에서 이동 옵션을 지원한다면, 백업을 만든 상태에서 다음 명령을 실행한다. D:\WSL은 탐색기에서 미리 만든 상위 폴더이고, D:\WSL\Ubuntu는 다른 배포판에 쓰지 않는 새 목적지 경로다. 기존 가상 디스크 파일을 탐색기로 먼저 잘라 붙여 넣는 절차는 필요하지 않다.

wsl --manage Ubuntu --move "D:\WSL\Ubuntu"

이동 뒤에도 목록의 배포판 이름은 Ubuntu다. WSL은 기존 배포판의 등록 정보를 사용해 저장 위치를 바꾼다. 따라서 다른 이름의 복사본을 만드는 가져오기와 달리, 터미널에서 계속 같은 이름으로 실행한다. 이 기능의 도입은 2.3.11 사전 릴리스 기록에 있지만, 실행 가능 여부는 앞에서 확인한 설치본의 도움말을 따른다.

명령이 성공한 뒤에는 기존 이름으로 실행한다. 평소 사용자가 그대로 나오는지 보고, 적어 둔 프로젝트로 들어가 작업 파일을 연다. 여기서 jiyun과 프로젝트 경로는 설명용 예시이며 실제 기록한 값으로 바꾼다.

wsl --distribution Ubuntu
whoami
cd /home/jiyun/projects
pwd
ls -la

프로젝트 폴더가 보이면 평소 쓰던 명령으로 개발 서버나 도구를 실행해 데이터 파일과 설정을 읽는지 확인한다. 디렉터리 목록만으로 프로그램의 정상 작동까지 입증되지는 않는다. 직접 이동을 선택했다면 이전 이름의 별도 배포판이 생기지 않으므로, 뒤에 나오는 이전 배포판 삭제 명령은 실행하지 않는다.

원래 배포판을 남겨 두는 가져오기

백업을 새 위치에서 먼저 시험할 때는 아직 쓰지 않는 이름을 지정한다. 아래는 원래 Ubuntu를 유지하고 Ubuntu-D를 새로 등록하는 예다. 직접 이동을 선택하지 않았다는 전제에서, 탐색기로 비어 있는 D:\WSL\Ubuntu-D 폴더를 만들어 가져올 위치로 사용한다.

wsl --import Ubuntu-D "D:\WSL\Ubuntu-D" "D:\WSL-Backups\Ubuntu-20261026.tar" --version 2
wsl --list --verbose
wsl --distribution Ubuntu-D --user jiyun

첫 명령이 실패했다면 다음 명령을 연달아 실행하지 않고 오류부터 해결한다. 성공한 경우 목록에 두 이름이 나타나며, 마지막 명령은 새 배포판 안에 이미 존재하는 jiyun 사용자로 들어간다. 이 사용자 이름은 앞에서 적어 둔 값이다. 백업에 계정이 들어 있으므로 같은 이름의 사용자를 새로 만들 필요는 없다.

가져온 파일은 내보내기를 실행한 시점의 자료다. 그 뒤 원래 Ubuntu에서 수정한 Linux 파일은 Ubuntu-D에 자동 반영되지 않는다. 시험 중에는 어느 배포판에서 작업했는지 이름을 보고, 이전본을 삭제하기 전에 내보내기 이후 바뀐 파일도 새 환경으로 옮긴다. 두 배포판이 같은 Windows 경로를 여는 경우에는 서로 다른 사본이 아니라 같은 Windows 파일을 읽고 쓸 수 있다.

가져온 배포판은 별도 기본 사용자 설정이 없으면 root로 시작한다. 사용자 옵션 없이 실행했을 때 root가 나와도 홈 폴더가 지워졌다는 뜻은 아니다. 내보낸 /etc/wsl.conf에 이미 [user] 설정이 있다면 그 사용자 지정도 함께 가져온다. 기존 사용자로 프로젝트를 확인한 뒤, root로 열리는 경우에는 새 배포판의 이 파일을 관리자 권한으로 편집해 다음 설정을 넣는다.

[user]
default=jiyun

이미 파일이 있으면 다른 설정을 지우지 않고 [user] 절의 default 값만 수정한다. 기존에 같은 절이 있으면 중복으로 추가하지 않는다. 가져온 배포판에는 스토어 설치본의 전용 실행 파일이 없으므로 ubuntu config --default-user 대신 이 설정 경로를 사용한다. 저장하고 Linux 셸에서 나온 뒤 PowerShell에서 새 배포판만 종료하고 다시 연다.

wsl --terminate Ubuntu-D
wsl --distribution Ubuntu-D

다시 whoami를 실행하면 기본 사용자 설정의 적용 여부를 알 수 있다. 평소 프로젝트, 숨김 설정 파일, 필요한 도구를 새 환경에서 열어 본다. Windows 터미널이나 편집기에서 배포판 이름을 직접 지정해 두었다면 Ubuntu-D로 연결 대상을 바꾼다. 이전 이름을 그대로 지정하면 원래 C 드라이브의 환경에서 계속 작업하게 된다.

새 작업 위치 확인과 이전 배포판 정리

저장 경로가 실제로 바뀌었는지는 Microsoft가 안내하는 등록 정보 조회로 확인할 수 있다. 아래 명령은 레지스트리를 읽기만 한다. 직접 이동했다면 Ubuntu, 가져왔다면 Ubuntu-D를 변수 값으로 쓴다.

$DistroName = "Ubuntu-D"
(Get-ChildItem -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss | Where-Object { $_.GetValue("DistributionName") -eq $DistroName }).GetValue("BasePath") + "\ext4.vhdx"

출력된 경로가 D의 새 위치인지 보고 Windows에서 C와 D의 여유 공간도 다시 확인한다. 별도 이름으로 가져온 경우에는 원래 배포판을 남겨 놓았으므로 아직 C의 그 공간이 비워지지 않은 것이 정상이다. 이동 자체는 가상 디스크 축소나 모든 WSL 관련 파일의 이전을 뜻하지 않는다. Windows 전역 설정에서 쓰는 스왑 파일 등은 별도 위치에 남을 수 있다.

새 배포판에서 작업이 되는 것을 확인했다면 아래 명령으로 이름 없이 wsl을 실행할 때 열릴 기본 대상을 바꾼다. 이것은 기본값만 바꾸며 기존 배포판의 데이터를 삭제하지 않는다.

wsl --set-default Ubuntu-D

기존 Ubuntu의 데이터까지 지우기로 결정했을 때만 다음 명령을 별도로 실행한다. 이 명령은 Ubuntu 등록과 그 안의 데이터·설정·프로그램을 영구 제거한다. 새 배포판과 내보낸 백업을 확인한 뒤 삭제할 이름을 목록과 대조한다. 직접 이동으로 계속 쓰는 Ubuntu에는 실행하지 않는다.

wsl --unregister Ubuntu

공식 FAQ에는 VHD를 내보낸 뒤 기존 등록을 삭제하고 가져오는 이전 방법도 있다. 그중 --import-in-place는 지정한 VHDX 자체를 사용하므로, 그 파일이 새 작업 디스크가 되면 동시에 독립 백업이라고 볼 수는 없다. 위 tar 방식에서는 내보낸 파일을 별도로 보관할 수 있다. 이전을 끝낸 뒤 새 환경에서 생긴 변경까지 보관하려면 새 배포판 이름으로 다시 내보내 별도 백업을 만든다.