CD/DVD를 복사하려면 cat, dd, pv 또는 기타 프로그램을 사용하는 것이 더 좋습니까?

CD/DVD를 복사하려면 cat, dd, pv 또는 기타 프로그램을 사용하는 것이 더 좋습니까?

배경

일부 데이터 CD/DVD를 드라이브에 넣지 않고도 나중에 사용할 수 있도록 ISO 파일로 복사하고 있습니다.

온라인에서 프로그램을 찾아보니 다음과 같은 내용이 많이 있었습니다.

  • 미디어를 복사 하려면 cat다음을 사용하세요.http://www.yolinux.com/TUTORIALS/LinuxTutorialCDBurn.html

    cat /dev/sr0 > image.iso
    
  • 다음을 사용하여 이 작업을 수행합니다 dd(분명히 가장 널리 사용됨).http://www.linuxjournal.com/content/archiving-cds-iso-commandline

    dd if=/dev/cdrom bs=blocksize count=count of=/path/to/isoimage.iso
    
  • pv이를 수행하는 데 사용하십시오 . man pv자세한 내용은 참고자료를 참조하십시오. 여기서 발췌한 내용은 다음과 같습니다.

    Taking an image of a disk, skipping errors:
          pv -EE /dev/sda > disk-image.img
    
    Writing an image back to a disk:
          pv disk-image.img > /dev/sda
    
    Zeroing a disk:
          pv < /dev/zero > /dev/sda
    

md5sum그것들 중 일부를 (이 도구를 사용하여) 테스트했지만 적어도 그것들이 모두 동일해야 하는지는 모르겠습니다.ddpv아니요동일한. md5sum각 프로세스를 사용하는 드라이버와 결과 파일은 다음과 같습니다 .

dd 프로세스의 md5:71b676875b0194495060b38f35237c3c

PV 프로그램의 md5:f3524d81fdeeef962b01e1d86e6acc04

편집하다:출력은 주어진 출력이 아닌 다른 CD에서 나온 것입니다. 사실 제가 답변으로 몇 가지 흥미로운 사실을 제공했다는 것을 깨달았습니다.

실제로 각 파일의 크기는은 다르다서로 비교하십시오.

그렇다면 CD/DVD 복사에 가장 적합한 프로그램이 있습니까? 아니면 제가 명령을 잘못 사용한 것입니까?


상황에 대한 추가 정보

지금까지 찾은 프로세스를 확인하기 위해 사용하고 있는 테스트 사례에 대한 추가 정보는 다음과 같습니다.

isoinfo -d i /dev/sr0 산출:https://gist.github.com/JBFWP286/7f50f069dc5d1593ba62#file-isoinfo-output-19-aug-2015

dd미디어를 복사하고 체크섬 및 파일 정보를 출력합니다.https://gist.github.com/JBFWP286/75decda0a67605590d32#file-dd-output-with-md5-and-sha256-19-aug-2015

pv미디어를 복사하고 체크섬 및 파일 정보를 출력합니다.https://gist.github.com/JBFWP286/700a13fe0a2f06ce5e7a#file-pv-output-with-md5-and-sha256-19-aug-2015

어떤 도움이라도 대단히 감사하겠습니다!

답변1

다음 명령은 모두 동일합니다. 그들은 CD의 바이트를 읽고 /dev/sr0이를 image.iso.

cat /dev/sr0 >image.iso
cat </dev/sr0 >image.iso
tee </dev/sr0 >image.iso
dd </dev/sr0 >image.iso
dd if=/dev/cdrom of=image.iso
pv </dev/sr0 >image.iso
cp /dev/sr0 image.iso
tail -c +1 /dev/sr0 >image.iso

왜 다른 것을 사용합니까?

  • 단순한. 예를 들어, cat또는 을 이미 알고 있다면 cp다른 명령을 배울 필요가 없습니다.

  • 견고성. 이것은 단순한 변형입니다. 명령을 변경하면 기능이 변경될 위험은 무엇입니까? 몇 가지 예를 살펴보겠습니다.

    • 리디렉션이 있는 모든 항목: 실수로 잘못된 리디렉션을 받거나 잊어버릴 수 있습니다. 대상은 존재하지 않는 파일로 간주되므로 set -o noclobber아무것도 덮어쓰지 않도록 해야 합니다. 그러나 실수로 쓰는 경우 장치를 덮어쓸 수 있습니다 >/dev/sda(읽기 전용 CD를 사용하면 확실히 위험하지 않습니다). ). 이는 ( 리디렉션을 되돌리거나 입력을 잊어버린 경우 작성합니다 )와 같은 대안 cat /dev/sr0 >image.iso보다 (파괴적인 방식으로 실수하기 어렵습니다) 에 유리합니다 .tee </dev/sr0 >image.isotee/dev/sr0
    • cat: 실수로 두 파일을 연결할 수 있습니다. 이를 통해 데이터를 쉽게 복구할 수 있습니다.
    • dd: 키보드와 매우 가깝고 다소 특이합니다 i. o이에 상응하는 것은 없으며 무엇 noclobber이든 of=행복하게 다룰 것입니다. 리디렉션 구문은 오류가 덜 발생합니다.
    • cp: 실수로 소스와 대상을 바꾸면 장치를 덮어쓰게 됩니다(다시 읽기 전용 장치가 아니라고 가정). 특정 옵션(예: 별칭을 통해 추가한 옵션)과 함께 호출되면 cp장치 내용 대신 장치 노드를 복사합니다.-R-a
  • 추가 기능. 여기서 유용한 추가 기능은 도구 pv에 강력한 보고 옵션이 있다는 것입니다.
    하지만 여기에서는 출력 파일의 크기를 보면 얼마나 많은 콘텐츠가 복사되었는지 확인할 수 있습니다.

  • 성능. 이는 I/O 집약적인 프로세스입니다. 성능에 가장 큰 영향을 미치는 것은 버퍼 크기입니다. 도구는 소스에서 블록을 읽고 대상에 블록을 쓴 후 반복합니다. 청크가 너무 작으면 컴퓨터는 작업 간을 전환하는 데 시간을 소비합니다. 청크가 너무 크면 읽기 및 쓰기 작업을 병렬화할 수 없습니다. PC의 최적 블록 크기는 일반적으로 몇 메가바이트 정도이지만 이는 분명히 운영 체제, 하드웨어 및 컴퓨터가 수행하는 다른 작업에 따라 크게 달라집니다. 내가 그랬어기준얼마 전 Linux에서 하드 디스크 복사를 수행하면 동일한 디스크 내에서 복사하는 경우dd 더 큰 버퍼 크기를 갖습니다.장점이 있지만 디스크 간 복사의 경우 cat모든 dd버퍼 크기보다 뛰어납니다.

