USB 메모리 스틱으로 복사가 정말 느려 집니까?


45

USB 장치에 파일을 복사하면 Windows (같은 USB 장치, 동일한 포트)보다 시간이 오래 걸리고 USB 1.0 속도 (1MB / s)보다 빠르지 만 USB 2.0 속도 (12MB / s)보다 훨씬 느립니다. 1.8GB를 복사하려면 10 분 이상 걸립니다 (<3 분). 두 개의 동일한 SanDisk Cruzer 8GB 스틱이 있으며 둘 다에 동일한 문제가 있습니다. 주변 포트에 뛰어난 재능의 32GB USB SSD가 있으며 예상 속도로 작동합니다.

GUI에서 볼 수있는 문제는 진행률 표시 줄이 거의 즉시 90 %로 가고 조금 느리게 100 %까지 완료 한 다음 10 분 동안 멈추는 것입니다. 이 시점에서 복사를 중단하면 파일의 끝 부분이 손상되는 것으로 보입니다. 복사가 완료 될 때까지 기다리면 복사가 성공한 것입니다.

어떤 아이디어? 아래 dmesg 출력 :

[64059.432309] usb 2-1.2: new high-speed USB device number 5 using ehci_hcd
[64059.526419] scsi8 : usb-storage 2-1.2:1.0
[64060.529071] scsi 8:0:0:0: Direct-Access     SanDisk  Cruzer           1.14 PQ: 0 ANSI: 2
[64060.530834] sd 8:0:0:0: Attached scsi generic sg4 type 0
[64060.531925] sd 8:0:0:0: [sdd] 15633408 512-byte logical blocks: (8.00 GB/7.45 GiB)
[64060.533419] sd 8:0:0:0: [sdd] Write Protect is off
[64060.533428] sd 8:0:0:0: [sdd] Mode Sense: 03 00 00 00
[64060.534319] sd 8:0:0:0: [sdd] No Caching mode page present
[64060.534327] sd 8:0:0:0: [sdd] Assuming drive cache: write through
[64060.537988] sd 8:0:0:0: [sdd] No Caching mode page present
[64060.537995] sd 8:0:0:0: [sdd] Assuming drive cache: write through
[64060.541290]  sdd: sdd1
[64060.544617] sd 8:0:0:0: [sdd] No Caching mode page present
[64060.544619] sd 8:0:0:0: [sdd] Assuming drive cache: write through
[64060.544621] sd 8:0:0:0: [sdd] Attached SCSI removable disk

Linux는 다른 작업을 더 빠르게 수행하기 위해 디스크 쓰기를 연기합니다. 추측 만해도 실행을 시도 sync하여 프로세스 속도가 향상되지 않는지 확인하십시오. <-예상되었지만 가능
RobotHumans

USB의 한 유형에서는 지연되지만 다른 유형의 USB에서는 지연되지 않을 것입니다. 또한 30 초마다 리눅스 호출 동기화를 기억하는 것 같습니다. 구식 일 수 있습니다. 장치 유형에 따라 다르기 때문에 일종의 드라이버 또는 호환성 문제라고 생각합니다.
Eloff

다른 USB 썸 드라이브에서의 속도가 빠르다는 것은 의심의 여지가 없습니다. 그렇다면 hdparm을 살펴볼 것을 제안했을 것입니다. 따라서 전체 설정을 모르지만 세부 사항에 대한 질문에 따라 다른 사람의 관점에서
보아도 합리적입니다.

" 인접한 포트에 뛰어난 재능의 32GB USB SSD가 있으며 예상 속도로 작동합니다." 그것은 거기에 있었지만 잘 숨겨져 있습니다 :) 그래서 당신이 암시하는이 hdparm 물건은 무엇입니까?
Eloff

SSD와 플래시 메모리는 같은 것이 아닙니다. 그러나 hdparm은 수동으로 드라이브의 액세스 / 스핀 속도를 설정할 수있는 유틸리티입니다.
RobotHumans

답변:


29

Linux에서 USB 드라이브로 복사하는 것이 왜 그렇게 느리고 (Windows에서는 더 빠름)?

이유 1. 파일 캐싱으로 쓰기 속도 느리거나 빠르게 나타날 수 있습니다

GUI에서 볼 수있는 문제는 진행률 표시 줄이 거의 즉시 90 %로 가고 조금 느리게 100 %까지 완료 한 다음 10 분 동안 멈추는 것입니다.

