하면서 계속 이런 생각이 들었어요.
dd if=/dev/sdx of=/dev/sdy
명령이 완료된 후 표시되는 보고서는 다음과 같습니다.
79304319+0 records in
79304319+0 records out
40603811328 bytes (41 GB) copied, 459.645 s, 88.3 MB/s
다음 사이의 가장 느린 속도에 해당하는 속도를 포함합니다.
- 입력 읽기 속도,
- 출력 쓰기 속도,
- 읽기와 쓰기 사이에 무슨 일이 일어나는지,
즉, 읽기 속도가 5MB/s인 USB 드라이브에서 SSD로 데이터를 복사하면 dd
SSD 속도에 관계없이 실제로 5MB/s가 보고됩니다.
실제로 USB 2에 연결된 디스크를 복사하고 있었는데(두 번 확인했으며 설명서에는 연결 속도가 480Mbps인 USB 2.0이라고 나와 있음) 보고된 dd
속도가 65MB/s에서 88MB/s로 증가한 것으로 나타났습니다. 등보다 높은최대 속도 60MB/sUSB 2.0의 경우.
거기서 무슨 일이 일어 났어?
읽기 속도와 쓰기 속도를 더해 속도를 dd
계산합니까 (실제 속도는 약 40MB/s이므로 더 의미가 있음)?
추가 정보: 실험할 수 있는 복제본을 갖기 위해 불량 섹터 수가 증가하는 하드 드라이브의 복사본을 만들고 있습니다. 전체 디스크를 복사한 후 보고된 속도는 실제로 예상보다 높습니다.
3902854784+0 records in
3902854784+0 records out
1998261649408 bytes (2.0 TB) copied, 26040.5 s, 76.7 MB/s
명령이 처음 몇(2~3)GB 동안만 반복된다는 점을 고려하면 다음과 같습니다. 확인해 보니 복사된 디스크가 정확하고 마더보드가 USB 3을 지원하지 않습니다(그리고 추가 USB 3 PCI-e 카드도 없습니다).
hdparm
결과는 더욱 이상합니다.
$ hdparm -tT /dev/md0
/dev/md0:
Timing cached reads: 13498 MB in 2.00 seconds = 6755.77 MB/sec
Timing buffered disk reads: 486 MB in 3.00 seconds = 161.77 MB/sec
$ hdparm -tT /dev/md0
/dev/md0:
Timing cached reads: 15058 MB in 2.00 seconds = 7536.75 MB/sec
Timing buffered disk reads: 418 MB in 3.01 seconds = 138.91 MB/sec
$ hdparm -tT /dev/md0
/dev/md0:
Timing cached reads: 15038 MB in 2.00 seconds = 7527.54 MB/sec
Timing buffered disk reads: 386 MB in 3.01 seconds = 128.38 MB/sec
답변1
oflag=direct
또는 를 지정하지 않는 한 conv=fsync
커널은 데이터를 버퍼링하므로 dd
커널이 마지막 데이터를 수락하자마자(데이터가 드라이브에 도달하기 몇 초 전일 수 있음) 커널은 데이터가 완료된 것으로 간주합니다. 데이터 양이 적은 경우 처리량 추정에 심각한 오류가 발생할 수 있습니다.
답변2
일반적으로 dd
전체 전송에 걸리는 시간을 나타내는 속도는 "데이터 양을 소요 시간으로 나눈 값"입니다. 기본적으로 그것은 당신이 얻어야 할 것과 동일하며 time dd ...
마법은 없습니다.
40603811328 bytes (41 GB) copied, 459.645 s, 88.3 MB/s
40603811328 / 459.645 / 1000 / 1000 = 88.3373
어쩌면 어느 시점에서 dd를 취소하고 다시 시작했을 수도 있습니다. 이때 대부분의 데이터가 캐시되어 캐시가 통계를 엉망으로 만들었습니까? hdparm -tT /dev/disk
실제 주행 속도를 대략적으로 추정 해 볼 수 있습니다 .
USB2의 경우 속도가 정말 의심스럽습니다. 잘못된 장치를 오용하지 마시기 바랍니다.