dd당신이 자주 언급되는 데에는 몇 가지 이유가 있습니다. 성능을 제외하면 특별히 좋은 이유는 아닙니다.

  • 매우 오래된 Unix 시스템에서는 일부 텍스트 처리 도구가 이진 데이터를 처리할 수 없었습니다.null로 끝나는 문자열내부적으로는 널 바이트 문제가 있는 경향이 있습니다. 일부 도구에서는 문자가 7비트만 사용하고 8비트 문자 세트를 올바르게 처리하지 않는다고 가정합니다. 이것이 문제인지는 잘 모르겠지만 cat(등과 같은 라인 지향 도구에 가깝습니다 head) sed사람들은 텍스트 처리와 관련된 이진 데이터에서는 이를 피하는 경향이 있습니다. 이는 Linux, OSX, *BSD 또는 최신 POSIX 호환 시스템에서는 문제가 되지 않습니다.
  • 장치에 직접 접근하는 등 다른 도구에 비해 dd약간 "낮다" 는 신화가 있습니다. cat이것은 완전히 잘못된 것입니다. 다른 사람들 ddcat마찬가지로 tee모두 입력에서 바이트를 읽고 출력에 바이트를 씁니다. 바로 여기에 진정한 마법이 있습니다 /dev/sr0.
  • dd특이한 명령줄 구문이 있으므로 작동 방식을 설명하면 작성된 내용을 설명함으로써 더 많은 기회를 얻을 수 있습니다 cat /dev/sr0.
  • 사용dd 더 큰 버퍼 크기를 갖습니다.더 나은 성능이 가능하지만 항상 그런 것은 아닙니다(참조Linux의 일부 벤치마크).

주요 위험 dd일부 데이터를 자동으로 건너뛸 수 있습니다.. 패스가 dd있든 skip없든 안전하다고 생각하는데 count, 모든 플랫폼에서 그런 것인지는 잘 모르겠습니다. 하지만 성능 외에는 장점이 없습니다.

pv따라서 멋진 진행 상황 보고를 원하거나 원하지 않는 경우 cat이를 사용하십시오 .

답변2

cat또는 같은 일반적인 도구를 사용하는 대신 읽기 오류에 대해 더 안정적인 도구를 선호해야 합니다 .dd

또한 기본 설정이 ddeg의 설정보다 더 적합합니다.

답변3

이 사건에는 몇 가지 흥미로운 사실이 있는데, 특히 다음과 같습니다.

  • 방금 내가 받아서 제공한 출력(이번에는 다른 디스크, 정확히 말하면 Xubuntu 15.04 x64 설치 디스크를 사용했습니다)과 두 프로세스 에 대한 체크섬 ( ddpv정확히 똑같다.
  • 내 생각은 dd프로세스가 완료된 후 동일한 디스크로 드라이브를 열고 닫은 다음 pv해당 프로세스로 테스트를 완료하는 것입니다. 이렇게 해서 두 프로그램의 동일한 복사본을 얻었습니다.
  • 생각하다처음에는 다른 체크섬을 얻었습니다. 어떤 이유로 CD/DVD 드라이브에서 수집된 데이터가 일정 기간 동안 다른 목적(예: 캐싱)으로 "기록"된 것처럼 보였기 때문입니다. 즉, 체크섬 및 기타 작업과 같습니다. 이는 전송보다 훨씬 빠르게 수행됩니다. 구체적인 이유를 아시는 분은 댓글 부탁드립니다.
  • 또 다른 사실은 ddw/o count=X매개변수가 디스크 끝에서 올바르게 중지되고 pv(동일한 체크섬)과 동일한 디스크 이미지를 제공한다는 것입니다. 따라서 저에게는 ddw/o 매개변수를 사용하거나 그냥 pv.

따라서 현재로서는 동일한 결과로 CD/DVD 복사를 수행하는 pv것으로 보입니다.dd

관련 정보