cat / dd, pv 또는 다른 절차를 사용하여 CD / DVD를 복사하는 것이 더 낫습니까? /dev/sda 나는 그들 모두가 동일해야하는 경우 I합니다 (사용하여

배경

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

나는 인터넷에서 절차를 찾고 있는데 많은 것을 발견했다.

나는 그들 모두가 동일해야하는 경우 I합니다 (사용하여 그 중 일부를 테스트하지만, 모르는 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

도움을 주시면 감사하겠습니다!



답변

다음의 모든 명령은 동일합니다. 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.iso리다이렉션을 반전 시키거나 입력을 잊어 버린 경우에 tee쓸 것입니다 /dev/sr0) 와 같은 대안에 비해 (손상을 입히기 어려운) 찬성 합니다.
    • cat: 실수로 두 파일을 연결할 수 있습니다. 데이터를 쉽게 구제 할 수 있습니다.
    • dd: io가까운 키보드, 그리고 다소 특이한. 에 해당하는 것은 없으며 noclobber, of=아무 것도 행복하게 덮어 씁니다. 리디렉션 구문은 오류가 덜 발생합니다.
    • cp: 실수로 소스와 대상을 바꾸면 장치를 덮어 씁니다 (비 읽기 전용 장치로 가정). 경우 cp다음과 같은 몇 가지 옵션을 호출 -R하거나 -a어떤 사람들은 별칭을 통해 추가, 디바이스 노드 장치가 아닌 컨텐츠를 복사합니다.
  • 추가 기능. 여기에 유용한 추가 기능이있는 도구 중 하나 pv는 강력한보고 옵션입니다.
    그러나 여기서 출력 파일의 크기를 확인하여 복사 한 양을 확인할 수 있습니다.

  • 공연. 이것은 I / O 바운드 프로세스입니다. 성능의 주요 영향은 버퍼 크기입니다. 도구는 소스에서 청크를 읽고 청크를 대상에 기록하고 반복합니다. 청크가 너무 작 으면 컴퓨터는 작업간에 전환하는 데 시간을 소비합니다. 청크가 너무 크면 읽기 및 쓰기 작업을 병렬화 할 수 없습니다. PC의 최적 청크 크기는 일반적으로 약 몇 메가 바이트이지만 OS, 하드웨어 및 컴퓨터의 기타 작업에 따라 크게 달라집니다. 내가 만든 벤치 마크를 , 같은 디스크 내 사본 것을 보여 주었다 리눅스에, 얼마 전에 하드 디스크 복사본 하드 디스크 dd 큰 버퍼 크기와 장점을 가지고 있지만, 크로스 디스크 복사본에 대한 cat어떤 이겼다 dd버퍼 크기.

dd자주 언급 되는 데는 몇 가지 이유가 있습니다 . 성능과는 별도로 특별한 이유는 없습니다.

  • 매우 오래된 유닉스 시스템에서는 일부 텍스트 처리 도구가 이진 데이터를 처리 할 수 ​​없었습니다 ( 내부에서 널 종료 문자열 을 사용 했기 때문에 널 바이트에 문제가있는 경향이있었습니다. 일부 도구는 문자가 7 비트 만 사용하고 그렇지 않은 것으로 가정했습니다). 8 비트 문자 세트를 올바르게 처리하십시오). 나는이 이제까지 문제가 있었다 확실 경우 아니에요 cat(이 같은 더 라인 지향 도구를했다 head, sed등),하지만 사람들이 있기 때문에 텍스트 처리와의 연결의 바이너리 데이터에 그것을 피하기 위해 경향이 있었다. Linux, OSX, * BSD 또는 POSIX 호환 시스템과 같은 최신 시스템에서는 문제가되지 않습니다.
  • 장치와 dd같은 다른 도구에 비해 다소“낮은 수준”이라는 신화가 cat있습니다. 이것은 완전히 거짓 : ddcattee및 다른 모든 읽기는 입력에서 바이트과 출력 바이트를 작성합니다. 진짜 마법은입니다 /dev/sr0.
  • dd는 특이한 명령 줄 구문을 가지고 있으므로 작동 방식을 설명하면 글을 쓰는 것만으로 설명 할 수 있습니다 cat /dev/sr0.
  • dd 큰 버퍼 크기와 함께 사용하면 성능이 향상 될 수 있지만 항상 그런 것은 아닙니다 ( Linux의 일부 벤치 마크 참조 ).

주요 위험 dd일부 데이터를 자동으로 건너 뛸 수 있다는 입니다. 나는 dd안전 skip하거나 count통과되지 않는 한 안전 하다고 생각 하지만 이것이 모든 플랫폼에서 해당되는지 확실하지 않습니다. 그러나 성능을 제외하고는 이점이 없습니다.

pv멋진 진행률 보고서를 원하거나 원하지 않는 경우 에만 사용 하십시오 cat.


답변

이 경우에는 특히 다음과 같은 흥미로운 사실이 있습니다.

  • 난 그냥 내가 가진 출력을 확인했습니다 및 제공 (나는 다른 디스크 이번에 정확히의 분투 15.04 64 설치 디스크를 사용), 두 절차 (로 ddpv) 체크섬은 동일합니다 .
  • dd절차를 마친 후 드라이브를 열고 같은 디스크로 드라이브를 닫은 다음 pv절차를 통해 테스트를 마치는 것이 좋습니다. 그렇게하면서 두 절차 모두 동일한 사본을 얻었습니다.
  • 나는 생각한다 , 따라서, 체크섬과 같은 다른 작업을했다 – 어떤 이유로 들어, CD / DVD 드라이브에서 수집 된 데이터는 (캐시 등) 몇 시간 동안 다른 목적에 “기록”하는 것 때문에 내가 다른 체크섬을 처음 얻었다 전송보다 훨씬 빠르게 만들었습니다. 정확한 원인을 알고 있으면 의견을 말하십시오.
  • 또 사실이다 dd은 / O 승 count=X파라미터는 디스크의 끝에서 올바르게 중지와 같은 디스크 이미지를 제공 pv나 사용하는 것이 더 그래서, (검사 합이 동일한) ddw / 파라미터 O 또는 단지 pv.

그래서, 지금 것 같습니다 pvdd같은 결과와 CD / DVD 복사를 수행 할 수 있습니다.


답변