리눅스에서 dd 명령어 사용법

dd는 리눅스에서 가장 중요한 명령어 중 하나로, 주로 하드 디스크와 파티션을 백업하는 데 사용됩니다. 올바르게 사용하면 dd는 한 파티션에서 다른 파티션으로 데이터를 쓰고 파일로 다양한 작업을 수행하는 강력한 도구가 될 수 있습니다. 여기에서는 dd 명령어를 잘 활용하는 방법을 보여드립니다.
목차
- dd의 이야기
- 기본 피연산자
- 디스크 이미지 만들기
- 파티션에 디스크 이미지 저장하기
- 압축된 디스크 이미지 만들기
- 블록 크기 지정하기
- 하드 디스크 지우기
- 부팅 가능한 USB 드라이브 만들기
- dd를 사용하여 특정 파티션 복제하기
- dd를 사용하여 CD 내용 덤프하기
- ISO 덤프를 CD에 굽기
- 자주 묻는 질문
또한 읽어보세요: 설치 및 사용이 더 쉬운 5개의 Arch Linux 배포판
dd의 이야기
이 명령어는 1970년대 AT&T 벨 연구소에서 컴퓨터 과학자 켄 톰슨에 의해 처음 개발되었습니다. 유닉스 기반 시스템을 위해 개발되었으며, IBM의 작업 제어 언어에서 발견된 문구를 참조하여 이름이 지어졌습니다. 명령어의 구문은 작업 제어 언어의 문구와 매우 유사하다는 점이 주목할 만합니다.
이 명령어는 원래 ASCII를 EBCDIC로 변환하고 그 반대의 경우를 위한 유틸리티로 설계되었습니다. 1974년 운영 체제의 5판과 함께 유닉스의 한 버전과 통합되었습니다.
dd는 잘못 사용될 경우 하드 디스크의 데이터를 파괴할 수 있는 능력 때문에 유닉스 커뮤니티에서 “디스크 파괴자”라고 농담으로 불리기도 했습니다.
또한 읽어보세요: Rclone을 사용하여 클라우드에서 파일 암호화하는 방법
기본 피연산자
이제 명령어의 배경과 잘못 사용했을 때의 파괴적인 능력에 대해 조금 알게 되었으니, 다양한 리눅스 배포판 사용자에게 제공하는 모든 것을 활용하는 방법을 배울 시간입니다.
먼저 --help 플래그를 사용하여 매뉴얼을 확인하세요:
dd --help

가장 일반적으로 사용되는 두 개의 피연산자가 있습니다. 그것들은 각각 “입력 파일”과 “출력 파일”을 의미하는 if와 of입니다. if 피연산자는 소스 위치를 나타내는 데 사용되고, of 피연산자는 입력 위치에서 데이터를 저장할 위치를 나타내는 데 사용됩니다.
dd if=<입력 파일> of=<출력 파일>
가장 일반적인 소스 및 출력 위치에는 하드 디스크, 파티션 및 디스크 이미지가 포함됩니다.
명령어를 사용하기 전에 fdisk 유틸리티를 사용하여 시스템의 파티션을 확인하는 것이 도움이 될 수 있습니다. 이는 명령어의 -l 플래그를 사용하여 쉽게 수행할 수 있습니다:
sudo fdisk -l

또한 읽어보세요: 리눅스에서 전체 하드 드라이브를 복제하는 4가지 방법
이 경우 if는 “dev/sda” 드라이브를 나타내고, of는 “dev/sdb” 드라이브를 나타내며, “dev/sda”의 데이터가 여기에 저장됩니다:
dd if=/dev/sda of=/dev/sdb

디스크 이미지 만들기
이 명령어의 가장 좋은 사용 사례 중 하나는 “ .img” 파일 형식으로 디스크 이미지를 만드는 것입니다. 이는 리눅스 기반 시스템에서 데이터를 백업하는 데 매우 유용하며, 전체 하드 디스크를 백업하는 가장 빠르고 쉬운 방법일 가능성이 높습니다.
여기서의 논리는 주로 동일하며, if 피연산자는 “dev/sda” 드라이브를 나타내고 of 피연산자는 “ .img” 파일을 나타내며, 하드 디스크의 데이터가 여기에 저장됩니다:
dd if=/dev/sda of=/tmp/image.img

또한 읽어보세요: Apt 및 Apt-Get 명령어에 대한 궁극적인 가이드
파티션에 디스크 이미지 저장하기
명령어로 디스크 이미지를 만드는 것은 꽤 간단하지만, 그 과정의 반대 버전도 마찬가지입니다.
이 시나리오에서는 디스크 이미지 파일이 입력 파일 역할을 하고, 새로운 파티션이 출력 파일 역할을 합니다. 유틸리티는 디스크 이미지에서 “dev/sdb” 파티션으로 데이터를 저장하고 있습니다:
dd if=/tmp/image.img of=/dev/sdb

