현재 이전에 만든 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가지 방법이 있습니다.
dd
블록 크기를 4096 또는 배수로 설정합니다 . (읽지 않음)dd
블록 크기를 충분히 큰 숫자로 설정하십시오 . 나에게 이것은 약 1 백만 이상이었습니다. 100만 정도에서 최고 속도를 얻었습니다. (읽는 사람이 거의 없음)dd
매개변수를 제공하여 페이지 캐시를 사용하지 마십시오oflags=direct
.dd
블록 크기를 512의 배수로 충분히 크게 설정하십시오 . 나에게는 이것이 대략bs=120k
그 이상이었습니다. (읽지 않음)
내 시스템에서 주의할 점블록 크기모든 저장 장치에 대해페이지 크기4096바이트입니다. 다음으로 발견됨:
blockdev --getbsz /dev/sd?
getconf PAGESIZE
또한섹터 크기512바이트입니다. 섹터 크기를 알려줄 fdisk
수도 있습니다 .parted