cat / dd, pv 또는 다른 절차를 사용하여 CD / DVD를 복사하는 것이 더 낫습니까?


22

배경

드라이브에서 필요없이 나중에 사용할 수 있도록 일부 데이터 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

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

linux  dd  cat  disk-image  pv 

파일 크기가 동일합니까? 결과 cmp file1 file2? dd잘못 사용 했습니까 count=(또는 실제로 모든 것을 원한다면 필요하지 않은 수는 없습니까?). dmesg에서 오류를 읽습니까?
frostschutz

2
크기가 다른 파일 (확률 99.9999999999 + %)에 다른 체크섬이 있다는 것은 말할 필요도 없습니다. 테스트를 수행하는 한 (1) 사용한 정확한 dd명령 (어떤 블록 크기? 카운트입니까?), (2) 크기 및 체크섬 을 포함하여 모든 결과를 게시하는 것이 좋습니다. 모든 출력 및 (3) 소스 광 디스크의 데이터 양에 관한 독립 정보. ... ... ... ... ... ... 왜 PS를 사용하는 count=dd? 전체 디스크 이미지를 복사하고 싶습니까?  count="이 많은 것을 복사 한 다음 멈추십시오"라고 말합니다.
Scott

@Scott이 페이지 linuxjournal.com/content/archiving-cds-iso-commandline 에서 저자는 isoinfo -d -i /dev/cdrom카운트 수를 알고 사용해야한다고 말하고 있습니다 dd. 실제로는 사용하지 말아야합니다 . "어쨌든 해당 CD의 적절한 ISO 이미지를 원한다면 이미지를 만들기 전에 블록 크기와 블록 수를 정확하게 알아야합니다."

@frostschutz 첫 번째 경우 크기는 같지 않았지만 놀랍게도 다시 시도하고 다른 결과를 얻었습니다. 자세한 내용은 내가 제공 한 답변을 참조하십시오.

답변:


27

다음의 모든 명령은 동일합니다. 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.


이 답변을 작성해 주셔서 감사합니다. =) 이제 나는 그들 사이의 차이점을 이해합니다. 그냥 질문 : 그 pv < /dev/sr0 > image.iso와 같은 pv /dev/sr0 > image.iso(후자는 태양 광 발전의 매뉴얼 페이지에서 찾을 수 있습니다)?

1
@ JBFWP286 같은 것을 복사하지만 pv /dev/sr0 …진행률 보고서에 파일 이름을 포함시킬 수는 있지만 포함 pv </dev/sr0할 수는 없습니다.
Gilles 'SO- 악마 그만해'

또 다른 메모 : cp로 별칭을 지정할 수 있습니다 cp -R(최소한 GNU cp에서는 루트로) 하여 내용이 아닌 장치 노드cp 를 복사합니다 .
marcelm

2
@ JBFWP286 장치 노드 는 커널 드라이버가 제공하는 하드웨어 또는 기타 특수 기능에 액세스 할 수있는 파일입니다. 거의 모든 파일 /dev은 장치 노드입니다. 예를 들어 , CD에 들어있는 CD의 내용을 포함하는 일반 파일 대신 CD 드라이브에 액세스 cp -R /dev/sr0 image.iso할 수 image.iso있는 파일을 만듭니다 . /dev/sr0cp /dev/sr0 image.iso
Gilles 'SO- 악 그만

1
@Hashim 나는 그것이 더 나은 성능을 가지고 있다고 결론을 내리지 않습니다 . 나는 때때로 더 나은 성능을 가지고 있다고 언급했다 . 가장 좋은 경우에 - 나는 내가 만든 벤치 마크에 연결 한 dd박자 cat만 약간의 차이로.
Gilles 'SO- 악마 그만해'8

4

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

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.