Dd (유닉스)

dd는 파일을 변환하고 복사하는 것이 주 목적인 유닉스 및 유닉스 계열 운영 체제용 명령 줄 유틸리티이다.

유닉스에서 하드웨어와 특수 장치 파일용 장치 드라이버는 파일 시스템에서 마치 일반 파일처럼 나타난다. dd는 기능이 개별 드라이버에서 구현되어 있는 경우 이러한 파일들을 읽거나 기록하는 것이 가능하다. 그러므로 dd는 하드 드라이브의 부팅 섹터를 백업하는 등의 일과 고정된 크기의 랜덤 데이터를 취득하기 위해 사용할 수 있다. dd 프로그램은 복사 시 데이터에 변환을 수행할 수도 있는데, 여기에는 바이트 순서 스와핑, ASCII↔EBCDIC 텍스트 인코딩 변환을 포함할 수 있다.

dd라는 이름은 IBM의 작업 제어 언어(JCL)에서 발견되는 DD 문과 관련되며 여기에서 DD는 "Data Description"을 가리킨다.See this old discussion  이 명령의 문법은 다른 유닉스 명령보다 JCL 문과 유사하다.

원래 ASCII와 EBCDIC 간의 변환을 위해 고안된 dd는 버전 5 유닉스에 처음 등장하였다. dd 명령어는 SUS의 일부인 IEEE 표준 1003.1-2008에 규정되어 있다.

 용도 
dd 명령은 다양한 목적을 위해 쓰일 수 있다.
 데이터 전송 
+dd의 데이터 전송 형태 dd if=/dev/sr0 of=myCD.iso bs=2048 conv=noerror,sync  
CD-ROM으로부터 ISO 디스크 이미지를 생성한다. 일부의 경우 작성된 ISO 이미지는 CD-ROM 기록에 사용되는 것과 동일하지 않을 수도 있다. dd if=system.img of=/dev/sdc bs=4096 conv=noerror  이전에 만든 이미지로부터 하드 디스크 드라이브(또는 SD 카드)를 복원한다. dd if=/dev/sda2 of=/dev/sdb2 bs=4096 conv=noerror  하나의 파티션을 다른 파티션으로 복제한다. dd if=/dev/ad0 of=/dev/ad1 bs=1M conv=noerror  하드 디스크 드라이브 "ad0"을 "ad1"으로 복제한다.

 마스터 부트 레코드 백업 및 복원 
마스터 부트 레코드를 복구할 수 있다. 복구 파일로부터 전송받거나 복구 파일로 전송할 수 있다.

플로피 드라이브의 처음 두 개의 섹터를 복제:
dd if=/dev/fd0 of=MBRboot.img bs=512 count=2

완전한 x86 마스터 부트 레코드의 이미지 만들기 (MS-DOS 파티션, MBR 매직 바이트 포함):
dd if=/dev/sda of=MBR.img bs=512 count=1

마스터 부트 레코드의 부트 코드만의 이미지 만들기 (파티션 테이블 없이, 또 부팅 시 필요한 매직 바이트 없이):
dd if=/dev/sda of=MBR_boot.img bs=446 count=1

 데이터 수정 
dd는 특정 자리의 데이터를 수정할 수 있다. 이를테면 아래의 명령을 통해 파일의 최초 512바이트를 널(null) 바이트로 채울 수 있다:

dd if=/dev/zero of=path/to/file bs=512 count=1 conv=notrunc

notrunc 변환 옵션은 출력 파일을 잘라내지 않는다는 것을 뜻한다. 즉, 출력 파일이 이미 존재하면 지정된 바이트를 대체하되 출력 파일의 나머지 부분만은 남겨둔다. 이 옵션을 사용하지 않으면 dd는 512바이트 길이의 출력 파일을 생성한다.

디스크 이미지 파일로서 특정 디스크 파티션을 다른 파티션에 복제하려면 다음과 같이 실행한다:
dd if=/dev/sdb2 of=partition.image bs=4096 conv=noerror

 디스크 완전 소거 

보안 목적으로 이따금은 버림 받은 장치의 디스크 완전 소거를 할 필요가 있다.

dd를 이용하여 디스크를 0으로 채워 소거하는 방법은 아래와 같다:
dd if=/dev/zero of=/dev/sda bs=4k

다른 방법으로 랜덤 데이터를 채워 소거할 수도 있다:
dd if=/dev/urandom of=/dev/sda bs=4k

 데이터 복구 
파일, 드라이브, 파티션의 데이터 복구 및 복원에 대한 오픈 소스 소프트웨어의 초기 역사에는 GNU dd가 포함되어 있으며, 저작권 고지는 1985년에 시작된다. dd 프로세스 당 하나의 블록 크기를 가지며 특정한 형태의 dd를 실행 중인 사용자의 상호작용 세션까지만 한정하여 복구 알고리즘을 제공하였다. 그 뒤 dd_rescue라는 C 프로그램이 1999년 10월에 작성되어 해당 알고리즘 안에 두 개의 블록 크기를 가질 수 있었다. 그러나 2003년 dd_rescue의 데이터 복구 알고리즘을 강화한 셸 스크립트 dd_rhelp의 저자는 2004년에 처음 출시된 dd와는 무관한 데이터 복구 프로그램인 GNU ddrescue의 사용을 권장하였다.

더 새로운 GNU 프로그램을 더 오래된 스크립트와 구별하기 위해 GNU의 ddrescue와는 다른 이름이 쓰이기도 하는데 여기에는 addrescue (freecode.com, freshmeat.net에서의 이름), gddrescue (데비안 패키지 이름), gnu_ddrescue(오픈수세 패키지 이름)가 포함된다. savehd7이라는 다른 오픈 소스 프로그램은 복잡한 알고리즘을 사용하지만 사용을 위해 자체 프로그래밍 언어 인터프리터의 설치가 필요하다.

 드라이브 성능 벤치마크 
드라이브 벤치마크를 테스트하고, 1024바이트 블록에 대한 순차 시스템 읽기/쓰기 성능을 분석하려면 다음과 같이 진행한다:
dd if=/dev/zero bs=1024 count=1000000 of=file_1GB
dd if=file_1GB of=/dev/null bs=1024

 랜덤 데이터로 파일 생성 
커널 랜덤 드라이버를 이용하여 랜덤 데이터로 이루어진 100바이트의 파일을 채우려면 다음과 같이 진행한다:
dd if=/dev/urandom of=myrandom bs=100 count=1

 파일을 대문자로 변환 
파일을 대문자로 변경하려면 다음과 같이 진행한다:
dd if=filename of=filename1 conv=ucase

 같이 보기 
 백업
 디스크 복제
 유닉스 명령어 목록

 각주 

 외부 링크 

  dd: manual page from the GNU Core Utilities.
  dd for Windows.

분류:디스크 복제
분류:데이터 복구 소프트웨어
분류:하드 디스크 소프트웨어
분류:표준 유닉스 프로그램
분류:유닉스 SUS2008 유틸리티
분류:데이터 소거 소프트웨어