WSL 에 설치된 Distro(Ubuntu등 배포판)를 backup 하고, restore 하기 위한 방법들 입니다.
또한, 설치된 Distro 에서, custom Distro 를 만드는 방법이기도 합니다.
wsl 명령의 옵션중에, --export,--import,--import-in-place 기능과, 제한사항을 설명합니다.
(MS 홈페이지는 설명이 너무 간단하고 부족합니다.)
또한, 제한사항이 없는, 직접적인 방법과 주의사항을 설명합니다.
wsl ( windows subsystem for linux ) 에서는, 사용자가 배포판을 수정 및 기능 추가 하여,
재배포판(re-distribution / custom distribution) 을 만들어 사용할 수 있습니다.
이때 사용되는 wsl의 command option 이 --export, --import, --import-in-place 입니다.
주 목적이, 나만의 파생 배포판을 만드는 것이며, backup 의 용도가 아닙니다.
이 옵션들로 backup / restore 를 할 수 있으나, 제한사항 때문에 불편한 부분이 있습니다.
1) wsl --export 명령
Ubuntu-22.04 Distro 를 export 하는 예입니다.
PS C:\Users\gildong> wsl -l -v NAME STATE VERSION * Ubuntu-22.04 Stopped 2 PS C:\Users\gildong> wsl --export Ubuntu-22.04 d:\my_ubuntu-22.04.tar.gz 내보내기가 진행 중입니다. 이 작업은 몇 분 정도 걸릴 수 있습니다. 작업을 완료했습니다.
명령 형식은 wsl --export <Distro> <export file path(name)> 입니다.
export 할 Distro name 과 file path(name) 은 필수 옵션입니다.
기본 저장 형식은 tar.gz 이며, user 계정과 권한, cache, run, var, temp file들의 일부는
제외될 수 있습니다. 따라서 동작에는 문제 없으나, 완벽히 같지는 않습니다.
--vhd option 사용시, 현재의 virtual disk ( *. vhdx ) 를 저장 할 수 있습니다.
PS C:\Users\gildong> wsl --export --vhd Ubuntu-22.04 d:\my_ubuntu-22.04.vhdx 내보내기가 진행 중입니다. 이 작업은 몇 분 정도 걸릴 수 있습니다. 작업을 완료했습니다.
이 것은, 현재 상태의 가상 디스크 자체의 사본을 만드는 옵션입니다.
따라서, 현상태와 동일한 사본(snap shot) 이 만들어 집니다.
주의 사항은, export 할 때, 반드시 Stopped 상태에서 해야 합니다.
Running 상태에서 export 하는 경우, 즉시, 강제 shutdown 된 후 실행됩니다.
실행중인 process나 App 등의 관련 file 에 문제가 발생하고,
이러한 file 문제를 가진 상태, 그대로 export 됩니다.
2) wsl --import 명령
import 는, tar.gz 또는 vhdx file로, Distro(배포판)을 설치, 등록합니다.
PS C:\Users\gildong> mkdir c:\my_distro PS C:\Users\gildong> wsl --import my_Ubuntu-22.04 c:\my_distro\my_ubuntu D:\my_ubuntu-22.04.tar.gz 가져오기가 진행 중입니다. 이 작업은 몇 분 정도 걸릴 수 있습니다. 작업을 완료했습니다. PS C:\Users\gildong> wsl -l -v NAME STATE VERSION * Ubuntu-22.04 Stopped 2 my_Ubuntu-22.04 Stopped 2 PS C:\Users\gildong> dir C:\my_distro\my_ubuntu\ 디렉터리: C:\my_distro\my_ubuntu Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 2023-07-21 오후 9:16 1455423488 ext4.vhdx
위의 실행 예제는, 먼저, 설치될 상위 directory, c:\my_distro 를 만들어 줍니다.
그 후, c:\my_distro\my_ubuntu 에 import 시킵니다.
directory경로중, 하위의 my_ubuntu는 자동으로 만들어 줍니다.
명령 형식은, wsl --import <Distro> <InstallLocation> <tar.gz file>
import 후, wsl -l -v 명령으로 wsl에 등록된 결과를 확인 할 수 있습니다.
import 시 지정한 Distro 이름, my_Ubuntu-22.04 가 보입니다.
그리고, my_ubuntu directory 안에 새로 생성된 virtual disk가 있습니다.
vhdx file을 import 할 때는 --vhd 옵션을 사용해야 합니다.
PS C:\Users\gildong> wsl --import --vhd my_vhdx_ubuntu c:\my_distro\my_vhdx_ubuntu D:\my_ubuntu-22.04.vhdx 가져오기가 진행 중입니다. 이 작업은 몇 분 정도 걸릴 수 있습니다. 작업을 완료했습니다. PS C:\Users\gildong> wsl -l -v NAME STATE VERSION * Ubuntu-22.04 Stopped 2 my_Ubuntu-22.04 Stopped 2 my_vhdx_ubuntu Stopped 2
wsl -l -v 명령으로, 추가된 my_vhdx_ubuntu 를 확인 할 수 있습니다.
vhdx file은 import 시, 변경/수정되지 않으며, my_vhdx_ubuntu 에 단순 복사됩니다.
import 시 주의, 참고사항은, 다음과 같습니다.
wsl 에 등록된 현재의 Distro에 import 할 수 없습니다.
따라서, 교체 / update 하려면, 기존의 Distro를 unregister 해야 합니다.
PS C:\Users\gildong> wsl --unregister my_vhdx_ubuntu 등록 취소 중입니다. 작업을 완료했습니다.
위 code 는, my_vhdx_ubuntu distro의 unregister 예제입니다.
가상 디스크(ext4.vhdx) file은 제거 되지만, my_vhdx_ubuntu directory는
제거되지 않으므로 수동으로 삭제해 줘야 합니다.
또한, 최초 설치된 원래(원시)의 distro 는 설치시 입력한 user 계정으로 시작되지만,
import 한 Distro는 root 계정으로 시작됩니다.
기존의 유저계정으로 시작하려면, 몇가지 방법이 있으며, 다음의 site를 참고하세요.
추천하는 방법은, registry 수정입니다. 제일 간편합니다.
Windows Terminal 에서 ubuntu 시작시 적용 방법은 아래의 그림 을 참고하세요
command line에 -u <user name> 을 추가하면 됩니다.
그러나, windows terminal 외에서 실행하면, user 계정이 적용되지 않습니다.
Ubuntu file system 내에 존재하는, /etc/wsl.conf file에 아래코드를 추가해도 됩니다.
[user] default=gildong
gildong 은 ubuntu 시작시 적용할 user 계정입니다.
다음은, 필자가 추천하는 registry 수정입니다.
수정 위치는 위의 그림과 같이, 수정할 Distro name을 찾아, DefaultUid 를 고치면 됩니다.
아래의 registry 에서, 각각의 GUID 내부를 찾아보면 됩니다.
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Lxss
붉은 box 내에, import 한, distro name, my_Ubuntu-22.04 가 보이고
그위에 DefaultUid 는 0 으로 되어 있습니다. 0 은 root 계정을 의미합니다.
수정할 값은 hex 3e8 ( 십진수 1000 ) 은, 첫번째 등록된 user 계정을 의미합니다.
혹시, 다른 user 계정을 추가하였고, 특정 사용자를 지정하려면,
ubuntu에서 Uid 를 확인하여, 기입하면 됩니다.
그외, ubuntu2204.exe 를 이용한 default user 지정방식은,
wsl 에서 최초로 설치한, 원시 Distro에만 적용되는 방식으로,
import 된 distro에는 적용되지 않습니다.
3) wsl --import-in-place 명령
명령 형식은 wsl --import-in-place <Distribution Name> <vhdx file path>
import-in-place 는, vhdx file만 가능하고, install directory 를 지정하지 않습니다.
간단히 설명하면, 가상 디스크(vhdx) file을, wsl에 등록하는 것입니다.
PS C:\Users\gildong> wsl --import-in-place my_import_in_place D:\bkup_dist\my_ubuntu-22.04.vhdx 작업을 완료했습니다. PS C:\Users\gildong> wsl -l -v NAME STATE VERSION * Ubuntu-22.04 Stopped 2 my_import_in_place Stopped 2
위의 예제에서, my_import_in_place 이름으로 wsl에 등록된 것을 볼 수 있습니다.
다음의 설명은, export, import 를 사용하지 않고, 직접 복사,복구 방법입니다.
또한, 최초 설치된 원시 distro 에도, 적용가능 합니다.
wsl 은 virtual machine이며, linux의 경우 ext4.vhdx 라는 이름의 virtual disk 가 사용됩니다.
이 ext4.vhdx 를 직접 복사하여, 사본(snap shot)을 만들고, 복구 할 수도 있습니다.
import 한 distro는, 사용자가 directory위치를 지정하므로,
가상 디스크( ext4.vhdx ) 위치를 알고 있습니다.
MS Store 에서 설치한, 최초(원시) virtual machine의 가상 디스크, 또한 찾을 수 있습니다.
Windows 11, Ubuntu-22.04의 경우 다음의 directory에 있습니다.
c:\Users\gildong\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu22.04LTS_79rhkp1fndgsc\LocalState\
gildong 은 설치한 본인의 계정입니다.
물론, 설치한 배포본이나 Windows 환경이 다르면, file path가 다를 수 있습니다.
다른 경우, file을 검색해서, 위치를 찾으시기 바랍니다.
이 ext4.vhdx file을 복사하여, backup 하고, overwrite 하여, 복구 시킬 수 있습니다.
주의 할 것은, import / export 할 때와 같습니다.
backup 또는 복구할 distro 가 반드시 Stopped 상태여야 합니다.
만약, Stopped 상태인데도 안되거나, vhdx file에 문제가 있다면,
task manager 에서 wsl process들을 전부 종료한 후, backup / restore 하면 됩니다.
위의 상태는, windows 11에서, wsl 이 running 상태일때 process 들입니다.
이 때에는 wsl 실행에 문제가 있지 않은 이상, wsl --shutdown 으로 종료해야 합니다.
shutdown (Stopped) 상태가 되면, 아래의 2개 process 만 남습니다.
Windows Subsystem for Linux 한개
Windows Subsystem for Linux Service 한개
대부분의 경우, 위의 2개 process 만 남은 상태에서는,
ext4.vhdx file의 backup / restore 는 문제 없이 잘 되지만,
확실히 하고 싶거나, 문제가 있을 때는, 모두 process 종료하고 진행 하시면 됩니다.
windows 10 이나, 일부 사용환경에서, 일정 시간후( 1~2분 미만 )
위 2개의 process가 자동으로 실행되는 경우가 있습니다.
참고로, Windows 부팅 직후에는, wsl process들이 실행되지 않습니다.
자동 실행되는 경우는, windows 시작시, wsl로 server를 구동 하거나,
wsl 사용을 위한 (network 설정등) script를 시작하도록 설정된 경우입니다.
wsl 에 app을 잠시 설치해 볼 경우나, backup해야 할 경우,
ext4.vhdx를 위의 방법대로 직접 하시면 편합니다.
0 댓글