있는 그대로 보는 세상
사진 찍기를 즐기며 여행을 사랑합니다.
편견없이 세상을 보기 위해 노력하고 있습니다.
2026년 3월 20일 금요일
2025년 9월 4일 목요일
BtrFS에서 드라이브 2개 합치기
개념
물리적으로 분리된 2개의 드라이브를 한 개의 드라이브 처럼 쓰고 싶을 때가 있다. 특히 오래된 노트북에서 적은 용량의 SSD와 HDD가 함께 장착되어 있을 경우 HDD를 SSD로 바꾼 후 그렇게 쓰고 싶은 마음이 무럭무럭 자라게 된다.
보통 이런 목적으로 사용하게 되는 게 LVM 인데 이게 좀 불편하다. 레이어 비슷하게 여러 단계로 나뉜 계층 구조를 따라야 하고 사용하는 명령어도 좀 그렇고...
그래서 좀 찾아보니 BtrFS에서 이렇게 분리된 드라이브를 하나로 합쳐서 1개의 드라이브로 쓸 수 있다고 해서 실험해봤더니 아주 잘 작동한다.
부수적으로 2개의 드라이브에 데이터 블록을 분산해서 실제 억세스 속도도 좋아지는 모양이다.
다만 이렇게 합친 드라이브 중 하나가 깨지면 전체가 깨진다. 이게 좀 불안한 문제이긴 한데 어차피 오늘만 살아가고 있으니 상관 없다.
작업 내용
- 2개의 드라이브가 필요하다.
- 1개의 드라이브에 BtrFS를 사용하는 리눅스를 설치한다. 여기서는 Debian 13 Testing을 사용했다.
- 리눅스로 부팅 후 2번째 드라이브를 1번 드라이브에 추가해준다.
- 잘쓴다.
실제 작업 명령들
sudo btrfs device add /dev/sdb /
/ 디렉토리에다가 2번째 드라이브를 합치는 명령이다. 간혹 강제로 붙이기 위해 -f 옵션을 추가해야 하는 경우도 있다. (내 경우는 늘...)
sudo btrfs device add -f /dev/sdb /
이렇게 붙이고 나면 일단 2개의 드라이브가 하나로 합쳐져서 보이게 된다. 예를 들자면 아래와 같이 분리된 드라이브가 하나로 보인다.
debian ~ $ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sdb 8:0 0 238.5G 0 disk
zram0 254:0 0 7.7G 0 disk [SWAP]
nvme0n1 259:0 0 238.5G 0 disk
├─nvme0n1p1 259:1 0 953M 0 part /boot/efi
└─nvme0n1p2 259:2 0 237.5G 0 part /opt
/tmp
/var
/.snapshots
/home
/
debian ~ $ df -H
파일 시스템 크기 사용 가용 사용% 마운트위치
udev 8.3G 0 8.3G 0% /dev
tmpfs 1.7G 1.8M 1.7G 1% /run
/dev/nvme0n1p2 512G 61G 448G 12% /
tmpfs 8.3G 26M 8.3G 1% /dev/shm
efivarfs 132k 47k 80k 37% /sys/firmware/efi/efivars
tmpfs 5.3M 8.2k 5.3M 1% /run/lock
tmpfs 1.1M 0 1.1M 0% /run/credentials/systemd-journald.service
/dev/nvme0n1p2 512G 61G 448G 12% /home
/dev/nvme0n1p2 512G 61G 448G 12% /.snapshots
/dev/nvme0n1p2 512G 61G 448G 12% /var
/dev/nvme0n1p2 512G 61G 448G 12% /tmp
/dev/nvme0n1p2 512G 61G 448G 12% /opt
/dev/nvme0n1p1 998M 9.2M 989M 1% /boot/efi
tmpfs 1.7G 148k 1.7G 1% /run/user/1000
debian ~ $
lsblk 명령으로 나온 드라이브 장착 상태는 sdb와 nvme0n1p2 등 256GB 드라이브 2개인데 아래 df 명령의 결과 나온 내용을 보면 512GB 1개로 보인다.
실제 사용할 때도 이렇게 1개로 보인다.
위에서 보인 명령어만 쓰면 합치기만 하는 것이고 저장된 데이터를 2개의 드라이브에 분산하려면 다음과 같이 balance 명령도 사용해야 한다. 이 명령을 사용하면 저장된 데이터 블록들을 2개의 드라이브에 분산해서 데이터 억세스 속도를 높여주게 된다.
sudo btrfs balance start --full-balance /
이 작업은 시간이 꽤 걸린다.
어마어마한 개선은 아니라도 좋아진 속도를 체감할 정도는 되는 것 같다.
마지막으로 저장된 파일들의 파편화를 제거하기 위해 디스크 조각 모음을 해주면 끝이다.
sudo btrfs filesystem defrag -r /
여기서 -r 옵션은 재귀적으로 하위 디렉토리 속의 파일들도 조각 모음을 하라는 뜻이다. 저장된 파일의 용량이나 갯수에 따라 진행 시간은 다르다.
이제 끝.
2025년 5월 21일 수요일
systemctl 명령어 정리
WSL을 이용해 이런 저런 실험과 장난을 치다 보면 필연적으로 systemctl 명령을 자주 사용하게 된다.
명령의 옵션이 많은 데 전부 정리하긴 어렵고 자주 쓸만한 것들만 정리한다.
서비스 상태 파악하기
전체 서비스 목록 보기
sudo systemctl
서비스 목록 간단히 보기
sudo systemctl list-unit-files
특정 서비스 활성화 여부 보기
sudo systemctl is-enabled [서비스 이름]
특정 서비스의 현재 작동 여부 보기
sudo systemctl is-active [서비스 이름]
특정 서비스의 현재 상태 보기
sudo systemctl status [서비스 이름]
서비스 시작하고 끝내기
서비스 활성화
sudo systemctl enable [서비스 이름]
서비스 비활성화
sudo systemctl disable [서비스 이름]
서비스 시작
sudo systemctl start [서비스 이름]
서비스 종료
sudo systemctl stop [서비스 이름]
서비스 재시작
sudo systemctl restart [서비스 이름]
서비스 설정 갱신
sudo systemctl reload [서비스 이름]
서비스 전체 설정 갱신
sudo systemctl daemon-reload파일 시스템에 저장된 설정 파일의 변경 사항을 읽고 의존성 트리를 새로 만든다.
2025년 5월 20일 화요일
Windows Powershell에서 WSL의 Docker 사용하기
Windows에서 Docker Desktop을 사용하는 것은 라이선스가 좀 골 아프다. 그러니 그냥 WSL에 설치한 Docker를 Windows에서도 Docker Client를 이용해 사용해보자.
우선 Docker Client를 Windows 쪽에 설치하자.
https://download.docker.com/win/static/stable/x86_64/
이 위치에 접속하면 Docker 버전 별로 Windows용 Client가 있다. 적당한 파일을 다운로드 받고 압축을 풀어서서 Windows의 Path에 포함된 위치에 저장한다.
Windows에 시스템 환경 변수를 하나 추가한다.
DOCKER_HOST
환경 변수의 값은 아래와 같이 설정한다.
tcp://127.0.0.1:2375설정이 끝나면 아래 그림과 같이 된다.
'시스템 속성' 창에서 '환경 변수(N)...' 버튼을 클릭해서 '환경 변수' 창을 열고 환경 변수를 추가한다. 이 화면에서 Path도 추가할 수 있다.
('시스템 속성' 창은 Windows 메뉴에서 검색하면 바로 나온다)
이제 WSL에서 Docker 설정 파일을 수정한다.
sudo vi /usr/lib/systemd/system/docker.service
내용 중 ExecStart 항목을 수정한다.
[Service]
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://127.0.0.1:2375
이제 WSL에서 Docker를 재시작한 후 Windows Powershell에서 Docker 명령을 실행하면 잘된다. 혹시 restart 대신 설정을 데몬에 즉시 반영하게 하려면 아래와 같이 하면 된다.
sudo systemctl daemon-reload
간혹 reload가 제대로 동작하지 않는 경우가 있기는 하니까 확실하게 하려면 reload 후에 restart까지 해버리는 게 편할 때도 있다.
<같은 회사 AA 분에게 배웠다>
2025년 4월 30일 수요일
Windows 11에서 Neovim 설치
- Windows 11 환경에서 Neovim을 설치하고 Copilot을 사용할 수 있게 설정한다.
winget명령을 사용해 Application을 설치하고 업그레이드한다.- WSL2에서 사용하면 훨씬 편한데 왜 이러고 있을까 싶지만 그래도 한다.
Neovim 설치하기
관리자 권한으로 PowerShell 7을 실행한다.
아래 명령으로 neovim을 찾아본다.
winget search Neovim
다음과 같이 입력해서 winget이 Neovim을 설치하게 한다.
winget install Neovim.Neovim
혹시 --source 옵션을 사용해서 원본을 지정하라고 하면 위의 명령에 --source winget 옵션을 추가한다.
winget install Neovim.Neovim --source winget
winget이 자동으로 종속성 검사 후 필요한 추가 패키지를 설치하고 Neovim을 이어서 설치한다.
Path 설정 추가하기
설치 작업이 끝나면 보통 자동으로 Neovim을 사용할 수 있게 되는데 혹시 어떤 이유로 nvim 명령을 찾지 못한다면 Neovim이 설치된 디렉토리를 Path에 추가한다.
[Environment]::SetEnvironmentVariable("Path", $env:Path + "<path>", "User")
위 명령 중 <path> 부분에 추가해주면 된다. 정상적으로 설치되었다면 C:\Program Files\Neovim\bin을 넣어주면 된다.
LazyVim 설치하기
Neovim에서 다양한 Plugin들을 사용할 수 있게 해주는 Plugin이다. 먼저 필요한 프로그램들을 설치한다.
- Microsoft.Git
- burntsushi.ripgrep.MSVC
- sharkdp.fd
- OpenJS.NodeJS
- zig.zig
- 7zip.7zip
- Python.Python.3.13
Python의 경우 버전에 따라 달라지기 때문에 설치하기 전에 아래 명령으로 어떤 버전까지 가능한지 찾아본다.
winget search Python.Python
이 글을 쓰고 있을 때의 최신 버전은 3.13이므로 아래와 같이 설치한다.
winget install Python.Python.3.13
그리고 혹시 필요하다면 PowerShell을 최신 버전으로 설치한다.
- Microsoft.PowerShell
이제 LazyVim을 설치하기 위해 필요한 프로그램들의 설치가 끝났으니 LazyVim의 설치를 시작한다. 먼저 디렉토리를 생성한다.
cd $env:LOCALAPPDATA
mkdir nvim
설치될 디렉토리 생성이 끝났으면 Git을 이용해서 최신 버전을 받아온다.
git clone <https://github.com/LazyVim/starter> $env:LOCALAPPDATA\nvim
불필요한 .git 디렉토리를 삭제한다.
Remove-Item $env:LOCALAPPDATA\nvim\.git -Recurse -Force
이제 설치가 끝났다.
nvim을 시작한 후 :LazyHealth 명령으로 잘 작동하는지 확인할 수 있다.
추가 - Copilot
LazyVim Extra에 들어가면 Copilot과 Copilot-Chat을 설치할 수 있다. 이를 이용하면 Curser 같은 IDE에서 AI의 도움을 받는 것 같은 도움을 받을 수 있다.
추가 - winget 업데이트
winget 명령을 이용하면 Windows에 설치된 Application들의 업데이트를 한 번에 해결할 수 있다. 물론 안되는 것들도 존재한다.
winget update --all
winget을 잘 이용하면 Linux에서 누리던 편리함을 Windows에서도 누릴 수 있다.











