준비물
SD카드 복제 과정을 위해서는 다음과 같은 준비물이 필요하다.
- 복제 할 SD카드: 내부에 복사 할 내용이 존재
- 새로운 SD카드: 비어있는 새로운 카드거나 포맷하여 새롭게 만들 카드
- SD를 포맷하는 방법은 이전 게시글(우분투 SD카드 포맷)을 확인하자
주의사항
두개의 SD카드는 일반적으로 그 용량이 같아야한다.
- 예를 들어 같은 64GB라고 적혀있는데 제조사가 다르면 세부적인 단위가 달라서 복제에 실패할 가능성이 있다.
구성
SD카드 복제는 다음과 같은 일련의 과정으로 이루어진다.
- 복사하려는 SD카드 디바이스를 이미지파일로 추출
- 덮어 씌워질 새로운 SD카드 장치명 확인.
- SD 카드가 이미 사용 중인 장치라면 포맷
- 새로운 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카드 이미지 생성 명령어와 압축 명령어를 사용한다. noerror
와 sync
명령어는 이미지를 생성하는 과정에서 혹시나 있을 수 있는 읽기오류에 대해 무시하고 읽기에러 발생 시 해당 내용을 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
파일에 비해 확실히 용량이 절약된다. 하지만 그 만큼 압축에 들어가는 시간이 많이 소요된다. 소요시간과 용량을 둘 다 챙기면 좋겠지만 본인의 상황에 맞게 선택하자.
댓글남기기