이해해야 할 것은 파일 캐싱입니다. Linux (및 Windows)는 그렇지 않으면 "빈"RAM을 사용하여 읽기 / 쓰기 작업을 캐시하고 후속 액세스에서 더 빠르게 만듭니다. 복사 작업을 느리게 수행하여 장치를 느리게 캐시하면 "빠른 완료"가 실제로 캐시에 기록 된 다음 캐시의 데이터를 실제로 플러시 (동기화)하여 느리게 중지됩니다. 아주 오래 걸 렸어요 이 시점에서 중단하면 동기화가 완료되지 않았으므로 데이터 (손상된대로)가 손상됩니다.

Windows에서 이러한 복사 는보고 된 MB / 초 속도를 포함하여 더 빨리 보일 수 있습니다. 때로는 Windows 동기화를 기다리지 않고 데이터가 캐시에 기록되는 즉시 작업이 완료된 것으로 선언하기 때문입니다.

이유 2. 많은 파일, 특히 작은 파일을 쓰는 것이 느립니다

1.8GB를 복사하려면

플래시 메모리 및 파일 시스템의 작동 방식으로 인해 매우 큰 파일을 작성할 때 가장 빠른 처리량 (속도)이 달성됩니다. 작은 파일을 많이 쓰거나 여러 개의 작은 파일을 포함하는 혼합 데이터를 쓰면 프로세스 속도가 느려질 수 있습니다. 이것은 하드 드라이브에도 영향을 주지만 다소 덜 영향을줍니다.

이유 3. USB 스틱과 SSD의 쓰기 속도를 비교할 수 없습니다

주변 포트에 뛰어난 재능의 32GB USB SSD가 있으며 예상 속도로 작동합니다.

  • 가든 종류의 USB 스틱은 일반적으로 직렬로 (순차적으로) 기록되며 자체 캐시가없는 플래시 메모리 칩으로 구성됩니다.

  • 반면 SSD에는 플래시 메모리 칩에 병렬로 쓰는 컨트롤러가 포함되어있어 USB 스틱보다 처리량이 2 배 이상 증가합니다.

    • 32GB SSD에 4x 8GB 칩이 있다면 쓰기 작업에서 USB 스틱보다 4 배 빠릅니다.
    • SSD 에는 또한 하드 디스크와 같은 RAM 캐시가 포함되어 있기 때문에 들어오는 데이터를 캐시에 빠르게 저장하고 OS에 완료 사실을 알려주는 동시에 실제로 해당 데이터를 플래시 메모리에 기록해야합니다.
  • 따라서 우리가 가정 한 4x 구조의 32GB GB는 하나의 큰 파일로 4 배 빠릅니다. 작은 파일이 많으면 지능적으로 캐시에 저장할 수 있으므로 10 배 이상 빠릅니다.


요약 하면, USB 스틱에 파일 복사가 Linux에서 느리게 나타날 수있는 이유가 여기에 있습니다. 하드웨어 / 드라이버 문제 등으로 인해 실제로 느려 집니까? ...

Linux와 Windows 간의 쓰기 속도를 적절히 비교

  • 우선, 이유 3 때문에 SSD를 잊어 버리십시오. 마치 오렌지 나 사과와 같습니다.
  • 이유 1 (캐싱) 및 이유 2 (작은 파일)의 영향을 무시하려면 테스트 시스템의 RAM 크기보다 큰 단일 큰 파일로 테스트해야합니다.
  • Linux에서는 dd if=/dev/urandom of=largetest bs=1M count=7500을 사용하여 7500MB 테스트 파일을 만들 수 있습니다 . 시스템에 4GB 이하의 RAM이 있다고 가정하면 충분합니다. 새로 포맷 한 Sandisk 8GB 스틱에 복사하여 시간을 정하십시오.
  • Windows에서 재부팅 largetest하고 USB 스틱에서 하드 디스크로 복사 하십시오. 다시 재부팅하십시오 (캐시에서 제거). 그런 다음 USB 스틱 (같은 vfat / FAT32!)을 포맷하고 largetest하드 디스크에서 스틱으로 복사 하십시오.
  • 시간은 어떻게 비교됩니까?

