问题描述
当我将文件复制到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中复制到我的USB驱动器这么慢(在Windows中更快)?
原因1.文件缓存可以使写入显示更慢或更快
The problem I seem to see in the GUI is that the progress bar goes to 90% almost instantly, completes to 100% a little slower and then hangs there for 10 minutes.
您需要了解的一件事是文件缓存。 Linux(和Windows)将使用其他”empty” RAM来缓存读/写操作,并使其在后续访问中更快。将复制操作缓存到慢速设备会导致您看到的行为 – “fast completion”实际上正在写入缓存,然后它会减慢并停止,因为实际将缓存中的数据(同步)刷新到缓慢的设备需要很长时间。如果您在该点中止,则数据已损坏(如您所述),因为同步从未完成。
在Windows中进行此类复制可能看起来更快(包括报告的MB /秒速度),因为有时Windows不会等待同步,并在数据写入缓存后立即声明作业已完成。
原因2.编写大量文件,特别是小文件,速度很慢
To copy 1.8GB
由于闪存和文件系统的工作方式,在编写非常大的文件时可以实现最快的吞吐量(速度)。编写大量小文件,甚至包含许多小文件的混合数据都会使进程大大减慢。这也会影响硬盘驱动器,但程度稍低。
原因3.无法比较USB memory 棒和SSD的写入速度
I have a super talent 32GB USB SSD in the neighboring port and it works at expected speeds.
-
花园种类的USB memory 棒通常由闪存芯片组成,这些闪存芯片被串行(顺序)写入,并且没有自己的任何高速缓存。
-
另一方面,SSD包含一个控制器,该控制器并行写入闪存芯片,通过USB棒将吞吐量提高2倍或更多。
-
如果您的32GB SSD具有4x 8GB芯片,那么在任何写入操作中它仍然比USB棒快4倍。
-
SSD还包含RAM缓存(如硬盘),因此它可以快速将传入的数据存储在缓存中并告诉操作系统它已完成,同时它仍然必须将该数据实际写入闪存。
-
-
因此,对于一个大文件,我们假设的4x结构的32GB GB将是4倍的速度;对于许多小文件,它会快10倍或更快,因为它可以智能地将它们存储在缓存中。
总而言之,这些是在Linux中复制到USB memory 棒的文件可能会显得较慢的原因。它实际上是因为硬件/驱动程序问题或其他问题而变慢….
正确比较Linux和Windows之间的写入速度
-
首先,因为原因而忘记SSD。它就像橘子和苹果。
-
要消除原因1(缓存)和原因2(小文件)的影响,您需要使用大于测试系统上的RAM量的单个大文件进行测试。
-
在Linux中,您可以使用
dd if=/dev/urandom of=largetest bs=1M count=7500
创建它,它可以为您提供7500 MB的测试文件。假设您的系统RAM少于4GB,那就足够了。将其复制到新格式化的Sandisk 8GB棒,然后计时。 -
在Windows中重新启动,并将USB memory 棒中的
largetest
复制到您的硬盘上。再次重新启动(将其从缓存中删除)。然后格式化USB memory 棒(相同的vfat /FAT32!),并将largetest
从硬盘复制到 memory 棒。 -
时间比较如何?
次佳解决思路
我认为这是一个港口问题的可能性非常低。它更可能是一个LINUX(或Linux配置)问题 – 浏览器,你会发现有关linux /ubuntu中慢速USB的数千个问题报告。对我来说它几乎是linux的showstopper – 我现在有一个Ubuntu 12.04 LTS并且仍然有这个问题(所以我宁愿使用Win7设置 – 主要/仅因为这个)。这个问题(或具有类似症状的东西)已存在好几年了,显然没有解决。在这段时间里,我尝试了几款具有几种不同ubuntu版本(默认配置)和2-3种不同USB闪存的物理PC ….
第三种解决思路
发现修复我所做的全部是卸载,删除驱动器,并在终端中运行sudo modprobe ehci_hcd
。当我把驱动器放进去的时候插入驱动器和agian sudo modprobe ehci_hcd
,并认为我会分享20 /mbs。希望我不必每次都这样做……但这并不难…
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/177235说他们修复了这个bug。
第四种思路
只要umount
设备已经自动挂载,并手动将其安装到/mnt/foldername
。
就我而言,
umount /media/usb0
mount /dev/sdb1 /mnt/sam
之后,它的应对速度非常快。