Computer >> 컴퓨터 >  >> 시스템 >> Linux

리눅스 dd 명령어 완벽 가이드: 디스크 백업부터 부팅 USB 제작까지

리눅스 dd 명령어 완벽 가이드: 디스크 백업부터 부팅 USB 제작까지

dd는 리눅스에서 가장 강력하고 중요한 명령어 중 하나로, 주로 하드 디스크와 파티션을 백업하는 데 사용됩니다. 올바르게 활용하면 한 파티션의 데이터를 다른 파티션에 기록하거나 파일 관련 다양한 작업을 수행할 수 있는 강력한 도구입니다. 이 글에서는 dd 명령어를 효과적으로 사용하는 방법을 하나씩 살펴보겠습니다.

dd 명령어의 탄생 배경

dd 명령어는 1970년대 AT&T 벨 연구소의 컴퓨터 과학자 켄 톰프슨(Ken Thompson)이 개발했습니다. 유닉스 기반 시스템을 위해 만들어졌으며, 이름은 IBM의 작업 제어 언어(Job Control Language)에 등장하는 "DD"라는 구문을 참조해 지어졌습니다. 흥미롭게도 이 명령어의 문법은 해당 작업 제어 언어의 구문과 매우 유사합니다.

처음에는 ASCII를 EBCDIC으로 변환하거나 그 반대로 변환하는 유틸리티로 설계되었으며, 1974년 유닉스 5판(Fifth Edition)이 출시되면서 운영체제에 처음 통합되었습니다.

잘못 사용하면 하드 디스크의 데이터를 순식간에 파괴할 수 있기 때문에, 유닉스 커뮤니티에서는 dd를 농담 삼아 "disk destroyer(디스크 파괴자)"라고 부르기도 합니다.

기본 오퍼랜드(Operands)

명령어의 배경과 잘못 사용했을 때의 위험성을 알았으니, 이제 다양한 리눅스 배포판에서 dd가 제공하는 기능을 제대로 활용하는 방법을 알아볼 차례입니다.

먼저 --help 플래그로 매뉴얼을 확인해 보세요:

dd --help
리눅스 dd 명령어 완벽 가이드: 디스크 백업부터 부팅 USB 제작까지

dd 명령어에서 가장 많이 사용되는 두 가지 오퍼랜드는 ifof입니다. 각각 "input file(입력 파일)"과 "output file(출력 파일)"을 의미합니다. if는 데이터의 원본 위치를 나타내고, of는 입력 위치의 데이터를 저장할 대상 위치를 나타냅니다.

dd if=<입력 파일> of=<출력 파일>

가장 일반적인 입력·출력 대상으로는 하드 디스크, 파티션, 디스크 이미지 등이 있습니다.

명령어를 실행하기 전에 fdisk 유틸리티로 시스템의 파티션 구성을 미리 확인하는 것이 좋습니다. -l 플래그를 사용하면 간단히 확인할 수 있습니다:

sudo fdisk -l
리눅스 dd 명령어 완벽 가이드: 디스크 백업부터 부팅 USB 제작까지

다음 예시에서 if는 "/dev/sda" 드라이브를, of는 "/dev/sdb" 드라이브를 나타냅니다. 즉, "/dev/sda"의 데이터가 "/dev/sdb"로 복제됩니다:

dd if=/dev/sda of=/dev/sdb
리눅스 dd 명령어 완벽 가이드: 디스크 백업부터 부팅 USB 제작까지

참고로 dd는 진행 상황을 따로 표시하지 않으므로, status=progress 옵션을 추가하면 복사 진행률을 실시간으로 확인할 수 있어 편리합니다.

디스크 이미지 생성하기

dd 명령어의 가장 대표적인 활용 사례 중 하나는 ".img" 형식의 디스크 이미지를 만드는 것입니다. 리눅스 시스템의 데이터를 백업하는 데 매우 유용하며, 전체 하드 디스크를 백업하는 가장 빠르고 간편한 방법이기도 합니다.

논리 구조는 앞서 살펴본 것과 동일합니다. if 오퍼랜드는 "/dev/sda" 드라이브를, of 오퍼랜드는 하드 디스크 데이터가 저장될 ".img" 파일을 나타냅니다:

dd if=/dev/sda of=example.img
리눅스 dd 명령어 완벽 가이드: 디스크 백업부터 부팅 USB 제작까지

