dd

2020년 4월 22일 수정

dd는 파일을 변환하거나 복사하는데 사용하는 CLI 도구다. 근데 주로 SD 카드 이미지를 뜨거나 혹은 이미지를 SD 카드에 쓰거나 할 때 주로 쓰인다. *NIX 전반에서 제공되는 도구로 알고 있지만 이 글은 macOS 환경만 정리한다.

이름은 man 페이지에는 정확한 설명이 안 나오는데, Disk Dump의 약자가 아닐까 유추된다.

SD 카드에서 이미지 덤프하기

주로 SD 카드의 내용을 백업할 때 사용한다.

우선 diskutil로 정확한 디스크 디바이스를 찾아야 한다.

diskutil list

이 결과에서 SD 카드에 해당하는 디바이스를 찾아야 한다. 디바이스 이름은 /dev/diskN 과 같은 방식으로 번호가 붙어 있다.

확인 되었으면 만약을 위해 SD 카드의 마운트를 해제한다.

diskutil unmountDisk /dev/diskN

이제 이미지를 떠 보자.

sudo dd if=/dev/diskN of=/path/to/file bs=1m

각각의 명령은 이런 의미가 있다:

sudo
SD 카드를 읽기 위해서는 루트 권한이 필요하다.
if
입력 위치인데, i가 input의 약자라 생각하자.
of
출력할 위치다. 마찬가지로 o는 output의 약자라 생각할 수 있다.
bs=1m
블록 사이즈(Block Size)가 1MB 단위라는 설정이다. 이 설정은 상황에 따라 다르게 입력해야 할 수도 있다. 덤프한 이미지를 나중에 SD 카드에 다시 써야 할 때 동일한 블록 사이즈를 입력해야 한다는 점도 잘 기억해 두자.

SD 카드라는 이름을 달긴 했지만, 디바이스 파일이 존재하는 모든 스토리지를 대상으로 할 수 있다. 단지 용량이 너무 크면 덤프하는 데 부담되다 보니 SD 카드 이미지를 뜨는데 주로 사용된다.

이미지를 SD 카드에 쓰기

백업한 이미지를 이용해 SD 카드나 특정 스토리지에 동일한 내용을 복제하기 위해 사용한다.

역시 diskutil로 동일하게 디바이스를 알아둔 상황에서 unmountDisk 까지 진행한다. 그 후 아래와 같은 커맨드로 이미지를 SD 카드에 쓸 수 있다.

sudo dd if=/path/to/file of=/dev/diskN bs=1m

의미는 거의 동일한데 if와 of가 서로 바뀌어 있다는 것을 눈치챘다면 쉽게 이해할 수 있는 커맨드다.

bs=1m 옵션은 덤프할 때 사용했던 사이즈와 동일하게 입력해야 한다는 점만 주의하자.

만약 덤프나 이미지 쓰기가 느리다면 macOS에서는 /dev/diskN 대신 /dev/rdiskN 를 사용해 볼 수도 있다. 이상하게 속도가 빠르다.