2
cc : @Eloff Re 이유 1 : 예. 캐시 동기화는 명백한 쓰기 시간에 영향을 줄 수 있습니다. 그러나 캐시만으로는 왜 10 분 동안 거기에 매달려 있는지 설명 할 수 있습니까 ?? OP의 세부 사항이 더 필요하다고 생각합니다. 다시의 이유 2 : 당신은 왜이 전송이 많은 작은 파일로 구성되어 생각합니까? OP가 1.8GB 전송에 대한 세부 정보를 제공하지 않는다고 생각합니까? 다시의 이유 3 : 네, SSD는 다른 짐승이다. 또한 USB가 아닌 SATA를 통해 연결될 수 있습니다. OP가 단순히 잘못 말한 것으로 USB 스틱을 SSD라고합니다. 그러나 OP에서 더 자세한 정보를 얻지 않으면 알 수 없습니다.
비이성적 인 John

2
이 답변은 질문이 어떻게 구성되었는지를 무시합니다. 이 질문은 하나의 큰 파일 에 대해 분명히 말하고 복사를 중단하면 파일이 엉망이된다는 사실 에 대해 이야기 합니다.
zrajm

4
@zrajm 맞습니다. 그러나 같은 문제에 부딪히는 저와 같은 사람들에게는 이것이 매우 유용합니다.
Pithikos

그렇다면이 캐싱 동작을 비활성화하는 방법은 무엇입니까?
Aminu Kano

7

마운트 해제, 드라이브 제거 및 sudo modprobe ehci_hcd터미널에서 실행 한 모든 수정 사항을 찾았습니다 . 드라이브를 sudo modprobe ehci_hcd넣을 때 드라이브와 agian를 삽입하고 20 / mbs를 공유한다고 생각하십시오. 매번 그렇게 할 필요가 없기를 바랍니다 ...하지만 어렵지는 않습니다 ...

https://bugs.launchpad.net/ubuntu/+source/linux/+bug/177235 는 버그를 수정했다고 말합니다.


진심으로 ?? 이 버그 보고서는 2007 년 12 월에 작성되었으며 Ubuntu gutsy 7.10을 참조합니다. (FYI : @MarcoCeppi)
비이성적 인 John

3
@irrationalJohn 나는 대답을 제공하지 않고 방금 정리했습니다. 두 번째로 버그 리포트가 오래되었다고해서 여전히 유효하지 않다는 의미는 아닙니다. 그것은 우선 순위에 따라 분류되고있어 따라
마르코 Ceppi

@MarcoCeppi 예, 편집 한 것만 알고 있습니다. 그래서 나는 " FYI : "로 시작했습니다 . 나는 당신이 그것을 편집하면 관심이 있거나 없을 수도 있다고 생각했다. 당신이 신경 쓰지 않으면 나는 그 통지를 무시할 것이라고 생각했습니다. 오래된 버그 보고서는 여전히 관련성이 있습니다 ... 4 년 전에 나는 적어도 8 (?) 릴리스 후에 생각합니까? 성능 버그가 있습니까? 물론, 가능할 수도 있지만, 내가 처음 보는 것은 아닙니다. FWIW.
불합리한 John

7

포트 문제 일 가능성이 매우 낮다고 생각합니다. LINUX (또는 Linux 구성) 문제 일 가능성이 큽니다. linux / ubuntu에서 느린 USB에 대한 수천 가지 문제 보고서를 찾을 수 있습니다. 나에게 그것은 거의 리눅스의 showtopper입니다-이제 우분투 12.04 LTS가 있고 여전히이 문제가 있습니다 (따라서 주로 Win7 설정을 사용합니다-주로 /이 때문에). 이 문제 (또는 비슷한 증상이있는 것)는 현재 몇 년 동안 있었으며 분명히 해결되지 않았습니다. 그리고이 기간 동안 여러 가지 우분투 버전 (기본 구성)과 2-3 가지 USB 스틱을 사용하여 여러 실제 PC를 사용해 보았습니다 ...


5

그냥 umount장치가 이미 자동 마운트, 수동으로 마운트되어있는 경우 /mnt/foldername.

나의 경우에는,

umount /media/usb0
mount /dev/sdb1 /mnt/sam

그 후에는 매우 빠르게 대처하고 있습니다.


이것은 rsync대신에 cp트릭을 수행하는 것으로 보입니다.
Irfan

19
이것은 내 상황에 아무런 영향을 미치지 않았습니다. 또한 이것이 왜 차이가 나는지에 대한 이론이없는 해결책은 아닙니다 .
LondonRob