또한 읽어보세요: 리눅스에서 ps 명령어를 사용하여 프로세스 종료하기
압축된 디스크 이미지 만들기
전체 크기의 하드 디스크의 디스크 이미지를 만들면 최종 디스크 이미지의 파일 크기가 상당히 클 것이라는 것을 상상할 수 있습니다. 이러한 이유로 dd 유틸리티에는 압축된 디스크 이미지를 생성하는 기능이 있습니다.
압축된 디스크 이미지는 파이프 | 명령어를 사용하여 생성할 수 있습니다. 이 경우 입력 파일의 내용을 가져와 gzip 명령어를 -c 플래그와 함께 수행하여 내용을 “ .gz” 파일로 패키징합니다:
dd if=/dev/sda | gzip -c > /tmp/image.gz

또한 읽어보세요: cURL을 사용하여 명령줄 데이터 전송 및 기타 작업 수행하기
블록 크기 지정하기
dd 명령어의 작업 속도를 조정할 수도 있습니다. 이는 블록 크기를 나타내는 bs 피연산자를 사용하여 수행할 수 있습니다. 블록 크기는 dd가 한 번에 출력 파일에 복사하는 바이트 수를 나타냅니다. 이는 1024바이트의 배수로 표시되며, 기본값은 512바이트로 설정되어 있습니다. 블록 크기가 클수록 데이터가 출력 파일에 더 빠르게 저장됩니다.
이 경우 블록 크기를 2048로 설정하고 있습니다:
dd if=/dev/sda of=/tmp/image.img bs=2048
블록 크기는 킬로바이트로도 지정할 수 있습니다:
dd if=/dev/sda of=/tmp/image.img bs=2K

또한 읽어보세요: 리눅스에서 열린 파일 목록을 나열하기 위해 lsof 명령어 사용하기
하드 디스크 지우기
dd는 하드 디스크를 지우는 데에도 사용할 수 있습니다. 이는 “dev/zero” 또는 “dev/urandom”에서 0 또는 무작위 문자를 읽고 이를 하드 디스크/파티션에 저장하여 데이터를 덮어쓰는 방식으로 수행됩니다. 이는 하드 디스크를 판매하거나 처분한 후 데이터가 쉽게 복구되지 않도록 하려는 경우에 매우 유용합니다.
0으로 하드 디스크 덮어쓰기:
dd if=/dev/zero of=/dev/sdb

무작위 문자를 사용하여 장치를 덮어쓸 수도 있습니다:
dd if=/dev/urandom of=/dev/sdb

또한 읽어보세요: 리눅스에서 백그라운드에서 Bash 명령어 실행하기
부팅 가능한 USB 드라이브 만들기
“ .iso” 파일을 사용하여 부팅 가능한 USB 플래시 드라이브를 만드는 것은 간단합니다:
dd if=os.iso of=

dd를 사용하여 특정 파티션 복제하기
dd의 또 다른 훌륭한 사용법은 리눅스 시스템에서 활성 파티션을 복제하는 것입니다. IMG 파일과 달리 복제는 특정 파티션의 정확한 복사본을 생성하고 즉시 사용할 수 있게 해줍니다. 이는 다중 디스크 설정이 있는 경우 시스템을 위한 중복 파티션을 생성하려는 경우에 유용할 수 있습니다.
“dev/sda4”에서 “dev/sdb1”으로 파티션을 복제합니다.
dd if=/dev/sda4 of=/dev/sdb1 conv=noerror,sync
conv 매개변수는 dd의 동작을 수정하기 위한 추가 옵션을 포함할 수 있게 해줍니다. 이는 파일 이름을 대문자로 변환하는 것처럼 간단할 수도 있고, 블록의 속성을 변경하는 것처럼 복잡할 수도 있습니다. 이 경우, noerror와 sync를 사용하고 있습니다:
- “noerror” 옵션은 dd가 장치 오류를 보고하더라도 장치 파일을 통해 복사를 계속하도록 지시합니다. 이는 파티션이 이미 손상된 장치에 있을 경우 유용할 수 있습니다. “noerror”는 dd가 해당 파티션에서 복구 가능한 모든 데이터를 복사하도록 보장합니다.
- “sync” 옵션은 dd가 복사 버퍼에 들어오는 모든 데이터 블록을 패딩하도록 지시합니다. 이는 dd가 복사할 수 있는 모든 데이터가 소스와 목적지 간에 정확히 동일하도록 보장합니다. 이는 복제하는 파티션 데이터의 무결성을 보장하기 위한 것입니다.

