๋ฐฐํฌํ ์ค์น/๊ด๋ฆฌ, vhdx ๊ฐ์ ๋์คํฌ ์์ถ ๋ฐ Sparse ์ถ์, .wslconfig ๋ฆฌ์์ค ์ต์ ํ, Windows ์ํธ ์ด์ฉ, Mirrored ๋คํธ์ํน, USB/๋์คํฌ ๋ง์ดํธ, Docker ๋ฐ ํธ๋ฌ๋ธ์ํ
์๋ฒฝ ๊ฐ์ด๋
## 1. WSL2 ์ค์น ๋ฐ ํ๊ฒฝ ์ด๊ธฐํ (Installation & Setup)
Windows 10(2004 ์ด์) ๋ฐ Windows 11์์๋ ๋จ ํ ์ค์ ๋ช
๋ น์ด๋ก WSL2 ์ปค๋๊ณผ ๊ธฐ๋ณธ Ubuntu ๋ฐฐํฌํ์ ์ค์นํ ์ ์์ต๋๋ค.
```powershell
# โก [1] ๊ธฐ๋ณธ ์ค์น (์ต์ Linux ์ปค๋ + ๊ธฐ๋ณธ Ubuntu ์๋ ์ค์น, ๊ด๋ฆฌ์ ๊ถํ ๊ถ์ฅ)
wsl --install
# ๐ [2] ์ค์น ๊ฐ๋ฅํ ์จ๋ผ์ธ Linux ๋ฐฐํฌํ ๋ชฉ๋ก ํ์ธ
wsl --list --online
# ์ถ์ฝํ:
wsl -l -o
# ๐ฆ [3] ์ํ๋ ํน์ ๋ฐฐํฌํ ์ง์ ์ค์น
wsl --install -d Ubuntu-24.04
wsl --install -d Debian
wsl --install -d Kali-linux
wsl --install -d openSUSE-Tumbleweed
# ๐ ๏ธ [4] OS ๊ธฐ๋ฅ๋ง ํ์ฑํํ๊ณ ๋ฐฐํฌํ์ ๋์ค์ ์ค์นํ ๋
wsl --install --no-distribution
# ๐ [5] WSL ์ปค๋ ๋ฐ WSLg ์ต์ ๋ฒ์ ์
๋ฐ์ดํธ
wsl --update
wsl --update --pre-release # ํ๋ฆฌ๋ฆด๋ฆฌ์ฆ(์คํ ๊ธฐ๋ฅ ํฌํจ) ์
๋ฐ์ดํธ
wsl --update --web-download # Microsoft Store ๋์ GitHub ์น์์ ์ง์ ๋ค์ด๋ก๋
# ๐ [6] ํ์ฌ WSL ๋ฒ์ ๋ฐ ๊ตฌ์ฑ ์์ ์์ธ ํ์ธ
wsl --version
# ๊ฒฐ๊ณผ ์์:
# WSL ๋ฒ์ : 2.3.24.0
# ์ปค๋ ๋ฒ์ : 5.15.153.1-2
# WSLg ๋ฒ์ : 1.0.65
# Windows ๋ฒ์ : 10.0.26100.1742
# โ๏ธ [7] WSL ์ํ ํ์ธ ๋ฐ ๊ธฐ๋ณธ ๋ฒ์ ์ 2๋ก ๊ณ ์
wsl --status # ๊ธฐ๋ณธ ๋ฐฐํฌํ, ์ปค๋ ๋ฒ์ , ํ์ผ ์์คํ
์ํ
wsl --set-default-version 2 # ํฅํ ์ค์น๋๋ ๋ฐฐํฌํ ๊ธฐ๋ณธ ์ํคํ
์ฒ๋ฅผ WSL2๋ก ์ง์
```
## 2. ๋ฐฐํฌํ(Distro) ์กฐํ, ์คํ ๋ฐ ์ธ์
๊ด๋ฆฌ
์ค์น๋ ์ฌ๋ฌ ๋ฆฌ๋
์ค ๋ฐฐํฌํ์ ํ์ธํ๊ณ ์คํํ๋ ๊ธฐ๋ณธ ์กฐ์์
๋๋ค.
```powershell
# ๐ [1] ์ค์น๋ ๋ฐฐํฌํ ๋ชฉ๋ก ๋ฐ ์คํ ์ํ ํ์ธ (๋งค์ฐ ์ค์)
wsl --list --verbose
# ์ถ์ฝํ:
wsl -l -v
# ์ถ๋ ฅ ํญ๋ชฉ: NAME(์ด๋ฆ), STATE(Running/Stopped), VERSION(1 ๋๋ 2)
# ๐ [2] ๋ฐฐํฌํ ์ง์
๋ฐ ์คํ
wsl # ๊ธฐ๋ณธ(Default) ๋ฐฐํฌํ์ผ๋ก ์ฆ์ ์ ์ง์
wsl -d Ubuntu-24.04 # ํน์ ๋ฐฐํฌํ ์ด๋ฆ์ผ๋ก ์ง์ ์ง์
wsl -d Debian -u root # ํน์ ์ฌ์ฉ์(์: root) ๊ถํ์ผ๋ก ์ง์
wsl --cd ~ # Linux ํ ๋๋ ํ ๋ฆฌ์์ ์์
wsl --cd /var/log # ์ง์ ํ ํน์ Linux ๊ฒฝ๋ก์์ ์์
# โญ [3] ๊ธฐ๋ณธ(Default) ๋ฐฐํฌํ ๋ณ๊ฒฝ (wsl ๋ช
๋ น ๋จ๋
์คํ ์ ์ด๋ฆด ๋ฐฐํฌํ)
wsl --set-default Ubuntu-24.04
# ์ถ์ฝํ:
wsl -s Ubuntu-24.04
# ๐ [4] WSL1 ๋ฐฐํฌํ์ WSL2 ์ํคํ
์ฒ๋ก ๋ณํ (๋๋ ๋ฐ๋)
wsl --set-version Ubuntu-20.04 2
# โก [5] ์์ ์ง์
ํ์ง ์๊ณ ์ธ๋ผ์ธ์ผ๋ก Linux ๋ช
๋ น ์ง์ ์คํ
wsl ls -la /var/www
wsl uname -r
wsl -d Debian cat /etc/os-release
```
## 3. ์ธ์คํด์ค ์ค์ง, ์ ์ฒด ์ข
๋ฃ ๋ฐ ๋ฆฌ์์ค ๋ฐํ (Stop & Shutdown)
WSL2๋ ์ฌ์ฉ ํ์๋ ๊ฐ์ ๋จธ์ (VM)์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ ํ ์ ์์ผ๋ฏ๋ก, ์ข
๋ฃ ๋ฐ ์ฌ์์ ๋ช
๋ น์ ์์งํด์ผ ํฉ๋๋ค.
```powershell
# ๐ [1] ํน์ ๋ฐฐํฌํ ํ๋๋ง ์ฆ์ ๊ฐ์ ์ข
๋ฃ (์ข๋น ํ๋ก์ธ์ค ํด๊ฒฐ)
wsl --terminate Ubuntu-24.04
# ์ถ์ฝํ:
wsl -t Ubuntu-24.04
# ๐ [2] ๋ชจ๋ ๋ฐฐํฌํ ๋ฐ ๋ฐฑ๊ทธ๋ผ์ด๋ WSL ๊ฐ์ ๋จธ์ ์ ์ฒด ๊ฐ์ ์ข
๋ฃ
# ๐ก .wslconfig ์์ ํ ์ค์ ์ ์ ์ฉํ๊ฑฐ๋ RAM์ ํธ์คํธ์ ์ฆ์ ๋ฐํํ ๋ ํ์!
wsl --shutdown
# ๐ [3] ๋ชจ๋ ์ธ์คํด์ค๊ฐ ์์ ํ ๋ฉ์ถ์๋์ง ํ์ธ
wsl -l -v
# ๋ชจ๋ ํญ๋ชฉ์ STATE๊ฐ "Stopped"์ธ์ง ํ์ธ
# ๐ [4] ๋น ๋ฅธ WSL ์ฌ์์ ์๋ผ์ด๋ (PowerShell)
wsl --shutdown; wsl
```
## 4. ๋ฐฐํฌํ ๋ฐฑ์
, ๋ณต์ ๋ฐ ์ธ์คํด์ค ๋ณต์ (Export & Import)
๋ฐฐํฌํ ํ๊ฒฝ(๋๊ตฌ ์ค์น, ์ค์ ์๋ฃ ์ํ)์ .tar ํ์ผ๋ก ๋ฐฑ์
ํด ๋ค๋ฅธ PC๋ก ์ฎ๊ธฐ๊ฑฐ๋, ๋ณต์ ๋ณธ์ ๋ง๋ค์ด ํ
์คํธํ ์ ์์ต๋๋ค.
```powershell
# ๐พ [1] ํน์ ๋ฐฐํฌํ์ tar ์์นด์ด๋ธ๋ก ๋ด๋ณด๋ด๊ธฐ (์ ์ฒด ๋ฐฑ์
)
# ํ์: wsl --export <๋ฐฐํฌํ์ด๋ฆ> <๋ฐฑ์
ํ์ผ๊ฒฝ๋ก.tar>
wsl --export Ubuntu-24.04 D:\WSL_Backups\ubuntu24_backup.tar
# ๐ฆ [1-1] VHDX ์๋ณธ ํ์ ๊ทธ๋๋ก ๊ณ ์ ๋ด๋ณด๋ด๊ธฐ (WSL ์ต์ ๊ธฐ๋ฅ)
wsl --export Ubuntu-24.04 D:\WSL_Backups\ubuntu.vhdx --vhd
# ๐ฅ [2] ๋ฐฑ์
๋ณธ์ ์ ๋ฐฐํฌํ์ผ๋ก ๊ฐ์ ธ์ค๊ธฐ (๋ณต์ ๋๋ ์ธ์คํด์ค ๋ณต์ )
# ํ์: wsl --import <์ ๊ท๋ฐฐํฌํ์ด๋ฆ> <์ค์น๋ ํด๋๊ฒฝ๋ก> <๋ฐฑ์
ํ์ผ๊ฒฝ๋ก.tar> [--version 2]
wsl --import Ubuntu-Dev D:\WSL_Distros\Ubuntu-Dev D:\WSL_Backups\ubuntu24_backup.tar --version 2
# ๐ [3] ๊ธฐ์กด vhdx ํ์ผ์ ํ์ฉํ ์ธ-ํ๋ ์ด์ค ๋ฑ๋ก
wsl --import-in-place Ubuntu-Prod D:\WSL_Distros\ext4.vhdx
# ๐๏ธ [4] ๋ฐฐํฌํ ๋ฑ๋ก ์ทจ์ ๋ฐ ์์ ์ญ์ (๊ฐ์ ๋์คํฌ ext4.vhdx ์๊ตฌ ์ญ์ ์ฃผ์!)
wsl --unregister Ubuntu-Dev
# ๐ค [5] ํ: --import๋ก ๋ณต์ํ ๋ฐฐํฌํ์ ๊ธฐ๋ณธ ์ฌ์ฉ์๊ฐ root๊ฐ ๋ฉ๋๋ค.
# ์ผ๋ฐ ์ฌ์ฉ์๋ก ๊ธฐ๋ณธ ๋ก๊ทธ์ธํ๋ ค๋ฉด Linux ๋ด๋ถ /etc/wsl.conf์ ์ค์ ์ถ๊ฐ:
# [user]
# default = <๋ด์ ์ ๋ค์>
```
## 5. VHDX ๋์คํฌ ์ฉ๋ ์ถ์ ๋ฐ ์ต์ ํ (Sparse & Compact)
WSL2 ๊ฐ์ ๋์คํฌ(`ext4.vhdx`)๋ ๋์ ํ์ฅํ์ด๋ผ ์์์ ํ์ผ์ ์ง์๋ Windows ํธ์คํธ์์๋ ํ์ผ ํฌ๊ธฐ๊ฐ ์ค์ด๋ค์ง ์์ต๋๋ค.
```powershell
# ๐ [๋ฐฉ๋ฒ 1] ๋ด์ฅ Sparse VHDX ํ์ฑํ (๊ฐ์ฅ ์ถ์ฒ! WSL 2.0+ ์๋ ๊ณต๊ฐ ํ์)
# Linux์์ ํ์ผ์ ์ญ์ ํ๋ฉด Windows ํธ์คํธ ๊ฐ์ ๋์คํฌ ํฌ๊ธฐ๊ฐ ์๋์ผ๋ก ์ถ์๋จ
wsl --manage Ubuntu-24.04 --set-sparse true
# ์ ๊ท ์ค์น๋๋ ๋ชจ๋ ๋ฐฐํฌํ์ Sparse๋ฅผ ๊ธฐ๋ณธ ์ ์ฉํ๋ ค๋ฉด:
# %USERPROFILE%\.wslconfig ์ [wsl2] sparseVhd=true ์ถ๊ฐ
# ๐งน [๋ฐฉ๋ฒ 2] ์ ํต์ ์ธ Diskpart ์๋ ๋์คํฌ ์์ถ (๊ตฌ๋ฒ์ ํธํ)
# ๋จ๊ณ 1: WSL ์์ ์ข
๋ฃ
wsl --shutdown
# ๋จ๊ณ 2: ํด๋น ๋ฐฐํฌํ์ ext4.vhdx ์์น ํ์ธ (๋ณดํต AppData ์๋)
# ์: C:\Users\<์ฌ์ฉ์>\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu...\LocalState\ext4.vhdx
# ๋จ๊ณ 3: ๊ด๋ฆฌ์ ๊ถํ PowerShell/CMD์์ diskpart ์คํ
# diskpart ์ง์
ํ ์์๋๋ก ์
๋ ฅ:
select vdisk file="C:\๊ฒฝ๋ก\ext4.vhdx"
attach vdisk readonly
compact vdisk
detach vdisk
exit
# ๐ง [๋ณด์กฐ ํ] Linux ๋ด๋ถ์์ ๋ธ๋ก ๋น์ฐ๊ธฐ (TRIM ์คํ)
# Linux ๋ด๋ถ ํฐ๋ฏธ๋์์ ์คํํ์ฌ ๋ฏธ์ฌ์ฉ ๋ธ๋ก์ ์ ๋ฆฌ
sudo fstrim -av
```
## 6. Windows-Linux ์ํธ ์ด์ฉ & ํ์ผ์์คํ
์ฑ๋ฅ ๊ท์น
Windows์ Linux ๊ฐ ํ์ผ ๋ฐ ์คํ ํ์ผ ๊ต์ฐจ ์ ๊ทผ ๋ฐฉ๋ฒ๊ณผ I/O ์ฑ๋ฅ ๊ทน๋ํ ์์น์
๋๋ค.
```powershell
# ๐ [1] Linux์์ Windows ๋๋ผ์ด๋ธ ์ ๊ทผ
# C ๋๋ผ์ด๋ธ: /mnt/c/
# D ๋๋ผ์ด๋ธ: /mnt/d/
cd /mnt/c/Users/Username/Documents
# ๐ช [2] Windows ํ์๊ธฐ์์ Linux ํ์ผ์์คํ
์ด๊ธฐ
# Linux ํฐ๋ฏธ๋ ํ์ฌ ๊ฒฝ๋ก๋ฅผ Windows ํ์๊ธฐ GUI๋ก ์ฆ์ ์คํ:
explorer.exe .
# Windows ํ์๊ธฐ ์ฃผ์์ฐฝ(๋๋ Win+R ์คํ์ฐฝ)์ ์ง์ ์
๋ ฅ:
\\wsl.localhost\Ubuntu-24.04\home\username
\\wsl$\Ubuntu-24.04\
# โก [3] ํฌ๋ก์ค ์คํ (Cross-Execution)
# Linux ํฐ๋ฏธ๋ ์์์ Windows ํ๋ก๊ทธ๋จ ์คํ:
notepad.exe memo.txt
code . # ํ์ฌ ํด๋๋ฅผ VS Code๋ก ์ด๊ธฐ
powershell.exe -Command "Get-Process"
# PowerShell/CMD์์ Linux ํ์ดํ๋ผ์ธ ํ์ฉ:
ipconfig | wsl grep -i ipv4
Get-ChildItem | wsl awk '{print $1}'
# โ ๏ธ [CRITICAL] ํ์ผ์์คํ
I/O ์ฑ๋ฅ ํต์ฌ ๊ท์น
# โ ์ ๋ ๊ธ์ง: Git ํ๋ก์ ํธ, node_modules, Python venv๋ฅผ /mnt/c/... ์ ๋๊ณ ๋น๋ํ์ง ๋ง์ธ์! (์ต๋ 10~20๋ฐฐ ๋๋ฆผ)
# โญ ๊ถ์ฅ ์์น: ๋ฐ๋์ Linux ๋ฃจํธ(/home/<username>/projects/...) ๋ด๋ถ์ ์ฝ๋๋ฅผ ๋๊ณ ์์
ํ์ธ์.
```
## 7. ์ ์ญ ์ค์ (.wslconfig) & ๋ฐฐํฌํ ์ค์ (/etc/wsl.conf)
WSL2์ CPU/RAM ์ ์ ํ๋ ์ ํ, systemd ํ์ฑํ, ๋คํธ์ํน ๋ฐฉ์ ์ปค์คํฐ๋ง์ด์ง ํต์ฌ์
๋๋ค.
### ์ ์ญ ์ค์ : `%USERPROFILE%\.wslconfig` (Windows ํธ์คํธ ๋ ๋ฒจ)
Windows ์ฌ์ฉ์ ํด๋(`C:\Users\<์ฌ์ฉ์>\.wslconfig`)์ ํ์ผ์ ๋ง๋ค๊ณ ์ค์ ํฉ๋๋ค. (์ค์ ํ `wsl --shutdown` ํ์)
```ini
[wsl2]
# ๐ป ์ต๋ ์ฌ์ฉ ๋ฉ๋ชจ๋ฆฌ ์ ํ (๊ธฐ๋ณธ๊ฐ์ ํธ์คํธ RAM์ 50% ๋๋ 8GB ์ค ์์ ๊ฐ)
memory=8GB
# โ๏ธ ํ ๋นํ CPU ์ฝ์ด ์ ์ ํ
processors=4
# ๐พ ์ค์(Swap) ํ์ผ ํฌ๊ธฐ ์ค์ (0GB ์ค์ ์ ๋นํ์ฑํ)
swap=4GB
# ๐ ๋ก์ปฌํธ์คํธ ํฌํธ ์๋ ์ ๋ฌ
localhostForwarding=true
# ๐ ์ต์ ๋ฏธ๋ฌ๋ ๋คํธ์ํน (Windows์ WSL์ด IP/ํฌํธ๋ฅผ ์์ ๊ณต์ , VPN ๋ฌธ์ ํด๊ฒฐ)
networkingMode=mirrored
dnsTunneling=true
autoProxy=true
# ๐ฆ Sparse VHD ์๋ ํ์ฑํ (์ฉ๋ ์๋ ๋ฐํ)
sparseVhd=true
[experimental]
# ๐ง Linux์์ ์ฌ์ฉ ํ ๋จ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ Windows์ ์ ์ง์ ์ผ๋ก ๋ฐํ (gradual ๋๋ dropcache)
autoMemoryReclaim=gradual
```
### ๋ฐฐํฌํ ์ค์ : `/etc/wsl.conf` (Linux ๋ด๋ถ ๋ ๋ฒจ)
๊ฐ Linux ๋ฐฐํฌํ์ `/etc/wsl.conf`์ ์์ฑํฉ๋๋ค.
```ini
# ๐ [1] systemd ํ์ฑํ (systemctl, Docker, Cron, Nginx ๋ฐ๋ชฌ ์ฌ์ฉ ์ ํ์)
[boot]
systemd=true
# ๐ค [2] ๊ธฐ๋ณธ ๋ก๊ทธ์ธ ์ฌ์ฉ์ ์ค์
[user]
default=lucky
# ๐ [3] Windows ๋๋ผ์ด๋ธ(/mnt/c) ๋ง์ดํธ ์ต์
๋ฐ ํ์ผ ๊ถํ ์ง์
[automount]
enabled=true
options="metadata,umask=22,fmask=11"
mountFsTab=true
# ๐ [4] DNS ํ์ผ ์๋ ๋ฎ์ด์ฐ๊ธฐ ๋ฐฉ์ง (๊ณ ์ ์ฌ๋ด DNS/Google DNS ์ฌ์ฉ ์)
[network]
generateResolvConf=false
```
## 8. ๋คํธ์ํฌ(NAT vs Mirrored) & ํฌํธ ํฌ์๋ฉ, VPN ๋์
๊ธฐ๋ณธ NAT ๋ชจ๋์ ๋ชจ๋ Mirrored ๋ชจ๋์ ๋์ ์ฐจ์ด์ ๋คํธ์ํฌ ๋ฌธ์ ํด๊ฒฐ๋ฒ์
๋๋ค.
```powershell
# ๐ [1] ๋ชจ๋ ๋น๊ต
# - NAT(๊ธฐ๋ณธ๊ฐ): WSL์ด ์์ฒด ๊ฐ์ IP(172.x.x.x)๋ฅผ ๊ฐ์ง. Windows -> localhost๋ก ์ ๊ทผ ๊ฐ๋ฅ.
# - Mirrored(๊ถ์ฅ): Windows์ WSL2๊ฐ ๋์ผํ IP ์ฃผ์์ ํฌํธ ๊ณต๊ฐ์ ๊ณต์ (Windows 11 23H2+)
# ๐ [2] ์ธ๋ถ LAN(๋์ผ ๊ณต์ ๊ธฐ ๋ด ๋ค๋ฅธ PC/๋ชจ๋ฐ์ผ)์์ WSL2 ์น ์๋ฒ ์ ์ (NAT ๋ชจ๋์ผ ๋)
# ๋จ๊ณ 1: Linux ๋ด๋ถ IP ํ์ธ
wsl hostname -I
# ๋จ๊ณ 2: Windows ๊ด๋ฆฌ์ PowerShell์์ ํฌํธํ๋ก์ ๊ท์น ๋ฑ๋ก (์ธ๋ถ 8080 -> WSL 8080)
netsh interface portproxy add v4tov4 listenport=8080 listenaddress=0.0.0.0 connectport=8080 connectaddress=172.28.96.15
# ๋จ๊ณ 3: ํฌํธํ๋ก์ ๋ชฉ๋ก ํ์ธ ๋ฐ ์ญ์
netsh interface portproxy show all
netsh interface portproxy delete v4tov4 listenport=8080 listenaddress=0.0.0.0
# ๐ก๏ธ [3] Windows ๋ฐฉํ๋ฒฝ ํฌํธ ์คํ (์ธ๋ถ ์ ์ ํ์ฉ)
New-NetFirewallRule -DisplayName "WSL2 Port 8080" -Direction Inbound -LocalPort 8080 -Protocol TCP -Action Allow
# ๐ [4] VPN(Cisco AnyConnect, GlobalProtect ๋ฑ) ์ฐ๊ฒฐ ์ WSL2 ์ธํฐ๋ท ๋จ์ ํด๊ฒฐ๋ฒ
# ํด๊ฒฐ์ฑ
: %USERPROFILE%\.wslconfig ์ ์๋ 2์ค ์ถ๊ฐ ํ wsl --shutdown
# [wsl2]
# networkingMode=mirrored
# dnsTunneling=true
```
## 9. ๋ฌผ๋ฆฌ ๋์คํฌ ๋ง์ดํธ ๋ฐ USB ๋๋ฐ์ด์ค ์ฐ๊ฒฐ (usbipd)
์ธ์ฅ ๋ฆฌ๋
์ค ํ๋ ๋์คํฌ(ext4 ํฌ๋งท) ๋๋ ์๋์ด๋
ธ/์๋ฆฌ์ผ USB ์ฅ๋น๋ฅผ WSL๋ก ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ์
๋๋ค.
```powershell
# ๐ฝ [1] ๋ฌผ๋ฆฌ ๋์คํฌ ์ง์ ๋ง์ดํธ (Windows ๊ด๋ฆฌ์ PowerShell)
# ๋์คํฌ ID ํ์ธ
GET-CimInstance -ClassName Win32_DiskDrive | Select-Object DeviceID, Model, Size
# ๋ฌผ๋ฆฌ ๋์คํฌ ์ ์ฒด ๋ง์ดํธ
wsl --mount \\.\PHYSICALDRIVE1
# ํน์ ํํฐ์
๋ฐ ํ์ผ์์คํ
(ext4) ์ง์ ๋ง์ดํธ
wsl --mount \\.\PHYSICALDRIVE1 --partition 1 -t ext4
# ๋ง์ดํธ ํด์ (์์ ์ ๊ฑฐ)
wsl --unmount \\.\PHYSICALDRIVE1
# ๐ [2] USB ์ฅ๋น ์ฐ๊ฒฐ (usbipd-win ๋๊ตฌ ํ์: winget install dorssel.usbipd-win)
# USB ์ฅ๋น ๋ชฉ๋ก ๋ฐ BUSID ํ์ธ (Windows ๊ด๋ฆฌ์ PowerShell)
usbipd list
# ํน์ BUSID ์ฅ๋น๋ฅผ WSL ๊ณต์ ๊ฐ๋ฅ ์ํ๋ก ๋ฐ์ธ๋ฉ (์ต์ด 1ํ)
usbipd bind --busid 2-3
# WSL2 ๋ฐฐํฌํ์ผ๋ก USB ์ฐ๊ฒฐ (Attach)
usbipd attach --wsl --busid 2-3
# ์ฐ๊ฒฐ ํด์ (Detach)
usbipd detach --busid 2-3
# ๐ง Linux ๋ด๋ถ์์ ์ฐ๊ฒฐ๋ USB ํ์ธ
lsusb
```
## 10. ๊ฐ๋ฐ ๋๊ตฌ ์ฐ๋: Docker, VS Code & WSLg (GUI)
WSL2๋ฅผ ๋ฉ์ธ ๊ฐ๋ฐ ํ๊ฒฝ์ผ๋ก ํ์ฉํ๊ธฐ ์ํ ํต์ฌ ๋๊ตฌ ์ฐ๋ ๊ฐ์ด๋์
๋๋ค.
```bash
# ๐ป [1] VS Code ์ฐ๋ (VS Code Remote - WSL ํ์ฅ ์ค์น)
# Linux ํฐ๋ฏธ๋์์ ์๋ ๋ช
๋ น์ ์น๋ฉด Windows์ VS Code๊ฐ ํด๋น Linux ๊ฒฝ๋ก๋ก ์ฆ์ ์ฐ๊ฒฐ
code .
# ๐ณ [2] Docker ์ฐ๋ (2๊ฐ์ง ๋ฐฉ์)
# ๋ฐฉ์ A: Docker Desktop ์ฌ์ฉ
# Docker Desktop ์ค์ -> Resources -> WSL integration -> ์ค์น๋ ๋ฐฐํฌํ ์ฒดํฌ
# ๋ฐฉ์ B: Docker Desktop ์์ด ๊ฐ๋ฒผ์ด ๋ค์ดํฐ๋ธ Docker Engine ๋จ๋
์ค์น (/etc/wsl.conf์ systemd=true ํ์)
sudo apt update && sudo apt install -y docker.io docker-compose-plugin
sudo usermod -aG docker $USER
newgrp docker
docker run --rm hello-world
# ๐ผ๏ธ [3] WSLg ๋ด์ฅ GUI ์ฑ ์คํ (X-Server ๋ณ๋ ์ค์น ๋ถํ์, Windows 11 ๊ธฐ๋ณธ ๋ด์ฅ)
sudo apt install -y gedit x11-apps
xclock # ์๋ ๋ก๊ทธ ์๊ณ GUI ํ
์คํธ ์ฐฝ ์คํ
gedit memo.txt # GUI ํ
์คํธ ํธ์ง๊ธฐ ์คํ
# ๐ [4] NVIDIA GPU ๊ฐ์ & CUDA ํ์ธ (Windows์ ์ต์ NVIDIA ๋๋ผ์ด๋ฒ๋ง ๊น๋ฉด WSL ๋ด๋ถ ์๋ ํต๊ณผ)
nvidia-smi
```
## 11. ๋ฌธ์ ํด๊ฒฐ(Troubleshooting) ๋ฐ ์์ฃผ ๋ฐ์ํ๋ ์ค๋ฅ
์์ฃผ ๋ง์ฃผ์น๋ ์๋ฌ ์ฝ๋์ ์ฆ์ ํด๊ฒฐํ๋ ์ฒ๋ฐฉ์ ์
๋๋ค.
```powershell
# โ ๏ธ [์ค๋ฅ 1] 0x800701bc (WSL 2 requires an update to its kernel component)
# ์์ธ: Linux ์ปค๋ ํจํค์ง๊ฐ ๊ตฌ๋ฒ์ ์ด๊ฑฐ๋ ๋๋ฝ๋จ
# ํด๊ฒฐ: ์ปค๋ ์
๋ฐ์ดํธ ์คํ
wsl --update
# โ ๏ธ [์ค๋ฅ 2] 0x80370102 (๊ฐ์ํ ์ง์์ด ๋นํ์ฑํ๋์ด ์์ต๋๋ค)
# ์์ธ: ๋ฉ์ธ๋ณด๋ BIOS/UEFI์์ CPU ๊ฐ์ํ(Intel VT-x / AMD SVM) ๋ฏธํ์ฑํ
# ํด๊ฒฐ: BIOS ์ง์
ํ์ฌ CPU Virtualization ํ์ฑํ + Windows ๊ธฐ๋ฅ ํ์ฑํ:
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
# โ ๏ธ [์ค๋ฅ 3] Wsl/Service/CreateInstance/CreateVm/0x80040326
# ์์ธ: Windows ๋น๋๊ฐ ์ค๋๋์๊ฑฐ๋ Hyper-V ๊ด๋ จ ๋๋ผ์ด๋ฒ ์ถฉ๋
# ํด๊ฒฐ: Windows ์ต์ ์
๋ฐ์ดํธ ์ค์น ๋ฐ PowerShell(๊ด๋ฆฌ์)์์ ์๋น์ค ์ฌ์์:
Get-Service LxssManager | Restart-Service
# ๐ [์ค๋ฅ 4] Linux ์ผ๋ฐ ์ฌ์ฉ์ ๊ณ์ ๋น๋ฐ๋ฒํธ๋ฅผ ์์ด๋ฒ๋ ธ์ ๋
# ํด๊ฒฐ: PowerShell์์ root ๊ถํ์ผ๋ก ์ ์ ํ passwd ์ฌ์ค์
wsl -u root
# (Linux ๋ด๋ถ ์ง์
ํ)
passwd <๊ณ์ ์์ด๋>
exit
# ๐ [์ค๋ฅ 5] Linux ๋ด๋ถ์์ ์ธํฐ๋ท/DNS๊ฐ ์ ์กํ ๋ (Temporary failure in name resolution)
# ํด๊ฒฐ: /etc/resolv.conf ์๋ ์ฌ์์ฑ
sudo rm /etc/resolv.conf
sudo bash -c 'echo "nameserver 8.8.8.8" > /etc/resolv.conf'
sudo chattr +i /etc/resolv.conf # ํ์ผ ์์ ๋ฐฉ์ง ์ ๊ธ (์ ํ ์ฌํญ)
```
์๊ฒฌ ๋ฐ ์ง๋ฌธ
0์์ง ๋ฑ๋ก๋ ์๊ฒฌ์ด ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ ๋๊ธ์ ๋จ๊ฒจ๋ณด์ธ์!
๋๊ธ ์์
๋๊ธ ์ญ์