Sao chép vào thẻ nhớ USB có thực sự chậm?


45

Khi tôi sao chép tệp vào thiết bị USB, sẽ mất nhiều thời gian hơn so với trong cửa sổ (cùng thiết bị USB, cùng cổng), nó nhanh hơn tốc độ USB 1.0 (1MB / s) nhưng chậm hơn nhiều so với tốc độ USB 2.0 (12MB / s). Để sao chép 1,8 GB, tôi mất hơn 10 phút (phải là <3 phút). Tôi có hai thanh 8GB SanDisk Cruzer giống hệt nhau và tôi gặp vấn đề tương tự với cả hai. Tôi có một ổ USB 32 GB siêu tài năng ở cổng lân cận và nó hoạt động với tốc độ dự kiến.

Vấn đề tôi dường như nhìn thấy trong GUI là thanh tiến trình tăng đến 90% gần như ngay lập tức, hoàn thành chậm hơn 100% một chút và sau đó treo ở đó trong 10 phút. Làm gián đoạn bản sao tại thời điểm này dường như dẫn đến tham nhũng ở phần đuôi của tệp. Nếu tôi chờ nó hoàn thành bản sao thì thành công.

Có ý kiến ​​gì không? đầu ra dmesg dưới đây:

[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 trì hoãn việc ghi đĩa để đổi lấy việc thực hiện các tác vụ khác nhanh hơn. Chỉ cần đoán, thử chạy syncvà xem nếu nó không tăng tốc quá trình. <- chưa được kiểm tra nhưng có thể
RobotHumans

điều đó không có nghĩa là nó sẽ trì hoãn nó cho một loại USB chứ không phải loại khác. Ngoài ra tôi dường như nhớ lại các cuộc gọi linux đồng bộ cứ sau 30 giây hoặc lâu hơn? Có thể bị lỗi thời. Tôi hy vọng đây là một số loại trình điều khiển hoặc vấn đề tương thích vì nó phụ thuộc vào loại thiết bị.
Eloff

Câu hỏi nhanh hơn về các ổ USB khác không nằm trong câu hỏi của bạn. Nếu có, tôi đã đề nghị tìm đến hdparm. Vì vậy, sẽ rất hợp lý nếu bạn xem nó từ góc nhìn của một người không biết toàn bộ thiết lập của bạn, nhưng phụ thuộc vào câu hỏi của bạn để biết chi tiết
RobotHumans

"Tôi có một ổ USB 32 GB siêu tài năng ở cổng lân cận và nó hoạt động ở tốc độ mong đợi." Nó ở trong đó, nhưng tôi cũng sẽ thừa nhận :) Vậy thứ hdparm này mà bạn ám chỉ là gì?
Eloff

Được rồi, SSD và bộ nhớ flash không phải là điều tương tự. Nhưng di chuyển theo, hdparm là một tiện ích cho phép bạn đặt tốc độ truy cập / quay cho ổ đĩa theo cách thủ công
RobotHumans

Câu trả lời:


29

Tại sao sao chép vào ổ USB của tôi lại chậm như vậy trong Linux (và nhanh hơn trong Windows)?

Lý do 1. Bộ nhớ đệm tệp có thể làm cho ghi xuất hiện chậm hơn hoặc nhanh hơn

Vấn đề tôi dường như nhìn thấy trong GUI là thanh tiến trình tăng đến 90% gần như ngay lập tức, hoàn thành chậm hơn 100% một chút và sau đó treo ở đó trong 10 phút.

Một điều bạn cần hiểu là bộ nhớ đệm tập tin. Linux (và Windows) sẽ sử dụng RAM "trống" khác để lưu trữ các hoạt động đọc / ghi và làm cho chúng nhanh hơn trong các lần truy cập tiếp theo. Các hoạt động sao chép bộ đệm vào các thiết bị chậm dẫn đến hành vi bạn thấy - "hoàn thành nhanh" thực sự đang ghi vào bộ đệm, và sau đó nó chậm lại và dừng lại vì việc xả dữ liệu thực tế trong bộ đệm (đồng bộ hóa) vào thiết bị chậm là mất nhiều thời gian Nếu bạn hủy bỏ tại thời điểm đó, dữ liệu sẽ bị hỏng (như bạn đã lưu ý) do quá trình đồng bộ hóa không bao giờ kết thúc.

