dd (유닉스)
dd (Unix)원저작자 | 켄 톰슨 (AT&T 벨 연구소) |
---|---|
개발자 | 다양한 오픈 소스 및 상용 개발자 |
초기 릴리즈 | 1974년 6월, | 전(
저장소 | coreutils : git.savannah.gnu.org/cgit/coreutils |
기입처 | 플랜 9: C |
운영 체제 | Unix, Unix like, Plan 9, Inferno, Windows |
플랫폼 | 크로스 플랫폼 |
유형 | 명령어 |
면허증. | 코어 유틸리티: GPLv3+ 계획 9: MIT 라이선스 |
dd는 Unix, Plan 9, Inferno 및 Unix와 유사한 운영체제용 명령줄 유틸리티로,[1] 주요 목적은 파일 변환 및 복사입니다.UNIX 에서는, 하드웨어(하드 디스크 드라이브등) 및 특수 디바이스 파일(/dev/zero, /dev/random등)의 디바이스 드라이버가 통상의 파일과 같이 파일 시스템에 표시됩니다.또한 dd는 해당 기능이 해당 드라이버에 구현되어 있는 경우 이러한 파일을 읽거나 쓸 수도 있습니다.그 결과 dd는 하드 드라이브의 부트 섹터를 백업하거나 일정한 양의 랜덤 데이터를 얻는 등의 작업에 사용할 수 있습니다.또한 dd 프로그램은 데이터가 복사될 때 바이트 순서 스왑 및 ASCII 및 EBCDIC 텍스트 인코딩 [2]간 변환 등을 수행할 수 있습니다.
역사
dd라는 이름은 IBM의 JCL([3][4]Job Control Language)에서 볼 수 있는 DD 문을 암시하는 것으로, "Data Definition"[5]의 약자입니다.이 명령어의 구문은 다른 Unix 명령어보다 JCL 문과 매우 유사하며 Eric S가 매우 유사합니다. Raymond는 "인터페이스 디자인은 분명히 장난이었다"[3]고 말합니다.인터페이스는 명령줄 옵션 [6]스타일을 사용하도록 계획 9의 dd 명령으로 재설계되었습니다. dd
드라이브 삭제 [7]기능 때문에 "Disk Destroyer"로 불리기도 합니다.
원래 ASCII와 EBCDIC 사이에서 변환하기 위해 dd는 버전5 [8]Unix에서 처음 등장했습니다.dd 명령어는 1987년 X/Open Portability Guide 제2호부터 지정되어 있습니다.이것은, 단일 UNIX [9]사양의 일부인 IEEE 규격 1003.1-2008(POSIX)에 계승됩니다.
의 버전dd
GNUcoreutils 번들은 Paul Rubin, David MacKenzie 및 Stuart Kemp에 [10]의해 작성되었습니다.이 명령어는 일반적인 GNU Unix 유사 [11]유틸리티의 nativeWin32ports UnxUtils 컬렉션의 일부로 Microsoft Windows용 별도의 패키지로 사용할 수 있습니다.
사용.
dd의 명령줄 구문은 다른 많은 Unix 프로그램과 다릅니다.명령줄 옵션에는 보다 표준적인 -option 값 또는 --option=value 형식이 아닌 option=value 구문을 사용합니다.디폴트로는 dd는 stdin에서 읽고 stdout에 쓰지만 if([9]입력 파일) 및 of(출력 파일) 옵션을 사용하여 변경할 수 있습니다.
dd의 일부 기능은 직접 메모리 액세스 옵션을 구현하는 기능 등 컴퓨터 시스템의 기능에 따라 달라집니다.실행 중인 dd 프로세스에 SIGINFO 신호(Linux의 경우 USR1 신호)를 전송하면 I/O 통계를 표준 오류까지 한 번 인쇄한 후 계속 복사할 수 있습니다.dd는 키보드에서 표준 입력을 읽을 수 있습니다.파일종료(EOF)에 도달하면 dd가 종료됩니다.신호와 EOF는 소프트웨어에 의해 결정됩니다.예를 들어, Windows에 이식된 Unix 툴은 EOF에 따라 다릅니다.Cygwin은Ctrl+(D통상의 Unix EOF) 및 MKS Toolkit은 +(통상의 Windows EOF)를 사용합니다.Z
dd 호출의 표준화되지 않은 부분은 구현에 따라 다릅니다.
출력 메시지
완료되면 dd는 stderr 스트림에 데이터 전송 통계 정보를 출력합니다.형식은 [9]: STDERR POSIX로 표준화되어 있습니다.GNU dd 매뉴얼페이지에는 이 형식이 기재되어 있지 않지만 BSD 매뉴얼에서는 기재되어 있습니다.
"Records in" 및 "Records out" 행은 각각 전송된 전체 블록 수와 부분 블록 수를 나타냅니다. 예를 들어, 물리적 매체가 전체 블록을 읽기 전에 종료되었거나 물리적 오류로 인해 전체 블록을 읽을 수 없었기 때문입니다.
블록 크기
블록은 한 번에 읽기, 쓰기 또는 변환되는 바이트 수를 측정하는 단위입니다.명령줄 옵션은 출력/쓰기(obs)와 비교하여 입력/읽기(ibs)에 다른 블록 크기를 지정할 수 있지만 블록 크기(bs) 옵션은 ibs와 obs를 모두 덮어씁니다.입력 및 출력 블록사이즈의 기본값은 512바이트(디스크의 기존 블록사이즈 및 POSIX가 지정한 "a block" 크기)입니다.복사를 위한 카운트 옵션은 읽기를 위한 건너뛰기 카운트와 쓰기를 위한 탐색 카운트와 마찬가지로 블록 단위로 측정됩니다.변환 조작은 "변환 블록 크기"(cbs)[9]: OPERANDS 의 영향도 받습니다.
블록 크기 옵션에 제공되는 값은 10진수(기본값 10) 정수 바이트 수로 해석됩니다.또한 블록 크기가 바이트보다 큰 단위의 정수임을 나타내는 접미사를 포함할 수도 있습니다.POSIX에서는 512의 경우 서픽스 b(블록) 및 [9]: OPERANDS 1024의 경우 k(키바이트)만 지정합니다.지원되는 추가 서픽스에 따라 구현이 다릅니다. (무료) BSD는 tebibyte, exbibyte, pebibyte,[12] zebibyte 및 yobyte에 소문자 m(메비바이트), g(기바이트) 등을 사용하는 반면 GNU는 MB 및 GB에 사용되는 동일한 유닛에 M과 G를 사용합니다.예를 들어 GNU dd의 경우 bs=16M은 16메비바이트(1677216바이트)의 블록 크기를 나타내고 bs=3kB는 3000바이트를 지정합니다.
또한 일부 구현에서는 x 문자를 블록 크기와 카운트 매개 변수 모두에 대한 곱셈 연산자로 이해하고 있습니다.예를 들어 bs=2x80x18b는 1440KiB 플로피 디스크의 정확한 크기인 2 ×80 × 18 × 512 = 1474560 바이트로 해석됩니다.이것은 POSIX에서는 필수이지만 GNU에서는 [9]: OPERANDS 지원되지 않는 것 같습니다.그 결과, POSIX 쉘 산술 구문을 사용하는 것이 보다 휴대성이 뛰어납니다.bs=$((2*80*18))b
.
블록 크기는 dd 명령 복사 성능에 영향을 미칩니다.많은 작은 읽기 또는 쓰기를 수행하는 것이 큰 읽기 또는 쓰기를 적게 수행하는 것보다 느릴 수 있습니다.큰 블록을 사용하면 더 많은 RAM이 필요하며 오류 복구가 복잡해질 수 있습니다.dd를 테이프 드라이브나 네트워크와 같은 가변 블록 크기 장치와 함께 사용할 경우 사용되는 네트워크 프로토콜에 따라 블록 크기에 따라 테이프 레코드 크기 또는 패킷 크기가 결정될 수 있습니다.
사용하다
dd 명령어는 다양한 용도로 사용할 수 있습니다.플레인 복사 명령어에서는 도메인 고유의 대체 명령어보다 느린 경향이 있지만 Unix 파일 [13]API에 대한 상당히 낮은 수준의 인터페이스인 "파일 덮어쓰기 또는 파일 내 검색"을 수행할 수 있는 고유한 기능에 탁월합니다.
다음 예시는 주로 block size 인수에 GNU dd를 사용하는 것을 전제로 하고 있습니다.휴대할 수 있도록 하려면 , 예를 들어 교환합니다. bs=64M
껍데기 산술식으로bs=$((64*1024*1024))
또는bs=$((64 << 20))
(비트 시프트와 동등하게 작성).
data 전송
dd는 파일, 디바이스, 파티션 및 볼륨에 걸쳐 데이터를 복제할 수 있습니다.데이터는 이들 중 하나에서 입력 또는 출력할 수 있지만 파티션으로 이동할 때 출력과 관련하여 중요한 차이가 있습니다.또한 전송 중에는 conv 옵션을 사용하여 미디어에 맞게 데이터를 수정할 수 있습니다(단, dd는 cat보다 느립니다).[13]
dd의 데이터 전송 양식blocks=$(isosize -d 2048 /dev/sr0) | CD-ROM,[14] DVD 또는 Blu-ray 디스크에서 ISO 디스크 이미지를 만듭니다. |
dd if=system.img/dev/sdc bs=64M conv=no error | 이전에 생성된 이미지에서 하드 디스크 드라이브(SD 카드 등)를 복원합니다. |
dd if=/dev/sdb2 of=syslog.image bs=64M conv=no error | 64 MiB 블록사이즈를 사용하여 파티션 sdb2 이미지를 만듭니다. |
dd if=/dev/sdb2 bs=64M conv=no error(오류 없음) | 파티션을 다른 파티션으로 복제합니다. |
dd if=/dev/ad0/dev/ad1 bs=64M conv=no error | 하드 디스크 드라이브 「ad0」을 「ad1」에 클론 합니다. |
no error 옵션은 오류가 발생한 경우에도 계속 진행하는 것을 의미하며, sync 옵션은 출력 블록을 패딩합니다.
일괄 변경
dd는 제자리에 있는 데이터를 수정할 수 있습니다.예를 들어 파일의 첫 번째 512바이트를 늘바이트로 덮어씁니다.
dd if=/dev/zero of=path/to/file bs=syslog count=1 conv=notrunc
notrunc 변환 옵션은 출력 파일을 잘라내지 않음을 의미합니다.즉, 출력 파일이 이미 존재하는 경우 지정된 바이트를 교체하고 나머지 출력 파일은 그대로 둡니다.이 옵션이 없으면 dd는 512바이트 길이의 출력 파일을 만듭니다.
마스터 부트 레코드 백업 및 복원
위의 예를 사용하여 마스터 부트 레코드 등 디바이스의 임의의 영역을 파일에 백업 및 복원할 수도 있습니다.
플로피 디스크의 처음 두 섹터를 복제하려면:
dd if=/dev/syslog0/=MBRboot.img bs=메시지 수=2
디스크 지우기
보안상의 이유로 폐기된 디바이스의 디스크 와이프가 필요할 수 있습니다.이것은, Unix 특수 파일로부터의 「데이터 전송」에 의해서 실현됩니다.
- 디스크에 0을 쓰려면 , 를 사용합니다.
dd if=/dev/zero of=/dev/sda bs=16M
. - 디스크에 랜덤 데이터를 쓰려면
dd if=/dev/urandom of=/dev/sda bs=16M
.
위의 데이터 수정 예와 비교할 때 dd의 출력 파일이 블록 [15]장치일 경우 notrunc 변환 옵션은 효과가 없으므로 필요하지 않습니다.
bs=16M 옵션을 사용하면 dd가 한 번에 16메비바이트를 읽고 쓸 수 있습니다.최신 시스템의 경우 블록 크기가 더 클수록 더 빠를 수 있습니다.랜덤 데이터는 CPU에서 생성해야 하는 반면 0을 생성하는 속도는 매우 빠르기 때문에 드라이브를 0으로 설정하는 것보다 드라이브를 채우는 데 시간이 더 걸릴 수 있습니다.최신 하드 디스크 드라이브에서 드라이브를 제로화하면 드라이브에 포함된 대부분의 데이터를 영구적으로 복구할 [16]수 없게 됩니다.그러나 플래시 메모리와 같은 다른 종류의 드라이브에서는 여전히 데이터 잔량을 통해 많은 데이터를 복구할 수 있습니다.
최신 하드 디스크 드라이브에는 액세스 가능한 부분과 액세스 불가능한 부분을 영구적이고 안전하게 지우도록 설계된 Secure Erase 명령이 포함되어 있습니다.그것은 또한 고체 드라이브(플래시 드라이브)효과적일 수 있다.2017년까지, USB플래시 드라이브나 SD플래시 기억에서 작동되지 않는다.[표창 필요한]수 있는, 이것은 둘 다 빠르게 원격 호스트를 사용하는 것보다 점점 더 강고[표창 필요한]리눅스 기계에 그것은hdparm의--security-erase-enhanced 옵션을 통해서 액세스 할 수 있습니다.
그 바삭하프로그램 다중 overwrites뿐만 아니라 개별 파일의 보다 안전한 삭제를 제공한다.
데이터 복구
데이터 복구 일부로 드라이브 잠재적으로 접근하기 어려운 곳에서 읽는 것을 포함한다. dd
이 직업과의 유연한 줄넘기(을 갖춘 잘 맞습니다.seek
)과 다른 낮은 수준의 설정.바닐라dd
단, 사용자가 에러 메시지를 읽고 읽을 수 있는 영역을 수동으로 계산해야 하기 때문에는 사용하기 어렵습니다.또한 단일 블록 크기는 복구의 세분성을 제한합니다. 더 많은 데이터를 복구하려면 작은 블록을 사용하거나 속도를 높이기 위해 큰 블록을 사용해야 합니다.
라는 이름의 C 프로그램dd_rescue
[17] 1999년 10월에 작성되었습니다.변환 기능을 없앴습니다.dd
는 딜레마에 대처하기 위해 2개의 블록사이즈를 지원합니다.큰 사이즈를 사용한 판독에 실패하면 작은 사이즈로 폴백하여 가능한 한 많은 데이터를 수집합니다.뒤로도 달릴 수 있습니다.2003년에는dd_rhelp
스크립트는 사용 프로세스를 자동화하기 위해 작성되었습니다.dd_rescue
어떤 영역이 [18]읽혔는지 추적합니다.
2004년에 GNU는 다른 유틸리티를 작성했습니다.dd
ddrescue라고 합니다.보다 정교한 동적 블록 크기 알고리즘을 사용하여 내부에서 읽은 내용을 추적합니다.양쪽의 저자dd_rescue
그리고.dd_rhelp
구현보다 [19]우수하다고 생각합니다.새로운 GNU 프로그램을 오래된 스크립트와 구별하기 위해 GNU에 대체 이름을 사용하는 경우가 있습니다.ddrescue
,포함하여addrescue
(freecode.com 및 freshmeat.net의 이름),gddrescue
(데비안 패키지명) 및gnu_ddrescue
(Open SUSE 패키지명).
라고 하는 또 다른 오픈 소스 프로그램savehd7
는 고도의 알고리즘을 사용하지만 자체 프로그래밍 언어 인터프리터를 설치해야 합니다.
드라이브 성능 벤치마킹
드라이브 벤치마크를 테스트하고 1024바이트 블록의 순차적(일반적으로 단일 스레드) 시스템 읽기 및 쓰기 성능을 분석하려면:
- 쓰기 성능:
dd if=/dev/zero bs=1024 count=1000000 of=1GB_file_to_write
- 읽기 성능:
dd if=1GB_file_to_read of=/dev/null bs=1024
랜덤 데이터로 파일 생성
커널 랜덤드라이버를 사용하여 100 랜덤바이트의 파일을 작성하려면 다음 절차를 수행합니다.
dd if=/dev/urandom of=myrandom bs=100 count=1
파일을 대문자로 변환
파일을 대문자로 변환하려면:
dd if=syslog1 conv=ucase, notrunc
진행률 표시기
dd는 주로 필터로 설계된 프로그램이기 때문에 일반적으로 진행률 표시를 제공하지 않습니다.이 문제는 실행 중인 GNU dd 프로세스에 USR1 신호를 전송하여 dd가 현재 전송되는 블록 수를 인쇄함으로써 해결할 수 있습니다.
다음 한 줄에서는 dd-pid가 dd의 process-id로 대체될 때까지 전송이 완료될 때까지 10초마다 진행 상황이 계속 출력됩니다.
kill - USR1 dd-pid ;sleep 10 ;완료
새로운 버전의 GNU dd는 status=syslog 옵션을 지원하므로 stderr로 [20]전송 통계를 정기적으로 인쇄할 수 있습니다.
포크
dcfld
dcfldd는 GNU dd의 포크이며, 당시 미국 국방부 컴퓨터 포렌식 [21][22][23]랩에서 근무하던 Nick Harbour에 의해 개발된 확장 버전입니다.dd에 비해 dcfldd는 여러 출력 파일을 허용하고 동시에 여러 체크섬 계산을 지원하며 파일 매칭을 위한 검증 모드를 제공하며 작업의 진행률을 백분율로 표시할 수 있습니다.마지막 발매는 [24]2021년이었다.
dc3dd
dc3dd는 미국 국방부 사이버범죄센터(DC3)의 또 다른 확장 GNU DD입니다.이는 GNU 업스트림이 업데이트될 때마다 업데이트되는 것을 목표로 하는 dcfldd의 계속으로 볼 수 있습니다.마지막 발매는 [25]2018년이었다.
「 」를 참조해 주세요.
레퍼런스
- ^ Austin Group. "POSIX standard: dd invocation". Retrieved 2016-09-29.
- ^ Chessman, Sam. "How and when to use the dd command?". CodeCoffee. Retrieved 2008-02-19.
- ^ a b Raymond, Eric S. "dd". Retrieved 2008-02-19.
- ^ Ritchie, Dennis (Feb 17, 2004). "Re: origin of the UNIX dd command". Newsgroup: alt.folklore.computers. Usenet: c0s1he$1atuh9$1@ID-156882.news.uni-berlin.de. Retrieved January 10, 2016.
dd was always named after JCL dd cards.
- ^ Shein, Barry (Apr 22, 1990). "Re: etymology of the Unix "dd" command". Newsgroup: alt.folklore.computers. Usenet: 1990Apr22.191928.11180@world.std.com. Retrieved 2016-07-14.
- ^ Plan 9 프로그래머 매뉴얼, 1권 –
- ^ "How to use dd in Linux without destroying your disk". Opensource.com. 2018-07-05. Retrieved 2020-10-11.
- ^ McIlroy, M. D. (1987). A Research Unix reader: annotated excerpts from the Programmer's Manual, 1971–1986 (PDF) (Technical report). CSTR. Bell Labs. 139.
- ^ a b c d e f 단일 UNIX 사양, The Open Group 버전 4 – 셸 및 유틸리티 레퍼런스,
- ^ a b Linux 사용자 매뉴얼– 사용자 명령어 –
- ^ "Native Win32 ports of some GNU utilities". unxutils.sourceforge.net.
- ^ FreeBSD 일반 명령어 매뉴얼 –
- ^ a b Gilles (2011). "cloning - dd vs cat – is dd still relevant these days?". Unix & Linux Stack Exchange.
- ^ "Creating an ISO image from a CD, DVD, or BD". ArchWiki. Retrieved April 18, 2022.
- ^ "linux - Why using conv=notrunc when cloning a disk with dd?". Stack Overflow. 2013-12-11. Retrieved 2014-03-24.
- ^ Wright, Craig S.; Kleiman, Dave; S., Shyaam Sundhar R. (2008). "Overwriting Hard Drive Data: The Great Wiping Controversy". In Sekar, R.; Pujari, Arun K. (eds.). Information Systems Security, 4th International Conference, ICISS 2008, Hyderabad, India, December 16-20, 2008. Proceedings. Lecture Notes in Computer Science. Vol. 5352. Springer. pp. 243–257. doi:10.1007/978-3-540-89862-7_21.
- ^ "dd_rescue". garloff.de.
- ^ LAB Valentin (19 September 2011). "dd_rhelp author's repository".
Important note : For some times, dd_rhelp was the only tool (AFAIK) that did this type of job, but since a few years, it is not true anymore: Antonio Diaz did write a ideal replacement for my tool: GNU 'ddrescue'.
- ^ "Ddrescue - GNU Project - Free Software Foundation (FSF)". gnu.org.
- ^ "GNU Coreutils: dd invocation". The GNU Operating System and the Free Software Movement. Retrieved 2019-08-26.
- ^ "DCFLDD at Source Forge". Source Forge. Retrieved 2013-08-17.
- ^ Jeremy Faircloth, Chris Hurley (2007). Penetration Tester's Open Source Toolkit. Syngress. pp. 470–472. ISBN 9780080556079.
- ^ Jack Wiles, Anthony Reyes (2011). The Best Damn Cybercrime and Digital Forensics Book Period. Syngress. pp. 408–411. ISBN 9780080556086.
- ^ "dcfldd: Enhanced version of dd for forensics and security". GitHub. Retrieved 2020-11-19.
- ^ "dc3dd". SourceForge.
외부 링크

- The Single UNIX Specification, The Open Group 버전4 : 파일 변환 및 복사– Shell and Utilities Reference,
- Plan 9 프로그래머 매뉴얼, 1권 –
- Inferno 일반 명령 설명서 –
- dd: GNU Core Utilities 매뉴얼 페이지
- Darwin 및 macOS 일반 명령어 매뉴얼 –
- dd (Windows용)
- save hd7 – 파손 가능성이 있는 하드디스크 파티션을 저장합니다.
- Softpanorama dd 페이지.
- Linux Questions Wiki에서의 DD.
- 법의학(DD) DCfldd
- ddpt – 블록 디바이스 전용 파일
- sg_dd: SCSI 명령어세트를 사용하는 디바이스용 Linux 전용 바리안트