USB 플래시 드라이브에 dd 쓰기를 하면 대량 읽기가 발생합니다.

USB 플래시 드라이브에 dd 쓰기를 하면 대량 읽기가 발생합니다.

현재 이전에 만든 dd 이미지로 USB 스틱을 복원 중입니다. 그러나 스틱이 일반적으로 훨씬 빠르지만 약 7MB/s 정도의 매우 낮은 쓰기 속도가 나타납니다.

조금 둘러본 후 USB 드라이브에서 많은 데이터를 읽고 있는 것을 발견했는데, 이는 쓰기 성능이 좋지 않음을 설명합니다. 그 당시에는 dd 외에는 아무것도 장치에 액세스하지 않습니다.

편집된 atop줄:

sdd: busy 101% | read 18020 | write 613 | MBr/s 7.04 | MBw/s 7.1

dd를 사용하여 md 배열에 직접 쓸 때 비슷한 동작을 발견했습니다. 그러나 dd를 사용하여 마운트된 파일 시스템에 쓸 때는 이런 일이 발생하지 않습니다.

그래서 내 질문은 블록 장치에 직접 쓸 때 USB 스틱에서 읽는 이유와 쓰기 성능을 향상시키기 위해 이를 방지할 수 있는지 여부입니다.

답변1

따라서 무슨 일이 일어나고 있는지 100% 명확하지는 않지만 USB에 작은 블록(512바이트)을 쓰고 있는 것 같습니다. 그런 다음 dd는 바이트가 제대로 쓰여졌는지 확인합니다. 쓰기, 그리고 읽기와 쓰기.

블록 크기를 "올바른" 크기로 조정하는 것은 쉽지 않지만 이를 수행하는 방법에 대한 몇 가지 경험 법칙이 있습니다. 일반적으로 저는 64kB 블록 크기가 대부분의 측면에서 좋은 절충안이라는 것을 알았습니다. 그러나 이국적인 것을 실행하는 경우(예: ) 파일 시스템이 이에 대한 변경을 유도할 수 있습니다 zfs.

다음과 같이 시도해 보세요. lbzcat image-dd.bz2 | dd of=/deb/sdX bs=64k

더 긴 토론을 보려면 다음을 확인하세요.이 게시물.

답변2

저에게는 dd기본적으로 페이지 캐시를 사용합니다. 페이지 캐시가 있는 시스템에서는 이것이 정상적인 현상이라고 생각합니다. 하지만 페이지 캐시를 읽으려면 저장 장치가 필요하므로 쓰기 속도가 느려질 수 있습니다.

나에게는 이 문제를 해결하고 최대 속도를 얻는 3가지 방법이 있습니다.

  1. dd블록 크기를 4096 또는 배수로 설정합니다 . (읽지 않음)
  2. dd블록 크기를 충분히 큰 숫자로 설정하십시오 . 나에게 이것은 약 1 백만 이상이었습니다. 100만 정도에서 최고 속도를 얻었습니다. (읽는 사람이 거의 없음)
  3. dd매개변수를 제공하여 페이지 캐시를 사용하지 마십시오 oflags=direct. dd블록 크기를 512의 배수로 충분히 크게 설정하십시오 . 나에게는 이것이 대략 bs=120k그 이상이었습니다. (읽지 않음)

내 시스템에서 주의할 점블록 크기모든 저장 장치에 대해페이지 크기4096바이트입니다. 다음으로 발견됨:

blockdev --getbsz /dev/sd?
getconf PAGESIZE

또한섹터 크기512바이트입니다. 섹터 크기를 알려줄 fdisk수도 있습니다 .parted

관련 정보