Việc sao chép như vậy trong Windows có vẻ nhanh hơn (bao gồm cả tốc độ MB / giây được báo cáo) vì đôi khi Windows sẽ không chờ đồng bộ hóa và tuyên bố công việc đã hoàn thành ngay khi dữ liệu được ghi vào bộ đệm.

Lý do 2. Viết nhiều tệp, đặc biệt là tệp nhỏ, chậm

Để sao chép 1,8 GB

Do cách thức hoạt động của bộ nhớ flash và hệ thống tệp, thông lượng (tốc độ) nhanh nhất đạt được khi ghi các tệp rất lớn. Viết nhiều tệp nhỏ hoặc thậm chí dữ liệu hỗn hợp có chứa một số tệp nhỏ có thể làm chậm quá trình. Điều này cũng ảnh hưởng đến ổ cứng, nhưng ở mức độ thấp hơn.

Lý do 3. Không thể so sánh tốc độ ghi của thanh USB và ổ SSD

Tôi có một ổ USB 32 GB siêu tài năng ở cổng lân cận và nó hoạt động với tốc độ dự kiến.

  • Một thanh USB đa dạng trong vườn thường bao gồm các chip bộ nhớ flash được ghi vào ser seri (tuần tự) và không có bất kỳ bộ nhớ cache nào.

  • Mặt khác, ổ SSD chứa bộ điều khiển ghi song song với các chip nhớ flash , tăng thông lượng lên gấp 2 lần so với thanh USB.

    • Nếu ổ SSD 32 GB của bạn có chip 4x 8GB, nó vẫn sẽ nhanh hơn gấp 4 lần so với thẻ nhớ USB ở bất kỳ thao tác ghi nào.
    • SSD cũng chứa bộ nhớ cache RAM (như đĩa cứng), do đó, nó có thể nhanh chóng lưu trữ dữ liệu đến trong bộ đệm và báo cho HĐH biết rằng nó đã được thực hiện, trong khi nó vẫn phải thực sự ghi dữ liệu đó vào bộ nhớ flash.
  • Vì vậy, với một tệp lớn, 32 GB GB của bạn với cấu trúc 4x ​​mà chúng tôi giả định, sẽ nhanh gấp 4 lần; với nhiều tệp nhỏ, nó sẽ nhanh hơn gấp 10 lần vì nó có thể lưu trữ chúng một cách thông minh trong bộ đệm của nó.


Tóm lại , đây là những lý do tại sao sao chép tệp vào thanh USB có thể xuất hiện chậm hơn trong Linux. Có thực sự chậm hơn vì vấn đề phần cứng / trình điều khiển hoặc bất cứ điều gì ....

So sánh đúng tốc độ ghi giữa Linux và Windows

  • Trước hết, hãy quên SSD vì lý do 3. Nó giống như cam và táo.
  • Để phủ nhận các tác động của lý do 1 (bộ nhớ đệm) và lý do 2 (các tệp nhỏ), bạn cần kiểm tra với một tệp lớn, lớn hơn dung lượng RAM trên hệ thống kiểm tra.
  • Trong Linux, bạn có thể tạo nó với dd if=/dev/urandom of=largetest bs=1M count=7500, nó cung cấp cho bạn tệp thử nghiệm 7500 MB. Giả sử hệ thống của bạn có ít hơn 4GB RAM hoặc hơn, nó đủ tốt. Sao chép nó vào một thanh Sandisk 8GB được định dạng mới và định thời gian cho nó.
  • Khởi động lại trong Windows và sao chép largetesttừ thanh USB vào đĩa cứng của bạn. Khởi động lại một lần nữa (để loại bỏ nó khỏi bộ đệm). Sau đó định dạng thanh USB (cùng vfat / FAT32!) Và sao chép largetesttừ đĩa cứng vào thanh.
  • Làm thế nào để so sánh thời gian?

2
cc: @Eloff Re Lý do 1 : Có, đồng bộ hóa bộ nhớ cache chắc chắn có thể ảnh hưởng đến thời gian ghi rõ ràng. Nhưng bộ nhớ cache sẽ giải thích tại sao nó bị treo ở đó trong 10 phút ?? Tôi nghĩ rằng chúng ta cần thêm chi tiết từ OP. Re Lý do 2 : Tại sao bạn cho rằng giao dịch này bao gồm nhiều file nhỏ? Tôi không nghĩ OP cung cấp bất kỳ chi tiết nào về việc chuyển 1,8 GB này, phải không? Re Lý do 3 : Vâng, SSD là một con thú khác nhau. Nó cũng có thể được gắn qua SATA chứ không phải USB. Tôi nghĩ rằng OP chỉ đơn giản nói sai và gọi một thanh USB là SSD. Nhưng một lần nữa, không có cách nào để biết trừ khi chúng ta có thêm thông tin chi tiết từ OP.
phi lý John

