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


13

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 명령은 복사가 완료되기를 기다리지 않는 이유입니다. 왜 백그라운드에서 실행됩니까? 어떻게 기다릴 수 있습니까?


4
시도 했습니까 sync?
choroba

1
@choroba 시스템이 이미 플래시 드라이브에 데이터를 쓰고 있다면 '동기화'를 실행하는 것이 합리적입니까?
Kir Ivlev

나는 확실하지 않다, byt sync는 기다릴지도 모른다.
choroba

2
dd예를 들어 동기화 옵션도 있습니다 conv=fsync. 즉, 나는 그것을 /dev/sd*드라이브 와 함께 사용할 필요가 없었습니다 . 말 그대로 /dev/sdx내 추측을 사용한다면 /dev(ramdisk) 에 쓸모없는 959MB 파일이 있었을 것입니다 ...
frostschutz

1
@frostschutz 플래시 드라이브에 / sdc를 사용했습니다
Kir Ivlev

답변:


21

대중적인 믿음에도 불구하고 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

1
"꺼내기"또는 "안전하게 제거"버튼 / 아이콘은 어떻습니까? "삭제 확인"알림을 보내기 전에 동기화를 호출하지 않습니까?
user68186

1
을 사용하고 싶을 수도 있습니다 sudo tee /dev/sdx >/dev/null. 그렇지 않으면 콘솔 출력에 데이터가 기록되므로 복사 프로세스가 여전히 느려집니다.
Lekensteyn

1
@ user68186 그들은 sync명령을 호출하지 않지만 후드에서 동일한 작업을 수행합니다.
Gilles 'SO- 악한 중지'

5
이 답변은 잘못되었습니다. 하지 않고 conv=fdatasyncdd명령은 영업 이익은 요청에 따라 데이터가 디스크에 기록 될 때까지 완료 기다리지 않습니다. 또한이 sync명령은 동기화 작업을 예약하지만 즉시 반환합니다. 데이터가 디스크에 기록 될 때까지 반환 대기하지 않습니다.
vy32

1
@ vy32 dd는 캐시가 플러시 될 때까지 기다리지 않을 것입니다 conv=fdatasync. 그러나 고대가 아닌 Linux sync에서는 기다리지 않는 것이 잘못되었습니다 . coreutils sync(8)sync(2)syscall을 만드는 것을 볼 수 있습니다 . sync(2)사람이 페이지는 "버전 1.3.20 전에 리눅스 I / O가 돌아 오기 전에 완료 될 때까지 기다립니다하지 않았다."라고 그래서 sync(8)디스크가 쓰기를 인정 (또는 오류가 트리거)까지 반환하지 않습니다.
Anon

13

이 시도:

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

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

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