USB 하드 드라이브가 느린 이유는 무엇입니까(읽기가 쓰기보다 느림)?

USB 하드 드라이브가 느린 이유는 무엇입니까(읽기가 쓰기보다 느림)?

면책 조항: 여기에 Raspberry Pi 커뮤니티가 있다는 것을 알고 있지만 Raspbian(또는 Debian?), USB HDD 대 NTFS 등과 같이 Pi에만 국한된 커뮤니티는 아니라고 생각합니다.

긴 이야기 짧게: 저는 외부 USB 하드 드라이브가 있는 Raspberry Pi 4를 가지고 있습니다. 읽기/쓰기 속도가 꽤 느리고, 가장 놀랐던 점은 읽기가 쓰기보다 실제로 느리다는 것입니다! 그래서 무슨 일이 일어났고, 범인은 어디에 있나요?

세부:

  • 운영 체제
pi@raspberrypi:~ $ uname -a
Linux raspberrypi 5.10.17-v7l+ #1403 SMP Mon Feb 22 11:33:35 GMT 2021 armv7l GNU/Linux
  • 파일 시스템 테이블:
UUID=1276F80376F7E57F  /mnt/usb_hdd    ntfs-3g    defaults,big_writes,noatime   0   0
  • HD 매개변수 테스트
pi@raspberrypi:~ $ sudo hdparm -tT /dev/sda

/dev/sda:
 Timing cached reads:   1496 MB in  2.00 seconds = 747.81 MB/sec
 Timing buffered disk reads: 258 MB in  3.01 seconds =  85.60 MB/sec
  • 동기식 읽기
pi@raspberrypi:~ $ rsync --progress -hv /mnt/usb_hdd/Share/Downloads/Games/Civ5.iso ~/Civ5.iso
Civ5.iso
          2.37G 100%   18.90MB/s    0:01:59 (xfr#1, to-chk=0/1)

sent 2.37G bytes  received 35 bytes  19.19M bytes/sec
total size is 2.37G  speedup is 1.00

이상한 점은 약 70MB/s에서 시작했지만 거의 즉시 약 20으로 떨어졌다가 8에서 25 사이에서 벗어난다는 것입니다. 매우 불안정합니다.

  • 동기식 쓰기
pi@raspberrypi:~ $ rsync --progress -hv ~/Civ5.iso /mnt/usb_hdd/Share/Downloads/Civ5.iso
Civ5.iso
          2.37G 100%   39.15MB/s    0:00:57 (xfr#1, to-chk=0/1)

sent 2.37G bytes  received 35 bytes  40.52M bytes/sec
total size is 2.37G  speedup is 1.00

속도도 약 65MB/s에서 시작하지만 점차 약 35MB/s로 느려집니다. 적어도 내가 읽은 것만 큼 무작위는 아닙니다.

질문

  1. 둘 중 누구도 읽지 않았어그리고일반적으로 천천히 쓰나요? Pi와 NTFS를 고려해도 40MB/s는 조금 느리지 않나요? 그렇다면 - 무엇이 문제인가?
  2. 왜 읽는 것이 쓰는 것보다 느린가요? 시간이 지남에 따라 읽기 속도가 일관되지 않는 이유는 무엇입니까?

전송 중 CPU는 ~30%이고 메모리는 충분합니다. "그냥 NTFS"인가요?
어쨌든 여기에 도움을 주시면 감사하겠습니다.

답변1

첫 번째 질문에 답하자면 40MB/s는 USB 2.0 병목 현상처럼 들립니다. Pi 4는 USB 3을 지원하지만 HDD와 케이블이 USB 3인지 확인하세요.

댓글의 업데이트된 정보:

또한 rsync외장 하드 드라이브와 집 위치라는 두 가지 당사자가 관련되어 있다는 점에 유의하세요. 방정식에서 두 번째 부분을 제거하려면 ddHDD 전용 벤치마크를 사용해 보십시오.

  • 파일 시스템에 쓰기 포함:sudo dd if=/dev/zero of=/mnt/usb_hdd/blob bs=16M count=100 status=progress oflag=direct
  • 파일 시스템에서 읽기:sudo dd if=/mnt/usb_hdd/blob of=/dev/null bs=16M count=100 status=progress
  • 디스크에서 직접 읽기:sudo dd if=/dev/sda of=/dev/null bs=16M count=100 status=progress iflag=direct

관련 정보