라즈베리파이의 SD카드 내용을 쉽게 Backup 하는 방법

내가 사용중인 라즈베리파이 SD 카드 내용을 보관해야 할때

최근들어 라즈베리파이로 “레트로 게임기” 를 만들면서 드는 생각이 있었습니다. 레트로파이(RetroPie) 로 초기 셋팅에 꽤나 시간이 오래 걸리는데 만약 사용중인 SD카드가 망가진다면 또다시 다소 번거로운 설치 과정을 겪어야 한다는 거지요.

저도 레트로파이 설치 후에 이것저것 셋팅을 하느라 나름 시간이 걸린 듯 한데 게임을 잘 즐기다가 SD카드가 망가져버리면 SD카드에 있던 설정 파일을 포함하여 게임 롬파일이 손상을 입을 수 있습니다. 따라서 “백업”이 어느정도 필요한거 같습니다.

이번 글에서는 레트로파이 뿐만 아니라 SD카드에 저장된 이미지를 한꺼번에 백업하는 방법에 대해 간단히 알아보겠습니다.

백업할 SD카드, 리더기 준비 및 win32diskimager 설치

일단 백업을 진행할 SD카드 및 리더기를 준비합니다.

요건 제가 레트로파이를 설치했던 SD카드 입니다. 16 GB 를 사용중이네요.

SD카드 리더기는 시중에 파는거 아무거나 사용하시면 됩니다. Windows 에서 SD카드가 인식만 잘되면 어떤거라도 상관없습니다.

win32diskimager 가 없다면 위 링크에서 다운로드 하셔서 설치하시면 되겠습니다.

SD 카드 리더기 PC 연결 및 Win32diskimager 실행

SD 카드를 삽입한 리더기를 내 PC에 연결하고 win32diskimager 를 실행시킵니다. win32diskimager 는 반드시 “관리자 권한” 으로 실행시켜야 합니다.

실행을 시킨 후에 백업할 이미지의 저장 경로를 설정해 줍니다.

저는 pie_backup.img 로 설정하였습니다.

그런 다음에 “Read” 버튼을 눌러서 이미지 파일을 생성해주면 됩니다. 다만 64 GB 이상되는 SD 카드는 win32diskimager 로 백업에 오류가 있을 수 있으니 그 이하 용량의 SD카드를 사용하시면 되겠습니다.

그러면 위와 같이 내 SD카드의 데이터가 이미지 파일로 백업이 진행됩니다. 완료가 되면 .img 파일이 생성이 되게 되고 이 img 파일로 복구시 win32diskimager 로 다시 read하여 복구하면 되겠습니다.

완료가 되어 확인해 보니 대략 15 GB 정도의 이미지 파일이 생성이 되었습니다.

백업한 img 파일로 SD 카드에 복사하는 방법은 위 글을 참고하세요.

백업하는건 꽤나 간단하죠? 이후에 SD카드가 망가지면 백업한 이미지 파일로 언제든지 다시 복구할 수 있습니다. 백업을 잘 해놓는게 중요할거 같네요.

SD 카드의 이미지를 백업할 때 이미지 파일 용량 줄이는 방법

win32diskimager 로 라즈베리파이의 SD카드 데이터를 간편하게 백업이 가능합니다. 그런데 win32diskimager 는 SD카드 전체를 이미지 파일로 복사를 하는 것이기 때문에 만약 16 GB SD 카드를 백업하게 되면 이미지 파일 용량이 16 GB가 됩니다.

이렇게 하면 너무 사이즈가 커져 버리고 불필요한 용량을 잡아먹게 됩니다. 꽤나 비효율적인데 백업한 이미지 파일의 사이즈를 줄이는 방법에 대해 소개를 해보도록 하지요.

