부팅 디스크를 만들 때 cp 대신 dd를 사용하는 이유는 무엇입니까?

부팅 디스크를 만들 때 cp 대신 dd를 사용하는 이유는 무엇입니까?

dd bs=4M if=archlinux.iso of=/dev/sdx status=progress oflag=syncdo ie 또는 do 의 차이점은 무엇이며 cp archlinux.iso /dev/sdx && sync, 둘 중 하나를 사용해야 하는 이유가 있나요? (dd의 아름다운 진행률 표시줄 외에도)

답변1

차이점 중 하나는 효율성과 속도입니다. 예를 들어, 바이트를 하나씩 가져와 장치에 복사할 수 있습니다 cat.이상적인 구현또는 이전 시스템에서는예를 들어 BSD4:

cat archlinux.iso > /dev/sdx

이러한 구현에서는 cat바이트독립적인. 버퍼가 실제로 관련되어 있지만 이는 느린 프로세스입니다. 최신 cat구현에서는 청크로 읽습니다(아래 참조).

그리고 dd그리고좋아요블록 크기더 빨라질 것입니다.

이는 버퍼 크기(사용자가 제어할 수 없음)와 cp다른 버퍼에서 사용하는 버퍼 크기에 따라 다릅니다. cp효율성은 이상적인 구현 catdd최적의 블록 크기 사이에 있습니다.

실제로는 현대적이지만 시스템이 요구됩니다 cat.cp선호하는 블록 크기:st_blk 크기. 꼭 그렇지는 않다는 점 참고하세요최적의 블록 크기.

비유하자면 한 잔의 내용물을 다른 잔에 붓는 것과 같습니다.

  • 이상화는 cat한 번에 한 방울씩 올 것입니다.

  • dd숟가락이 사용되며 숟가락의 크기를 정확히 정의합니다(시스템 제한).

  • cp현대인은 cat자신의 숟가락을 사용합니다( stat -f -c %s filename그리고 그것이 얼마나 큰지 알려줍니다).

답변2

나는 주로 당신이 언급한 것 때문에 그것을 사용합니다 status=progress. 내가 말할 수 있는 것은, 나는 참을성이 없고 필요합니다.알다:-)

추가하고 작업을 시작하는 것을 잊어버린 경우에도 SIGUSR1 신호를 보낼 수 있으며 현재 I/O 통계를 stderr(리디렉션하지 않는 한 터미널)에 인쇄합니다.

관련 정보