Windows WSL2 에 ext4 드라이브 마운트 방법
이전에 리눅스에서 쓰던 ext4 포맷의 외장 드라이브를 윈도우 11의 wsl2 에 마운트해서 사용하려고 설정한 작업들을 기록합니다. 서브시스템은 debian 13 환경입니다.
Windows WSL2 에 ext4 드라이브 마운트 방법
기존에 2018년 모델 MacMini 에서 Ubuntu 를 사용하고 있었는데, 드라이버 셋팅이 힘들어서 Windows 11 로 교체했다. 그러면서 ext4 포맷으로 사용하던 1T 짜리 SSD 를 어떻게 할까 하다가 wsl2 에 연결해서 사용하면 C 드라이브 공간 문제도 해결하고 Linux 를 주력으로 사용할 수도 있어서 설정을 시작했다.
0. 작업순서
수동 작업
- PowerShell 에서 외장 SSD 드라이브를 mount 하기
- wsl2 에서 SSD 드라이브의 path 를 하위 폴더로 bind 하기
자동 설정
- 윈도우 시동시 자동으로 mount 하도록 작업 스케줄러 설정
- mount 할 때마다 UUID 가 달라져서 path 로 설정해야 함
/etc/fstab에 bind 설정- home 위치에 용도별로 bind 하자 : workspaces, dockers 등..
1. 수동 작업
1-1. SSD 드라이브 mount 하기
- 드라이브를 연결한 상태에서 관리자 권한으로 PowerShell 실행
- wsl 상태를 초기화 하기 위해 shutdown 하자
- mount 대상의 DeviceID 를 확인 (ex:
\\.\PHYSICALDRIVE1) wsl --mount명령으로 mount 하기
1
2
3
4
5
6
7
8
9
10
11
12
13
# 현재 작동중인 wsl 종료
> wsl --shutdown
> wmic diskdrive list brief
DeviceID : \\.\PHYSICALDRIVE1
Model : SHGP31-1000GM
Partitions : 2
Size : 1000202273280
> wsl --mount \\.\PHYSICALDRIVE1 --partition 1 -t ext4
디스크가 '/mnt/wsl/PHYSICALDRIVE1p1'(으)로 탑재되었습니다.
참고: /etc/wsl.conf에서 automount.root 설정을 수정한 경우 위치가 달라집니다.
디스크를 마운트 해제하고 분리하려면 'wsl.exe --unmount \\.\PHYSICALDRIVE1'을(를) 실행합니다.
1-2. WSL2 에서 드라이브의 하위경로를 bind 하기
- wsl 하위시스템(Debian)으로 터미널을 열고
/mnt/wsl밑에 mount 가 잘 되었는지 확인- 또는
lsblk명령어 사용
- 또는
- sudo mount –bind 명령어로 bind 실행
- 잘 연결 되었는지 확인
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ ll /mnt/wsl/PHYSICALDRIVE1p1
$ lsblk
sdd 8:64 0 931.5G 0 disk
└─sdd1 8:65 0 931.5G 0 part /mnt/wsl/PHYSICALDRIVE1p1
# 통채로 연결해 보자
$ sudo mount --bind /mnt/wsl/PHYSICALDRIVE1p1 $HOME/disk
# 잘 되었다
$ ll $HOME/disk/
합계 24
drwxrwxrwx 7 bgmin bgmin 4096 12월 4일 21:05 ./
drwxrwxrwt 5 root root 120 12월 4일 12:40 ../
drwxr-xr-x 2 bgmin bgmin 4096 12월 4일 19:19 downloads/
drwxrwxr-x 5 bgmin bgmin 4096 12월 4일 13:23 public/
2. 자동 설정
2-1. 작업 스케줄러로 자동실행 설정
- 작업 스케줄러(Task Scheduler)를 검색해서 열고
- 작업 만들기(Create Task)를 선택
- 일반(General) 탭에서 작업 이름을 지정하고
- 옵션의 ‘로그온 상태’든 또는 ‘관계 없이’든 상관 없다
- 로그온 관계 없이 실행하도록 할 때는 패스워드를 입력해야 함
- 가장 높은 권한으로 실행(Run with highest privileges)을 체크
- 관리자 권한으로 cmd 를 실행하기 위해 필요하다
- 옵션의 ‘로그온 상태’든 또는 ‘관계 없이’든 상관 없다
- 트리거(Triggers) 탭에서 새로 만들기(New…)를 클릭
- ‘시작 시(At startup)’ 또는 ‘로그온 시(At logon)’를 선택
- 동작(Actions) 탭에서 새로 만들기(New…)를 클릭
- 프로그램/스크립트(Program/script) 필드에
wsl를 입력 - 인수 추가(Add arguments (optional)) 필드에 마운트 명령의 인수를 입력
- ex:
--mount \\.\PHYSICALDRIVE1 --partition 1 -t ext4)
- ex:
- 프로그램/스크립트(Program/script) 필드에
- 일반(General) 탭에서 작업 이름을 지정하고
- 잘 작동하는지 ‘실행’해 보자
- 우선
wsl --shutdown으로 초기화 하자 - 실행 후 wsl 에 SSD 드라이브가 잘 연결되었으면 성공
- 우선
2-2. /etc/fstab 에 bind 설정
$HOME밑에 연결하고 싶은 디렉토리들을 미리 생성- wsl 에서
sudo vi /etc/fstab로 열고 - 필요한 하위 path 들을 HOME 밑에 연결되도록 작성하자
1
2
3
4
5
6
7
8
9
$ mkdir -p $HOME/public
$ mkdir -p $HOME/downloads
$ sudo vi /etc/fstab
# bind from mnt path to local path
/mnt/wsl/PHYSICALDRIVE1p1/downloads /home/bgmin/downloads none bind,defaults,nofail 0 0
/mnt/wsl/PHYSICALDRIVE1p1/public /home/bgmin/public none bind,defaults,nofail 0 0
$ sudo mount -a
- 잘 작동하는지, 윈도우를 재시작 해서 확인하자
- Good! 잘 된다.
3. WSL2 팁
WSL2 네트워크에 대한 방화벽만 비활성화 하기
윈도우 환경에 대한 방화벽은 Windows 보안 으로 관리하고, Linux 시스템에 대한 방화벽은 내부에서 알아서 하도록 비활성화 하고 싶다.
- Windows 검색에서 제어판을 검색해서 열고
- 시스템 및 보안 > Windows Defender 방화벽으로 이동
- 왼쪽 메뉴에서 고급 설정을 클릭
- Windows Defender 방화벽 속성을 클릭
- 공용 프로필 탭으로 이동 (WSL2는 종종 공용 네트워크로 분류됨) 보호된 네트워크 연결에서 사용자 지정을 클릭
- vEthernet 항목의 체크박스를 해제하여 해당 인터페이스만 방화벽 보호에서 제외
- 변경 사항을 적용하려면 PowerShell에서 wsl –shutdown 명령을 실행하여 WSL2 VM을 종료한 후 다시 시작
WSL2 의 network ip 를 Host 와 일치시키기
%USERPROFILE%\.wslconfig생성- wsl2 에 대해 mirrored 모드 설정
- wsl 재시작
1
2
[wsl2]
networkingMode=mirrored
WSL2 에서 jekyll 오류 해결
처음에는 Windows 의 디렉토리를 bind 해서 사용하려고 했는데, 안되겠다. 하라는 대로 wsl 내에다가 설치하는게 맞는거 같다.
WSL 에 ruby 및 jekyll-blog 설치
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# install ruby 3.3
sudo apt-get install ruby-full
sudo apt install -y build-essential libssl-dev libyaml-dev libreadline-dev zlib1g-dev libffi-dev libgmp-dev nodejs
export RUBY_HOME=$HOME/.local/share/gem/ruby/3.3.0
export PATH="$RUBY_HOME/bin:$PATH"
# download blog source
cd workspaces/blog
git clone --depth 1 $GITHUB/maxmin93/maxmin93.github.io
# install jekyll 4.4.1
bundle install
# _config.yml 위치 설정
bundle config path $(pwd)
# build and run
tools/run.sh
이상한 md 파일을 빌드하려고 할 때, config 에서 원본 posts 제외
1
2
3
4
5
6
7
$ tools/run.sh
Error: could not read file $MY_BLOG_HOME/ruby/3.3.0/gems/jekyll-4.4.1/lib/site_template/_posts/0000-00-00-welcome-to-jekyll.markdown.erb: Invalid date '<%= Time.now.strftime('%Y-%m-%d %H:%M:%S %z') %>'
$ vi _config.yml
exclude:
- $MY_BLOG_HOME/ruby/3.3.0/gems/jekyll-4.4.1/lib/site_template/_posts
- ...
라이브러리 설치가 잘못 된 경우
1
2
3
4
5
$ tools/run.sh
Liquid Exception: Liquid syntax error (line 8): Unknown tag 'when' in ruby/3.3.0/gems/liquid-4.0.4/lib/liquid/locales/en.yml
$ rm -rf ruby .bundle
$ bundle install --redownload
설치시 write 권한 문제가 발생한 경우
1
2
3
4
5
$ bundle install
Bundler::PermissionError: There was an error while trying to write to ...
$ sudo chown -R $USER /var/lib/gems/
$ sudo chown -R $USER /usr/local/bin
9. Reviews
- wsl 에 대한 방화벽 비활성화 설정을 했는데 다시 원복되는거 같다
- wsl 에서 개인 NAS 서버에 대한 nfs 연결이 안된다.
- timeout 발생. 뭐가 문제지?
- smb 는 잘 연결된다.
끝! 읽어주셔서 감사합니다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.