2
Câu trả lời này ngang nhiên bỏ qua cách đặt câu hỏi. Câu hỏi nói rõ ràng về một tệp lớn và thực tế là làm gián đoạn bản sao dẫn đến một tệp bị sai lệch.
zrajm

4
@zrajm đó là sự thật. Tuy nhiên, đối với những người như tôi va chạm trong cùng một vấn đề, điều này rất hữu ích.
Pithikos

Làm thế nào để vô hiệu hóa hành vi bộ nhớ đệm này sau đó?
Aminu Kano

7

Tìm thấy bản sửa lỗi tất cả những gì tôi đã làm là ngắt kết nối, xóa ổ đĩa và chạy sudo modprobe ehci_hcdtrong Terminal. Chèn ổ đĩa và agian sudo modprobe ehci_hcdkhi tôi đặt ổ đĩa vào và wow 20 / mbs nghĩ rằng tôi sẽ chia sẻ. Hy vọng tôi không phải làm điều đó mỗi lần ... nhưng nó không khó ...

https://bugs.launchpad.net/ubfox/+source/linux/+orms/177235 nói rằng họ đã sửa lỗi.


Nghiêm túc?? Báo cáo lỗi đó là từ tháng 12 năm 2007 và tham chiếu Ubuntu gutsy 7.10. (FYI: @MarcoCeppi)
phi lý John

3
@irrationalJohn Tôi không cung cấp câu trả lời, tôi chỉ làm sạch nó. Thứ hai chỉ vì một báo cáo lỗi đã cũ, không có nghĩa là nó vẫn không hợp lệ. Nó đang được xử lý theo cách này
Marco Ceppi

@MarcoCeppi Vâng, tôi biết bạn chỉ chỉnh sửa. Đó là lý do tại sao tôi mở đầu bằng " FYI: ". Tôi hình dung nếu bạn chỉnh sửa nó, bạn có thể (hoặc có thể không ) quan tâm. Tôi hình dung nếu bạn không quan tâm, bạn sẽ bỏ qua thông báo. Đối với một báo cáo lỗi cũ vẫn có liên quan ... Hơn 4 năm trước và tôi nghĩ ít nhất 8 (?) Phát hành sau? Đối với một lỗi hiệu suất? Chắc chắn, nó có thể là có thể, nhưng đó không phải là nơi đầu tiên tôi nhìn. FWIW.
phi lý John

7

Tôi nghĩ rằng cơ hội rất thấp rằng đó là một vấn đề cổng. Đây có thể là sự cố LINUX (hoặc cấu hình linux) - tìm kiếm xung quanh và bạn sẽ tìm thấy hàng ngàn báo cáo vấn đề về USB chậm trong linux / ubfox. Đối với tôi, nó gần như là một showstopper cho linux - Bây giờ tôi có Ubuntu 12.04 LTS và vẫn gặp sự cố này (vì vậy tôi sử dụng thiết lập Win7 - chủ yếu / chỉ vì điều này). Vấn đề này (hoặc một cái gì đó có triệu chứng tương tự) đã có từ vài năm nay, dường như không có cách khắc phục. Và trong thời gian này, tôi đã thử một số PC vật lý với một số phiên bản Ubuntu khác nhau (cấu hình mặc định) và 2-3 thanh USB khác nhau ....


5

Chỉ cần umountthiết bị nếu nó đã được tự động hóa và tự gắn nó vào /mnt/foldername.

Trong trường hợp của tôi,

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

Sau đó nó đang đối phó rất nhanh.


Điều này, cùng với rsyncthay vì cpdường như để thực hiện các mẹo.
Irfan

19
Điều này đã không làm cho bất kỳ sự khác biệt với tình hình của tôi. Ngoài ra, đây không thực sự là một giải pháp mà không có một số lý thuyết về lý do tại sao điều này được cho là tạo ra sự khác biệt.
LondonRob

@Irfan Không, rsync cũng chậm lại ...
sergzach

3

Đó là năm 2019 và tôi vẫn gặp vấn đề tương tự. Vì vậy, tôi hình dung tôi tìm kiếm trên internet một giải pháp. Tôi tìm thấy trang sau gợi ý một: https://gist.github.com/2E0PGS/f63544f8abe69acc5caaa54f56efe52f

