dd (data duplicator) — 블록 단위 복사와 변환
Linux / 파일 및 디스크 관리 / dd.html
파일이나 장치를 블록 단위로 그대로 복사하고, 변환 옵션으로 이미지·부팅 디스크를 만드는 저수준 도구.
기본 정보
| 명령어 이름 | dd (data duplicator) |
|---|---|
| 한 줄 소개 | 파일이나 장치를 블록 단위로 그대로 복사하고, 변환 옵션으로 이미지·부팅 디스크를 만드는 저수준 도구. |
| 제공 | GNU coreutils (모든 Linux 배포판 기본 탑재) |
| 공식 문서 | https://man7.org/linux/man-pages/man1/dd.1.html |
| 지원 운영체제 | Linux, macOS, BSD, WSL |
| 설치 여부 | 기본 탑재 (별도 설치 불필요) |
| 분류 | 리눅스 파일·디스크 관리 (태그: 디스크, 이미지, 복사, 부팅, 백업) |
이 명령어는 무엇인가?
dd는 입력과 출력을 블록 단위로 읽고 쓰는 명령어입니다. 파일, 파티션, 디스크 장치를 구분하지 않고 바이트 스트림으로 다루기 때문에 이미지 생성과 복제에 널리 쓰입니다.
conv 옵션으로 대소문자 변환, 동기화, 오류 무시 같은 변환을 함께 수행할 수 있으며, 진행 상황을 보여주는 status=progress 옵션으로 대용량 작업의 상태를 확인합니다.
어떤 문제를 해결하는가?
- 디스크 전체를 파일 한 개로 백업하거나 복원할 때.
- 설치 ISO를 USB 메모리에 그대로 기록할 때.
- 파티션 앞부분의 부트 섹터만 따로 보관할 때.
- 더미 파일을 만들어 디스크 쓰기 속도를 측정할 때.
주요 기능
블록 크기 지정
bs 옵션으로 한 번에 읽고 쓰는 블록 크기를 정해 처리량을 조절합니다.
- 활용 상황: 대용량 이미지를 복사할 때
- 얻는 결과: 블록이 커질수록 시스템 콜 횟수가 줄어 속도가 오릅니다
- 제한 사항: 너무 큰 값은 메모리 사용량을 늘립니다
변환 옵션
conv=notrunc, sync, noerror 등으로 쓰기 방식과 오류 처리를 바꿉니다.
- 활용 상황: 기존 파일을 지우지 않고 일부만 덮어쓸 때
- 얻는 결과: notrunc로 파일 뒤쪽 내용을 유지합니다
- 제한 사항: 옵션 조합을 잘못 쓰면 데이터가 손상될 수 있습니다
진행률 표시
status=progress를 붙이면 작업 중인 바이트 수와 속도가 주기적으로 출력됩니다.
- 활용 상황: 수 GB 이미지를 기록할 때
- 얻는 결과: 남은 시간을 가늠할 수 있습니다
- 제한 사항: 일부 오래된 coreutils에서는 지원하지 않습니다
설치 및 실행
설치 여부 확인
which dd
dd --version
coreutils에 포함되어 있어 별도 설치가 필요 없습니다. 경량 컨테이너 이미지처럼 빠져 있다면 배포판 패키지 관리자로 coreutils를 설치합니다.
실제 사용 예제
디스크 이미지 만들기
장치 전체를 파일로 복제합니다. if와 of를 반대로 쓰면 복원이 됩니다.
# Save all of /dev/sdb as an image
dd if=/dev/sdb of=/backup/disk.img bs=4M status=progress
ISO를 USB에 기록
설치 이미지를 USB 장치에 그대로 씁니다. 대상 장치 이름을 반드시 확인해야 합니다.
# Check the target device first
lsblk
sudo dd if=install.iso of=/dev/sdc bs=4M oflag=sync status=progress
테스트 파일 생성
0으로 채운 파일을 만들어 쓰기 성능을 측정합니다.
# Create a 1GB dummy file
dd if=/dev/zero of=/tmp/test.img bs=1M count=1024 status=progress