용량이 큰 이미자 파일을 줄여봅시다. 본 내용은 windows를 기반으로 작성되었습니다.
요약
- 여기서 pishrink.sh를 다운받는다.
- 이미지 파일과 pishrink를 같은 폴더에 놔둔다.
- 윈도우 store에 들어가서 wsl을 검색하고 ubuntu 22를 설치해 준다. (pishrink.sh가 ubuntu에서만 동작)
- 설치가 완료 되면 cmd 창에서 wsl를 입력하여 접속한다.
- 이미지 파일과 pishrink가 있는 곳으로 이동한다.
- 다음과 같은 커멘드를 입력한다.
끝
왜 용량 축소가 필요한가요?
이전 블로그에서 라즈베리파이 커스텀 이미지를 만드는 방법을 알아보았는데요, 이렇게 이미지를 만들면 sd카드 용량에 맞게 이미지가 생성되게 됩니다. 실제로 sd카드에서 사용하는 용량이 적어도 말이죠. 그래서 이번에는 이미지 파일을 압축하는 방법을 한 번 알아보도록 하겠습니다.
Pishrink 사용
라즈베리파이 이미지 압축에는 여러 방식이 있는데요, 여기서는 가장 많이 활용되는 pishrink를 사용하는 방법에 대해 알아보겠습니다.
pishriknk에 대한 자세한 사항은 아래 깃헙에서 확인 할 수 있습니다. pishrink를 사용하는 방법은 쉬운데, 설정이 까다롭습니다.
https://github.com/Drewsif/PiShrink
우선 pishrink.sh를 다운받아줘야 하는데요. 위의 깃헙에서 받거나, 여기를 클릭해서 다운 받을 수 있습니다.
다운받게 되면 파일을 압축할 이미지 파일과 같은 폴더에 놔주세요.
저의 경우 바탕화면-새폴더에 이미지 파일과 pishrink.sh를 같이 두었습니다.
원래 이미지 파일은 30기가 정되 되는 파일입니다.
wsl 설치
안타깝게도 pishrink는 리눅스에서만 동작하는데요, 이를 윈도우에서 쉽게 할 수 있는 방법을 알아보도록 하겠습니다.
가장 간단한것은 윈도우 스토어에서 wsl을 다운받아 설치하는 것입니다. wsl을 설치하게 되면 윈도우에서 우분투를 활용할 수 있게 됩니다. 버튼 몇번 클릭으로 설치까지 되니, 걱정하지 않으셔도 됩니다.
우선 윈도우 "시작"에서 "store"를 검색하여 윈도우 store에 들어가주도록 합시다. 그리고 여기서 wsl을 검색합니다. 그러면 설치 가능한 ubuntu 리스트가 쭈욱 나오는데 여기서 저희는 가장 최신 버전인 22버전을 한 번 설치해 보도록 하겠습니다. (윈도우 버전이 너무 낮으면 설치가 되지 않으니, 업데이트를 해줘야 합니다.)
설치가 완료되면, cmd 창에서 wsl을 입력하거나, "시작"에서 ubuntu 를 검색하여 ubuntu 22를 실행할 수 있습니다.
이제 여기서 pishrink.sh가 있는 위치로 가보도록 하겠습니다.
바탕화면 새폴더까지 가려면 아래 커멘드를 입력하면 됩니다.
일반 윈도우 주소와는 달리 처음에 mnt로 시작하는게 차이입니다.
cd /mnt/c/users/유저명/Desktop/'새 폴더'
그리고 이 폴더에서 아래 커맨드를 입력해 주면 됩니다.
sudo ./pishrink.sh 기존이미지파일.img 새이미지파일.img
저의 경우 기존이미지파일은 test.img 입니다. 새이미지파일은 아무거나 정해주면 됩니다. 새이미지 파일을 입력하지 않아도 되는데, 그러면 기존이미지파일에 덮어쓰기가 됩니다.
실행하면 아래와 같이 진행 상황이 보입니다.
새로생긴 파일은 10기가 정도 감소해서 19gb로 줄어들었습니다.
그런데, sd카드의 남은 용량이 얼마 없는 경우 용량 감소율이 적을 수 있습니다.
혹시 아래와 같은 애러가 발생할 경우 아래 문제 해결을 참고해 주세요.
문제 해결: error: 0x8007019e
설치하고 실행할때 아래와 같은 애러가 발생 할 수 있는데,
Installing, this may take a few minutes...
WslRegisterDistribution failed with error: 0x8007019e
이 경우, 시작에서 "Windows 기능 켜기/끄기"에서 Linux용 하위시스템 체크박스를 해줘야 애러가 발생하지 않는다. 단, 설정을 변경하면 컴퓨터 재부팅을 해줘야 한다.
문제 해결: wsl 버전
pishrink.sh: Gathering data Kernel not configured for semaphores (System V IPC).
Not using udev synchronisation code. Kernel not configured for semaphores (System V IPC).
Not using udev synchronisation code. losetup: cannot find an unused loop device
tune2fs: No such file or directory while trying to open Couldn't find valid filesystem superblock.
tune2fs 1.46.5 (30-Dec-2021) pishrink.sh: ERROR occurred in line 319: tune2fs failed. Unable to shrink this type of image
위와 같은 애러가 뜬다면, wsl2로 바꿔줘야 한다.
cmd에서 wsl -l -v를 실행해보면 아래와 같이 뜰 수 있는데, 이때 아래 커맨드를 입력해주면 된다.
wsl --set-version Ubuntu-22.04 2