준비물

SD카드 복제 과정을 위해서는 다음과 같은 준비물이 필요하다.

  • 복제 할 SD카드: 내부에 복사 할 내용이 존재
  • 새로운 SD카드: 비어있는 새로운 카드거나 포맷하여 새롭게 만들 카드

주의사항

두개의 SD카드는 일반적으로 그 용량이 같아야한다.

  • 예를 들어 같은 64GB라고 적혀있는데 제조사가 다르면 세부적인 단위가 달라서 복제에 실패할 가능성이 있다.

구성

SD카드 복제는 다음과 같은 일련의 과정으로 이루어진다.

  1. 복사하려는 SD카드 디바이스를 이미지파일로 추출
  2. 덮어 씌워질 새로운 SD카드 장치명 확인.
  3. SD 카드가 이미 사용 중인 장치라면 포맷
  4. 새로운 SD카드에 그 이미지파일들을 덮어 씌우기

주로 본인의 사용용도는 임베디드 보드의 OS가 SD카드로 되어있을 때 OS를 백업하고 복제하기 위해 사용한다.

기존 SD 카드 이미지 추출

SD카드를 어댑터를 통해 PC에 연결 후 우선 장치명을 확인해준다. 아래 명령어를 통해 확인한다.

$ sudo fdisk -l

usb 타입의 SD카드 어댑터를 이용해서 PC에 연결했다면 아마도 /dev/sd<?> 의 형식으로 장치명이 설정되어 있을 것이다. 예시는 /dev/sdc 와 같다.

dd 라는 명령어를 이용해서 장치를 이미지 파일로 추출한다. dd 명령어에 관련된 설명은 메뉴얼 페이지나 다른 페이지에 잘 설명되어 있다.

# dd if={복사할장치} of={출력이미지} bs={블록사이즈} status={진행옵션}

$ sudo dd if=/dev/sdc of=~/sd-card-image.img bs=8M status=progress
  • if 옵션은 복사할 대상을 적어준다.
  • of 옵션은 복사되어 쓰여질 경로를 적어준다.
  • bs 옵션은 블록사이즈인데 sd카드가 16GB, 32GB, 64GB 등 더 큰 용량도 존재하는데 블록사이즈가 너무 작으면 이미지 파일로 추출 하는 시간이 너무 오래 걸린다. 적당히 8M를 주었다. 기본값은 512이다.
  • 위 명령어를 입력하면 64GB SD카드 기준으로 적게는 수십 분에서 수 시간까지도 소요되는데 이 진행 과정을 실시간으로 확인하기 위해 옵션으로 status=progress 를 포함 시킬 수 있다. 아래와 같다.

새로운 SD 카드 전처리

우리가 기존 이미지로 추출한 SD카드를 새로운 SD카드에 설치하기 위해 앞선 내용과 같이 장치명을 확인한다. sudo fdisk -l 명령어를 이용해서 장치명을 확인하며 기존의 복제할 SD카드를 제거하고 새로운 SD카드를 꽂았다면 장치명은 /dev/sdc 와 같이 거의 동일할 것이다.

  • 역시 SD카드가 사용 중 이어서 SD카드 포맷을 해야 한다면 SD카드 포맷하기을 참조한다.

이미지 파일 SD카드에 쓰기

SD카드 이미지를 새로운 SD카드에 복제하는 방식은 1번의 이미지 추출과 비슷하다. 아래 명령어를 참조한다.

$ sudo dd if=~/sd-card-image.img of=/dev/sdc bs=16M status=progress

일반적으로 SD카드를 이미지 파일로 추출하는 것보다 이미지 파일을 SD카드에 쓰는 작업이 더 오래걸린다. 그래서 bs 옵션을 앞선 과정보다 크기를 더 크게 준다. 본인은 16M으로 올려주었다. 실시간 과정도 동시에 확인을 위해 status 옵션도 넣어주었다.

용량을 압축하여 복제

SD카드의 크기(64GB, 128GB 등)와 관련해서 해당 용량의 이미지 파일이 스토리지 용량에 부담이 될 수 있다. 그래서 해당 SD카드 이미지를 압축 형식으로 생성하고 다시 SD카드에 복제할 때 압축을 해제하면서 복제할 수 있다.

압축 이미지 생성

기존의 SD카드 이미지 생성 명령어와 압축 명령어를 사용한다. noerrorsync 명령어는 이미지를 생성하는 과정에서 혹시나 있을 수 있는 읽기오류에 대해 무시하고 읽기에러 발생 시 해당 내용을 0으로 채운다.

$ sudo dd if=/dev/sdX conv=sync,noerror bs=8M status=progress | gzip -c > ~/sd-card-image.img.gz

압축된 이미지 SD카드에 복제

이도 이미지 생성과같이 압축해제 명령어를 포함하여 실행한다. 루트 디렉토리에 접근하는 dd 명령어는 sudo 권한으로 실행해야 함을 유의한다.

$ gunzip -c ~/sd-card-image.img.gz | sudo dd of=/dev/sdX bs=16M status=progress

용량과 소요시간

압축된 이미지는 기존 .img 파일에 비해 확실히 용량이 절약된다. 하지만 그 만큼 압축에 들어가는 시간이 많이 소요된다. 소요시간과 용량을 둘 다 챙기면 좋겠지만 본인의 상황에 맞게 선택하자.

Leave a comment