@Irfan 아니오, rsync도 느려집니다 ...
sergzach

3

2019 년이며 여전히 동일한 문제가 있습니다. 그래서 인터넷에서 해결책을 찾는다고 생각했습니다. 나는 하나를 제안하는 다음 페이지를 발견했다 : https://gist.github.com/2E0PGS/f63544f8abe69acc5caaa54f56efe52f

그것은 말한다 :

콘솔에서 다음 명령을 실행하여 문제가 해결되는지 확인하십시오. sudo su필요한 권한 이 있어야 할 수도 있습니다 .

echo $((16*1024*1024)) > /proc/sys/vm/dirty_background_bytes
echo $((48*1024*1024)) > /proc/sys/vm/dirty_bytes

작동하는 경우 /etc/rc.local파일 끝에 두 줄을 붙여서 재부팅 동안이 변경 사항을 지속시킬 수 있습니다.

나에게 그것은 다음과 같은 효과가 있었다.

큰 파일을 USB 드라이브에 복사하기 전에 실제로는 60MB / s와 같은 속도로 시작하여 결코 끝나지 않을 때까지 속도가 느려집니다 (<10MB / s).

이제는 느리게 시작되지만 더 빨라지고 빨라지고 이전보다 빨리 완료됩니다. 따라서 문제를 "해결"하거나 최소한 긍정적 인 효과가있는 것 같습니다.


1

USB 3.0으로 전환하면 1mb / s에서 5-8mb / s로 바뀝니다. 3.0 USB PCI 및 외부 HD로 전환했는데 되돌아 보지 않았습니다.


1

/ etc / mtab에서 장치가 "플러시"옵션으로 마운트되었음을 ​​알 수 있습니까?

그렇다면 이것이 문제의 원인 일 수 있습니다 (나를위한 것입니다). 장치를 마운트 해제했다가 다시 마운트하면 기본적으로 설정되어 있지 않아야합니다.


플러시 옵션은 기본적으로 설정되어 있습니다.
Ben Lutgens

@ Ben Lutgens-예, 플러시 옵션이없는 자신의 항목을 / etc / fstab에 넣을 수 있습니다. sudo blkid를 사용하여 관련 장치 UUID를 찾고 UUID = "장치를 여기에 설치하십시오"/ mnt / <여기에 마운트 포인트를 입력하십시오> uid = 1000, gid = 1000, fmask = 0022, dmask = 0022 0 0과 같은 항목을 입력하십시오. getid passwd <your user>에서 찾은 일반 사용자의 userid 및 groupid와 일치하도록 uid, gid를 변경하십시오.
A.Danischewski

이 작업을 수행하면 복사에 대한 진행률 표시 줄이 더 이상 나타나지 않으며 장치를 마운트 해제하려고 할 때만 복사가 실제로 시작 / 종료되는 것처럼 보이고 작동이 완료 될 때까지 플러그를 뽑지 마십시오. ".
Jenny O'Reilly

0

WD 외장 디스크의 전송 속도에 문제가 있었으므로 Windows에서 디스크를 연 후에는 항상 Linux를 사용했습니다. 그 후 전송 속도가 1.5mb / s와 같았습니다. sdb1이 부적절하게 마운트 해제되었으며 fsck를 실행하여 sda에서 외부 디스크로 복사 할 때 약간의 수리를 한 후 20mb / s의 전송 속도를 다시 나타 냈습니다. fsck는 데이터가있는 경우 항상 위험하지만 데이터 손실없이 저에게 효과적입니다.


-2

나도이 문제가 있었지만 cp 명령을 사용하면 몇 초 만에 USB 스틱을 업데이트합니다.

cp -r -u /home/user/Muziek/ /media/user/Audiousbsti
cp -r -u /home/user/Muziek/ /media/user/4F49-4A65/

나는 그것이 매우 늦은 대답이라고 생각하지만 여전히 열려 있습니다.


-3

좋아, 나는 3 일 동안 같은 문제가 있었고 rsync를 사용하여 1TB 하드 드라이브를 백업하는 방법을 알았습니다. 백업에 사용되었지만 큰 파일을 전송할 때도 작업이 완료되었음을 알고 있습니다. 그 일을하십시오. GUI와 함께 사용하려면 rsync가 터미널에서 실행되므로 rsync의 그래픽 버전 인 Grsync를 설치하는 것이 좋습니다.

이것이 도움이 되었기를 바랍니다.

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