먼저 img 파일을 줄이기 위해 리눅스가 설치된 PC나 가상머신 혹은 Windows 10 이상에서는 WSL 을 구동해서 리눅스로 이동합니다. (저는 WSL 을 사용하기로 했습니다) 그런다음에 내가 만들어놓은 라즈베리파이 이미지 파일을 리눅스쪽으로 복사해 주세요.

그런 다음에 “sudo fdisk -l “백업된 이미지 파일.img” 을 해서 파티션 정보를 알아둡니다. 여기서 두번째 이미지의 “Start” 섹터를 기입해 둡니다. 전 “532480” 이네요.

다음으로 다음과 같이 입력하여 파티션을 loop0 로 마운트 합니다.

sudo losetup /dev/loop0 "백업 이미지 파일.img" -o $((기입해 놓은 2번째 Start 섹터넘버*512))

저는 이렇게 마운트를 했습니다.

그런 다음에 gparted 를 실행해야 합니다. 만약 gparted 가 없다면 “sudo apt install gparted” 로 설치를 하면 됩니다. 설치를 다했으면 다음과 같이 입력하여 gparted를 실행합니다.

sudo gparted /dev/loop0

그럼 아래와 같이 gparted 가 실행이 됩니다.

여기서 보면 내 SD 카드에서 Used 와 Unused 가 표시가 되죠? 실제로는 6.52 GB 정도를 사용하고 8.22 GB는 사용하지 않는 용량입니다.

사이즈를 최소로 줄이기 위해 상단 메뉴의 “Partition” 을 클릭한다음 “Resize/Mode” 를 클릭해 줍니다.

그런 다음 최소 사이즈에서 대략 3~400 MB 정도 여유있게 더한 사이즈를 적습니다. 그런 다음 “Resize” 를 클릭합니다.

그런 다음 /dev/loop0 를 선택한 후 “Apply All Operations” 를 클릭해 줍니다.

그럼 Shrink 로 파티션을 나누는 작업을 하게 됩니다. 여기서 위의 빨간색 네모 안에 수치를 잘 적어 둡니다. 그런다음 gparted 를 종료하면 됩니다.

sudo losetup -d /dev/loop0
sudo losetup /dev/loop0 "백업 이미지 파일.img" 

그런 다음 리눅스 커맨드로 /dev/loop0 를 해제 해준 다음에 이미지 파일 전체를 마운트 합니다. 다음으로 fdisk 로 /dev/loop0 를 불러옵니다.

sudo fdisk /dev/loop0

그런 다음에 아래 절차로 파티션 삭제 및 생성 을 해주세요.

Welcome to fdisk (util-linux 2.34).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): d
Partition number (1,2, default 2): 2

Partition 2 has been deleted.

Command (m for help): n
Partition type
   p   primary (1 primary, 0 extended, 3 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (2-4, default 2): 2
First sector (2048-31457279, default 2048): 532480
Last sector, +/-sectors or +/-size{K,M,G,T,P} (532480-31457279, default 31457279): +7168000K

Created a new partition 2 of type 'Linux' and of size 6.9 GiB.
Partition #2 contains a ext4 signature.

Do you want to remove the signature? [Y]es/[N]o: n    
Command (m for help): w

fdisk 종료 한 다음에 fdisk 로 loop0 의 섹터값을 다시 확인합니다.

sudo fdisk -l /dev/loop0

fdisk 종료 후 /dev/loop0 마운트 해제를 한 다음 truncate 로 이미지 파일을 잘라 줍니다. 여기서 섹터값은 End 섹터를 적어주면 됩니다.

sudo losetup -d /dev/loop0
truncate -s $(((End섹터 +1)*512)) "백업 이미지 파일.img" 

위 명령어로 loop 를 해제 및 truncate 로 img 파일을 잘라 주세요.

자 확인해 보니 이미지 파일의 크기가 7 GB 대로 줄어든 것을 볼 수 있습니다.

'코드도사(codedosa.com)'에는 쿠팡파트너스 등의 제휴링크가 포함되어 있으며 수수료를 제공받을 수 있습니다.