dd 명령이 디스크에 완전히 쓸 때까지 기다리십시오. 파일에서 부팅

dd 명령을 사용하여 iso 파일에서 부팅 가능한 USB를 만듭니다.

sudo dd if=~/Desktop/ubuntu.iso of=/dev/sdx bs=1M

Enter 키를 누르면 잠시 종료되고 나에게 다음을 제공합니다.

915+0 records in 915+0 records out 959447040 bytes (959 MB) copied,
0.539375 s, 1.8 GB/s

플래시 드라이브가 작동하는 것을 볼 수 있기 때문에 백그라운드에서 실행하는 것과 같습니다. 결국 복사가 중지되고 드라이브를 성공적으로 제거 할 수 있지만 dd 명령은 복사가 완료되기를 기다리지 않는 이유입니다. 왜 백그라운드에서 실행됩니까? 어떻게 기다릴 수 있습니까?



답변

대중적인 믿음에도 불구하고 dd, 완전히 평범한 명령이지만, cat또는 보다 낮은 수준은 아닙니다 cp. 명령은 디스크 캐시에서 읽고 다른 명령과 마찬가지로 디스크 버퍼에 씁니다.

데이터가 실제 미디어에 완전히 기록되도록하려면을 호출해야합니다 sync. 이 명령은 sync모든 출력 버퍼를 디스크로 플러시합니다. 때 sync명령이 반환 데이터를 완벽하게 작성되었습니다.

sudo dd if=~/Desktop/ubuntu.iso of=/dev/sdx bs=1M; sync

sync파일 시스템 마운트 해제는 동일한 작업을 수행하므로 대부분의 경우을 호출 할 필요가 없습니다 . 때 umount당신이 “꺼내기”를 클릭 한 후 확인 메시지를받을 때 명령이 리턴은, 또는 버퍼는 디스크에 기록되어있다. 여기에서는 마운트 된 파일 시스템을 거치지 않고 디스크에 직접 쓰고 있으므로 버퍼를 명시 적으로 플러시해야합니다.

대신 dd에을 사용할 수 있습니다 tee. 여기에는 두 가지 장점이 있습니다. 오타로 인해 소스와 대상을 반전시킬 위험이 적고 약간 빠릅니다 .

<~/Desktop/ubuntu.iso sudo tee /dev/sdx >/dev/null; sync

답변

이 시도:

sudo dd if=~/Desktop/ubuntu.iso of=/dev/sdx conv=fdatasync bs=1m

이 명령 conv=fdatasyncdd특수 옵션을 사용하여 데이터가 물리적 장치에 기록되도록합니다.