배경
일부 데이터 CD/DVD를 드라이브에 넣지 않고도 나중에 사용할 수 있도록 ISO 파일로 복사하고 있습니다.
온라인에서 프로그램을 찾아보니 다음과 같은 내용이 많이 있었습니다.
미디어를 복사 하려면
cat
다음을 사용하세요.http://www.yolinux.com/TUTORIALS/LinuxTutorialCDBurn.htmlcat /dev/sr0 > image.iso
다음을 사용하여 이 작업을 수행합니다
dd
(분명히 가장 널리 사용됨).http://www.linuxjournal.com/content/archiving-cds-iso-commandlinedd 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
그것들 중 일부를 (이 도구를 사용하여) 테스트했지만 적어도 그것들이 모두 동일해야 하는지는 모르겠습니다.dd
pv
아니요동일한. 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.iso
tee
/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
이것은 완전히 잘못된 것입니다. 다른 사람들dd
과cat
마찬가지로tee
모두 입력에서 바이트를 읽고 출력에 바이트를 씁니다. 바로 여기에 진정한 마법이 있습니다/dev/sr0
. dd
특이한 명령줄 구문이 있으므로 작동 방식을 설명하면 작성된 내용을 설명함으로써 더 많은 기회를 얻을 수 있습니다cat /dev/sr0
.- 사용
dd
더 큰 버퍼 크기를 갖습니다.더 나은 성능이 가능하지만 항상 그런 것은 아닙니다(참조Linux의 일부 벤치마크).
주요 위험 dd
은일부 데이터를 자동으로 건너뛸 수 있습니다.. 패스가 dd
있든 skip
없든 안전하다고 생각하는데 count
, 모든 플랫폼에서 그런 것인지는 잘 모르겠습니다. 하지만 성능 외에는 장점이 없습니다.
pv
따라서 멋진 진행 상황 보고를 원하거나 원하지 않는 경우 cat
이를 사용하십시오 .
답변2
답변3
이 사건에는 몇 가지 흥미로운 사실이 있는데, 특히 다음과 같습니다.
- 방금 내가 받아서 제공한 출력(이번에는 다른 디스크, 정확히 말하면 Xubuntu 15.04 x64 설치 디스크를 사용했습니다)과 두 프로세스 에 대한 체크섬 (
dd
및pv
정확히 똑같다. - 내 생각은
dd
프로세스가 완료된 후 동일한 디스크로 드라이브를 열고 닫은 다음pv
해당 프로세스로 테스트를 완료하는 것입니다. 이렇게 해서 두 프로그램의 동일한 복사본을 얻었습니다. - 나생각하다처음에는 다른 체크섬을 얻었습니다. 어떤 이유로 CD/DVD 드라이브에서 수집된 데이터가 일정 기간 동안 다른 목적(예: 캐싱)으로 "기록"된 것처럼 보였기 때문입니다. 즉, 체크섬 및 기타 작업과 같습니다. 이는 전송보다 훨씬 빠르게 수행됩니다. 구체적인 이유를 아시는 분은 댓글 부탁드립니다.
- 또 다른 사실은
dd
w/ocount=X
매개변수가 디스크 끝에서 올바르게 중지되고pv
(동일한 체크섬)과 동일한 디스크 이미지를 제공한다는 것입니다. 따라서 저에게는dd
w/o 매개변수를 사용하거나 그냥pv
.
따라서 현재로서는 동일한 결과로 CD/DVD 복사를 수행하는 pv
것으로 보입니다.dd