또한 읽어보세요: 리눅스에서 lp 명령어를 사용하여 터미널에서 파일 인쇄하기
dd를 사용하여 CD 내용 덤프하기
dd를 덤프 도구로 사용하여 디스크 내용을 덤프하는 것도 가능합니다. IMG 파일과 유사하게, 입력으로 디스크 드라이브를 사용하고 출력으로 .ISO 확장자를 사용할 수 있습니다. 다음 예를 고려해 보세요:
dd if=/dev/cdrom of=/tmp/dump.iso conv=noerror,sync
이 명령어는 dd에게 CD-ROM 장치를 로드하고 그 내용을 ISO 파일로 복사하도록 지시합니다.

완료되면 file 명령어를 사용하여 덤프된 파일이 ISO 9660 이미지인지 확인할 수 있습니다:
file /tmp/dump.iso
ISO 덤프를 CD에 굽기
다음으로, dd를 사용하여 방금 만든 ISO 파일의 복사본을 생성할 수 있습니다. 이를 위해 드라이브에 빈 디스크를 삽입하고 “dev/cdrom”을 dd의 출력 파일로 사용해야 합니다. 그 후, 다음 명령어를 실행하여 ISO 파일을 디스크에 올바르게 굽습니다:
dd if=/tmp/image.iso of=/dev/cdrom obs=32k seek=0
이 명령어는 오류 우회나 무결성 검사를 시도하지 않습니다. 대신, CD-ROM에 쓰기 전용으로 설정된 두 가지 옵션을 설정합니다:
- “obs” 옵션은 dd가 디스크에 쓸 블록의 크기를 설정합니다. 이 경우, 명령어는 광 미디어 전송의 기준으로 32킬로바이트를 사용합니다.
- 반면에, “seek” 옵션은 dd가 전송을 특정 데이터 블록의 시작으로 설정하도록 지시합니다. CD-ROM에 올바르게 전송하려면 이를 0으로 설정하는 것이 중요합니다. 그래야 dd가 첫 번째 디스크 섹터에 즉시 기록할 수 있습니다.

또한 읽어보세요: 유용하고 흥미로운 Bash 프롬프트 8가지
자주 묻는 질문
dd 작업의 진행 상황을 볼 수 있나요?
네! dd 작업의 진행 상황을 보는 것은 매우 쉽습니다. 이를 위해서는 dd 명령어 끝에 status 매개변수를 포함하기만 하면 됩니다:
dd if=/dev/sda4 of=/dev/sdd1 conv=noerror,sync status=progress
“progress” 옵션은 dd에게 현재 복사 중인 블록을 표준 출력에 인쇄하도록 지시합니다. 이는 명령어의 진행 상황을 확인할 수 있게 해줍니다. “progress” 옵션 외에도 status 매개변수는 두 가지 추가 값을 허용합니다:
- Noxfer: “noxfer” 값은 “progress”와 유사하지만 명령어 끝에 전체 전송 정보를 인쇄하지 않습니다. 이는 dd 명령어를 대규모 UNIX 파이프의 일부로 사용할 때 유용할 수 있습니다.
- None: “none” 값은 dd가 실행 중일 때 오류를 제외한 모든 정보를 인쇄하지 않도록 지시합니다. 이는 현재 활성 파티션에 대한 백업 IMG 파일을 생성하는 것과 같은 예약된 dd 작업을 실행할 때 유용합니다.
항상 높은 블록 크기를 설정하여 전송 속도를 높여도 괜찮나요?
아니요. 높은 블록 크기를 설정하면 dd의 전송 속도가 확실히 빨라지지만, 이렇게 해도 쓰는 장치가 제대로 초기화된다는 보장은 없습니다. 예를 들어, CD-ROM이나 DVD-ROM과 같은 광 미디어에 대해 높은 블록 크기를 설정하면 디스크 플레이어에서 재생할 때 읽을 수 없는 디스크가 발생할 수 있습니다.
좋은 경험 법칙은 디스크 및 플래시 드라이브와 같은 미디어에서 덤프할 때만 높은 블록 크기를 사용하는 것입니다. 또한 최대 블록 크기를 2048킬로바이트로 설정하는 것이 좋습니다. 이렇게 하면 디스크의 내용을 CD 또는 DVD로 다시 배치할 수 있습니다.
부팅 가능한 USB 드라이브를 만들려고 했지만 부팅되지 않았습니다. dd가 작동하지 않나요?
아니요! 부팅되지 않은 가장 가능성이 높은 이유는 dd가 USB 드라이브에 복사한 파일이 부팅 가능한 파일이 아니기 때문입니다. 예를 들어, CD 설치 프로그램을 USB 드라이브에 쓰면 부팅 가능하게 만드는 적절한 플래그가 설정되지 않습니다.
부팅 가능성을 확인하는 한 가지 방법은 file 프로그램을 통해 속성을 확인하는 것입니다. 예를 들어:
file /Downloads/ubuntu-21.10.iso
그곳에서 표준 출력에 인쇄된 속성을 확인해야 합니다. 부팅 가능한 파일은 디스크 이미지 또는 ISO 하이브리드 파일이어야 합니다.
이미지 출처: Unsplash