Nó nói rằng:

Thực hiện các lệnh sau trong bảng điều khiển để xem nó có khắc phục được sự cố cho bạn không. Trước tiên, bạn có thể cần phải sudo sucó sự cho phép cần thiết.

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

Nếu nó hoạt động, bạn có thể thực hiện thay đổi này liên tục trên các lần khởi động lại bằng cách dán hai dòng ở cuối dòng của bạn /etc/rc.local tệp .

Đối với tôi nó có tác dụng như sau:

Trước khi sao chép các tệp lớn vào ổ USB sẽ khởi động rất nhanh (như 60 MB / giây) và trở nên chậm hơn và chậm hơn (<10 MB / giây) cho đến khi có vẻ như nó sẽ không bao giờ kết thúc.

Bây giờ nó bắt đầu chậm hơn, nhưng ngày càng nhanh hơn và kết thúc sớm hơn trước. Vì vậy, nó dường như "giải quyết" vấn đề hoặc ít nhất là có tác động tích cực.


1

Nếu bạn chuyển sang USB 3.0, bạn sẽ chuyển từ 1mb / s sang mức 5-8mb / s. Tôi chuyển sang pci USB 3.0 và HD bên ngoài và không nhìn lại.


1

Khi bạn nhìn vào / etc / mtab, bạn có thấy rằng thiết bị đã được gắn với tùy chọn "tuôn ra" không?

Nếu vậy, đây có thể là nguyên nhân của vấn đề (nó là dành cho tôi). Chỉ cần ngắt kết nối thiết bị và kết nối lại, thiết bị không nên được đặt theo mặc định.


Tùy chọn tuôn ra được đặt theo mặc định, có cách nào để ngăn chặn điều này?
Ben Lutgens

@ Ben Lutgens - Có, bạn có thể đặt mục nhập của riêng bạn vào / etc / fstab mà không có tùy chọn xóa. Sử dụng sudo blkid để tìm UUID thiết bị có liên quan và đặt một mục nhập như UUID = "thiết bị của bạn ở đây" / mnt / <điểm gắn kết của bạn ở đây> uid = 1000, gid = 1000, fmask = 0022, dmask = 0022 0 0. Thay đổi uid, gid để khớp với userid và groupid của người dùng bình thường mà bạn sử dụng (như được tìm thấy bởi getw passwd <người dùng của bạn>).
A.Danischewski

Khi tôi thực hiện việc này, tất cả những thay đổi là tôi không nhận được thanh tiến trình nào nữa cho việc sao chép và việc sao chép dường như chỉ thực sự bắt đầu / kết thúc khi tôi cố gắng ngắt kết nối thiết bị và nó cho tôi biết "không rút phích cắm cho đến khi hoạt động kết thúc ".
Jenny O'Reilly

0

Tôi cũng gặp một số vấn đề với tốc độ truyền trên ổ đĩa ngoài WD, sau khi mở nó trong windows SO, tôi luôn sử dụng LINUX, sau đó tốc độ truyền tải là 1,5mb / giây so với khi tôi ngắt kết nối ổ cứng gắn ngoài chạy ở đó. nói rằng sdb1 nó không được cập nhật, đã chạy một fsck, đã thực hiện một vài sửa chữa và sau đó 20mb / s tốc độ truyền tải một lần nữa khi copiyng từ sda sang đĩa bên ngoài. fsck luôn là một rủi ro nếu bạn có dữ liệu, nhưng nó hoạt động với tôi, không mất dữ liệu.


-2

Tôi cũng gặp vấn đề này, nhưng tôi sử dụng lệnh cp và bạn cập nhật thanh usb của mình sau vài giây;

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

Tôi nghĩ đó là một câu trả lời rất muộn nhưng nó vẫn mở.


-3

Được rồi, tôi đã gặp vấn đề tương tự trong ba ngày và cách tôi quản lý sao lưu ổ cứng 1TB của mình bằng cách sử dụng rsync, tôi biết rằng nó được sử dụng để sao lưu nhưng nó đã hoàn thành công việc, ngay cả khi chuyển các tệp lớn tôi sử dụng làm công việc đó Nếu bạn muốn sử dụng nó với GUI, tôi khuyên bạn nên cài đặt Grsync, phiên bản đồ họa của rsync vì rsync chạy trên thiết bị đầu cuối.

Hy vọng điều này sẽ giúp

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.