디스크 이미지를 파티션에 복원하기

dd로 디스크 이미지를 만드는 것이 간단하듯, 그 반대 과정인 복원 역시 어렵지 않습니다.

이 경우에는 디스크 이미지 파일이 입력 파일이 되고, 새 파티션이 출력 파일이 됩니다. 유틸리티는 디스크 이미지의 데이터를 "/dev/sdb" 파티션에 그대로 기록합니다:

dd if=example.img of=/dev/sdb
리눅스 dd 명령어 완벽 가이드: 디스크 백업부터 부팅 USB 제작까지

압축된 디스크 이미지 만들기

풀 사이즈 하드 디스크의 디스크 이미지를 생성하면 최종 파일 크기가 상당히 커질 수 있습니다. 이런 이유로 dd 유틸리티에는 압축된 디스크 이미지를 생성하는 기능이 마련되어 있습니다.

압축 디스크 이미지는 파이프(|) 명령을 사용해 만들 수 있습니다. 입력 파일의 내용을 가져와 -c 플래그와 함께 gzip 명령을 실행하고, 그 결과를 ".gz" 파일로 패키징하는 방식입니다:

dd if=/dev/sda | gzip -c > image.gz
리눅스 dd 명령어 완벽 가이드: 디스크 백업부터 부팅 USB 제작까지

블록 크기 지정하기

dd 명령어의 작업 속도도 조절할 수 있습니다. 블록 크기를 나타내는 bs 오퍼랜드를 사용하면 됩니다. 블록 크기는 dd가 한 번에 출력 파일로 복사하는 바이트 수를 의미하며, 1024바이트 단위의 배수로 표현되고 기본값은 512바이트입니다. 블록 크기가 클수록 데이터가 출력 파일에 더 빠르게 저장됩니다.

다음은 블록 크기를 2048로 설정한 예시입니다:

dd if=/dev/sda of=example.img bs=2048

블록 크기는 킬로바이트 단위로도 지정할 수 있습니다:

dd if=/dev/sda of=example.img bs=2048K
리눅스 dd 명령어 완벽 가이드: 디스크 백업부터 부팅 USB 제작까지

하드 디스크 완전 삭제하기

dd는 하드 디스크를 완전히 삭제(wipe)하는 데에도 활용할 수 있습니다. "/dev/zero" 또는 "/dev/urandom"에서 0 또는 무작위 문자를 읽어 하드 디스크·파티션에 덮어쓰는 방식으로 기존 데이터를 모두 지웁니다. 하드 디스크를 판매하거나 폐기한 후에도 데이터가 쉽게 복구되지 않도록 보장하고 싶을 때 매우 유용합니다.

0(zero)으로 하드 디스크를 덮어쓰기:

dd if=/dev/zero of=/dev/sdb
리눅스 dd 명령어 완벽 가이드: 디스크 백업부터 부팅 USB 제작까지

무작위 문자로 덮어쓰는 것도 가능합니다. 무작위 데이터를 사용하면 덮어쓰기 여부조차 판별하기 어렵기 때문에 보안성이 더 높습니다:

dd if=/dev/urandom of=/dev/sdb
리눅스 dd 명령어 완벽 가이드: 디스크 백업부터 부팅 USB 제작까지

부팅 가능한 USB 드라이브 만들기

".iso" 파일로 부팅 가능한 USB 플래시 드라이브를 만드는 것도 아주 간단합니다. ISO 이미지를 USB 장치에 그대로 기록하기만 하면 됩니다:

dd if=os.iso of=<USB 드라이브 위치>
리눅스 dd 명령어 완벽 가이드: 디스크 백업부터 부팅 USB 제작까지

마무리

dd 명령어는 하드 드라이브, 파티션, 디스크 이미지 파일과 관련된 거의 모든 작업에서 유용하게 쓰이는 "맥가이버 칼(Swiss Army knife)"이라고 해도 과언이 아닙니다. 단, 대상 장치를 잘못 지정하면 돌이킬 수 없는 데이터 손실이 발생할 수 있으므로 항상 ifof 값을 꼼꼼히 확인해야 합니다. 이 점만 주의한다면, 하드 디스크나 USB 드라이브 완전 삭제부터 압축 백업 생성까지 다양한 작업에 활용할 수 있는 효과적이면서도 사용하기 쉬운 도구입니다.