dd
100%

장치 · 레슨 7

dd

`dd`가 블록 스트림을 복사하는 방식과 파괴적인 입력, 출력 및 크기 실수를 방지하는 방법을 알아봅니다.

dd는 요청된 블록 크기와 변환을 적용하면서 입력 스트림의 데이터를 출력 스트림으로 복사합니다. 파일 시스템, 파티션 경계 또는 출력 대상에 중요한 데이터가 있는지를 이해하지 못합니다. 이 때문에 이미지와 원시 장치에 유용하지만 대상을 잘못 지정하면 즉시 파괴적인 도구가 됩니다.

입력, 출력 및 블록 크기

명령은 일반적으로 다음과 같은 형태입니다.

$ dd if=input.img of=output.img bs=4M status=progress
  • if=는 입력을 선택합니다. 생략하면 dd가 표준 입력을 읽습니다.
  • of=는 출력을 선택합니다. 생략하면 dd가 표준 출력에 씁니다.
  • bs=는 일반 복사에서 입력 및 출력 블록 크기를 설정합니다.
  • status=progress는 GNU dd에 주기적인 전송 진행률 보고를 요청합니다.

dd는 블록을 복사하며 본질적으로 한 번에 한 바이트씩 복사하는 것은 아닙니다. bs를 크게 하면 시스템 호출 오버헤드를 줄일 수 있지만 최적값은 장치, 정렬, 캐싱 및 작업 부하에 따라 달라집니다. 복사되는 논리 데이터 자체는 바뀌지 않습니다.

dd가 기록할 대상을 선택하는 피연산자는 무엇입니까?

복사 범위 제한하기

count=는 처리할 입력 블록 수를 제한합니다. 일반 입력 파일의 예는 다음과 같습니다.

$ dd if=source.img of=prefix.img bs=1M count=2 status=progress

이 명령은 각각 최대 1 MiB인 입력 블록 두 개를 요청하므로 최대 2 MiB를 복사합니다. 파이프 같은 스트림에서는 짧은 읽기 때문에 단순한 곱셈 결과와 달라질 수 있습니다. 완전한 입력 블록이 필요할 때 GNU ddiflag=fullblock을 제공합니다. 바이너리 단위와 접미사 구문은 로컬 구현에 따라 구분하십시오.

일반 파일에서 bs=1M count=2가 요청하는 최대 크기는 얼마입니까?

블록 장치에 이미지 쓰기

원시 복원 명령은 다음과 같은 형태일 수 있습니다.

$ sudo dd if=backup.img of=/dev/sdX bs=4M status=progress conv=fsync

/dev/sdX는 의도적으로 사용한 자리표시자이며 그대로 복사해 실행할 명령이 아닙니다. 이를 실제 경로로 바꾸기 전에 다음 사항을 확인하십시오.

  1. 모든 중요한 데이터의 검증된 백업을 유지합니다.
  2. lsblk, udevadm 또는 동등한 도구로 모델, 일련번호, 크기, 전송 방식 및 영구 링크를 확인해 대상을 식별합니다.
  3. 대상 파티션이 마운트되어 있거나 스왑으로 사용되거나 RAID 또는 LVM의 일부이거나 다른 서비스에서 열려 있지 않은지 확인합니다.
  4. 연결 해제, 재부팅 또는 토폴로지 변경 후에는 장치를 다시 확인합니다.
  5. 이미지 크기가 맞으며 전체 장치에 쓰는 것이 정말 의도한 작업인지 확인합니다.

출력 장치는 시작 부분부터 덮어씁니다. ifof를 뒤바꾸거나, 시스템 디스크를 선택하거나, 파티션을 의도했는데 전체 디스크를 사용하면 확인 메시지 없이 데이터가 파괴될 수 있습니다.

원시 장치에 쓰기 전에 모델, 일련번호, 크기 및 사용 상태를 확인해야 하는 가장 중요한 이유는 무엇입니까?

일관된 이미지 만들기

파일 시스템이 변경되는 동안 활성 블록 장치를 읽으면 내부적으로 일관되지 않은 이미지가 만들어질 수 있습니다. 마운트되지 않은 파일 시스템, 애플리케이션 일관성이 보장된 스냅샷 또는 문서화된 동결 및 스냅샷 작업 흐름을 우선 사용하십시오. 데이터베이스와 가상 머신에는 자체적인 정지 절차가 필요할 수 있습니다.

원시 장치 이미지는 파일 시스템 메타데이터와 사용되지 않는 영역을 포함해 블록을 복사하므로 파일 수준 백업보다 훨씬 클 수 있습니다. 또한 원본과 함께 복제본을 마운트하기 전에 변경해야 하는 식별자를 그대로 복제할 수 있습니다.

마운트되어 변경 중인 파일 시스템을 이미지로 만들면 신뢰하기 어려운 이유는 무엇입니까?

완료와 검증

명령이 입출력 오류 없이 끝났다고 해서 의도한 소스와 대상을 선택했거나 이미지를 사용할 수 있다는 사실이 증명되지는 않습니다. 정확한 식별자와 크기를 기록하고, 버퍼링된 출력이 저장 장치에 도달했는지 확인하고, 범위를 적절히 제한한 재읽기 결과 또는 암호학적 해시를 비교하며, 백업 계획에 따라 복구를 테스트하십시오.

SSD, 플래시 변환 계층, 씬 프로비저닝 저장 장치, 스냅샷 또는 재매핑된 섹터에서 dd 덮어쓰기 패스를 보장된 보안 삭제 방법으로 소개하지 마십시오. 장치와 플랫폼이 지원하는 삭제 기능을 명시적인 데이터 폐기 정책과 함께 사용하십시오.

dd의 종료 상태가 0이라는 사실만으로 증명할 수 없는 것은 무엇입니까?

원시 하드웨어를 다루기 전에는 일반 파일이나 폐기 가능한 가상 디스크로만 연습하십시오. 리눅스 파티션과 파일 시스템 관리하기의 파티션 및 파일 시스템 개념이 필수적인 배경을 제공합니다.

레슨 완료

dd 완료

이제 dd를 사용자의 의도를 인식하지 못하는 원시 블록 복사 도구로 이해할 수 있습니다.

  • if, of, bscount를 구분합니다.

  • 영구적인 대상 식별 정보와 모든 활성 사용자를 확인합니다.

  • 일관된 저장 장치 상태에서 이미지를 만듭니다.

  • 복사 후 데이터를 플러시하고 검증하며 복구를 테스트합니다.

  • 원시 장치로의 모든 출력을 잠재적으로 파괴적인 작업으로 취급합니다.

학습 진행 상황 저장

무료 계정을 만들어 이 레슨을 저장하고 어떤 기기에서든 계속 학습하세요.

무료 계정 만들기
장치(으)로 돌아가기