디스크의 압축 이미지 생성 - 예를 통한 Linux

플래시 드라이브 "/dev/sdc"의 전체 압축 이미지를 만들고 싶다고 가정해 보겠습니다(파티션 테이블과 파티션의 데이터를 포함하여 모든 항목을 백업하려고 함).

장치 "/dev/sdc"도 파일(Linux의 다른 모든 것과 마찬가지로)이므로 gzip 명령에 직접 제공할 수 있습니다. 인수로:

gzip -c /dev/sdc > /path_to_image.gz


또는 stdin 리디렉션을 통해:

gzip </dev/sdc >/path_to_image.gz


이것이 작동하는 동안(실제로 매우 효율적임) 읽기 부분에 dd 명령을 사용하여 좀 더 좋게 만들 수 있습니다.


dd은 디스크 및 이미지 작업에 매우 유용한 도구이지만 작업할 때는 주의해야 합니다. 실수로 입력 및 출력 장치를 전환하면 데이터가 쉽게 손실될 수 있습니다.

원래 이름은 "Data Definition"에서 유래했지만, 그런 이유로 "Disk Destroyer"라고도 합니다. :)

dd를 사용하도록 원래 예제를 변경해 보겠습니다.

dd if=/dev/sdc bs=128K status=progress | gzip -c >/path_to_image.gz


  • if은 "입력 파일"을 의미합니다. 이것은 앞서 언급한 "모든 것이 파일이다"철학을 의미합니다. 파일이 장치 파일이거나 파일 시스템의 일반 파일인 경우 모든 것이 투명하게 동일한 방식으로 작동합니다.
  • status=progress은 dd에게 좋은 진행 상태를 보여주라고 지시합니다(읽기 부분의 경우).

  • 또한 성능상의 이유로 128K의 블록 크기를 사용하고 있습니다. dd는 주로 역사적 이유로 512바이트의 기본 블록 크기를 갖지만 여기에는 또 다른 이유가 있습니다.

    읽기 오류



    장치에 오류가 있는 경우 다음과 같은 메시지가 표시될 수 있습니다.

    dd: error reading ‘/dev/sdc’: Input/output error
    


    여전히 그러한 장치의 이미지를 만들고 싶다면 다음과 같이 하는 것이 좋습니다.

    dd if=/dev/sdc conv=noerror,sync iflag=fullblock > /path_to_image.gz
    


    이에 대한 자세한 내용이 포함된 새 게시물을 작성할 예정이지만 지금은 주의하지 않으면 전체 블록이 엉망이 될 수 있음을 기억하십시오(더 큰 블록 크기는 많은 데이터가 될 수 있음).

    기본적으로 conv=noerror,sync은 dd에게 오류를 계속 읽고 블록에 0을 추가하도록 지시하여 데이터 오프셋이 동기화된 상태를 유지하도록 합니다.
    iflag=fullblock은 튜토리얼에서 본 적이 없지만 내 경험상 읽기 오류에서 조기에 반환되는 read() 호출로 인해 더 작은 이미지로 끝나지 않는 것이 매우 중요합니다.

    장치에 오류가 있는 경우 이 플래그 조합이 최상의 결과를 제공합니다. 내 경험상 결과는 ddrescue(이러한 시나리오에서 사용할 수 있는 또 다른 도구)과 매우 유사했습니다.

    파티션 백업



    파티션 백업은 정확히 같은 방식으로 작동합니다. "/dev/sdc"를 파티션으로 바꾸십시오.

    dd if=/dev/sdc1 bs=128K status=progress | gzip -c >/path_to_image.gz
    


    이미지 복원



    이미지 복원을 위해 dd 을 사용할 수 있지만 이번에는 "출력 파일"인수(of)를 사용합니다.

    gunzip -c /path_to_image.gz | dd of=/dev/sdc
    


    ssh를 통해 다른 시스템에 백업



    로컬 파일에 쓰는 대신 ssh를 통해 스트림을 쉽게 파이프할 수 있습니다.

    dd if=/dev/sdc bs=128K status=progress | gzip | ssh myhost "dd of =/path_to_image.gz"
    


    ssh를 통해 이미지 복원



    물론 로컬 시스템에서 원격 이미지를 복원할 수도 있습니다.

    ssh myhost "gunzip -c /path_to_image.gz" | dd of=/dev/sdc
    


    또는 반대로 - 원격 시스템에서 로컬 이미지를 복원합니다.

    gunzip -c /path_to_image.gz | ssh myhost "dd of=/dev/sdc"
    




    참고: 이것은 BetterWays.dev: Linux by Example 시리즈의 위키 기사입니다. 여기에서 최신(더 나은 형식의 버전)을 찾을 수 있습니다: https://betterways.dev/linux-creating-a-compressed-image-of-a-disk. 이 유형의 게시물이 흥미롭다면 알려주세요(반응 및/또는 포함) 코멘트).

    좋은 웹페이지 즐겨찾기