复制到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 2012年

这不会让一种类型的USB推迟使用,而不会推迟另一种类型的USB。还我似乎还记得linux调用每30秒左右同步一次吗?可能已经过时了。我希望这是某种驱动程序或兼容性问题,因为它取决于设备的类型。
Eloff 2012年

在其他USB拇指驱动器上更快的速度不是您的问题。如果是这样,我会建议您查看hdparm。因此,如果您从不了解整个设置的人的角度来看它是有道理的,但具体情况取决于您的问题
RobotHumans 2012年

“我在相邻的端口上有一个超级才华的32GB USB SSD,它以预期的速度工作。” 它在那里,但隐藏得很好,我承认:)那么,您暗示的这是hdparm东西是什么?
Eloff 2012年

好的,SSD和闪存太不一样了。但是,前进时,hdparm是一个实用程序,可让您手动设置驱动器的访问/旋转速度
RobotHumans 2012年

Answers:


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记忆棒快4x。
    • SSD 包含RAM高速缓存(如硬盘),因此它可以快速将传入数据存储在高速缓存中,并告诉OS它已完成,同时它仍然必须实际将数据写入闪存。
  • 因此,对于一个大文件,具有我们假设的4倍结构的32GB GB的速度将是4倍。对于许多小文件,它可以快10倍或更多,因为它可以智能地将它们存储在缓存中。


综上所述,这就是为什么在Linux中将文件复制到USB记忆棒的速度较慢的原因。由于硬件/驱动程序问题或其他原因,它实际上是否更慢?

在Linux和Windows之间进行正确的写入速度比较

  • 首先,由于原因3,请不要理会SSD。这就像桔子和苹果。
  • 要消除原因1(缓存)和原因2(小文件)的影响,您需要使用单个大文件进行测试,该文件大于测试系统上的RAM数量。
  • 在Linux中,您可以使用创建它dd if=/dev/urandom of=largetest bs=1M count=7500,它为您提供7500 MB的测试文件。假设您的系统具有少于4GB的RAM,那就足够了。将其复制到新格式化的Sandisk 8GB记忆棒中,然后计时。
  • 在Windows中重新启动,然后largetest从USB记忆棒复制到硬盘。再次重新启动(以将其从缓存中删除)。然后格式化USB记忆棒(相同的vfat / FAT32!),然后largetest从硬盘复制到记忆棒。
  • 时间如何比较?

2
抄送:@Eloff重新原因1:是的,缓存同步肯定会影响明显的写入时间。但是,仅凭高速缓存就可以解释为什么它会在那里挂了10分钟吗?我认为我们需要OP提供更多详细信息。重新理由2:为什么您认为此传输包含许多小文件?我不认为OP提供有关此1.8GB传输的任何详细信息,对吗?重新理由3:是的,SSD是另一种野兽。它也可能通过SATA而非USB连接。我认为OP只是在误说,并将USB记忆棒称为SSD。但是同样,除非我们从OP中获取更多详细信息,否则就无法知道。
2012年

2
这个答案公然地忽略了问题的表达方式。这个问题显然是关于一个大文件的问题,而中断复制会导致文件损坏。
zrajm 2014年

4
@zrajm是的。然而,对于我这样的人在同样的问题碰撞,这是非常有帮助的。
Pithikos 2014年

那么如何禁用这种缓存行为呢?
阿米努卡诺

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。(仅供参考:@MarcoCeppi)
非理性的约翰,

3
@irrationalJohn我没有提供答案,我只是整理了一下。其次,仅因为错误报告较旧,并不意味着它仍然无效。它正在按照此分类
Marco Ceppi

@MarcoCeppi是的,我知道您只是编辑过的。这就是为什么我以“ FYI: ” 开头。我认为如果您进行了编辑,您可能会(或可能不会)对此感兴趣。我发现如果您不在乎,您将忽略该通知。至于旧的错误报告仍然具有相关性……4年前,我认为至少要发布8个(?)版本?对于性能错误?当然,有可能,但这不是我要看的第一位。FWIW。
2012年

7

我认为这是端口问题的可能性很小。更有可能是LINUX(或linux配置)问题-到处乱逛,您会在linux / ubuntu中找到有关慢速USB的数千个问题报告。对我来说,这几乎是Linux的亮点-我现在有一个Ubuntu 12.04 LTS,但仍然有这个问题(所以我宁愿使用Win7安装程序-主要/仅因为这个原因)。这个问题(或类似症状的东西)已经存在了几年,显然没有解决。在这段时间里,我尝试了几台具有不同ubuntu版本(默认配置)和2-3个不同USB记忆棒的物理PC。


5

只要umount该设备如果已经挂载,并手动安装到/mnt/foldername

就我而言

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

之后,它的应对速度非常快。


这,rsync而不是cp似乎可以解决问题。
Irfan,2016年

19
这对我的情况没有任何影响。同样,如果没有一些理论来解释为什么这会有所作为,这实际上不是解决方案。
LondonRob '16

@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驱动器会非常快(例如60 MB / s),然后变得越来越慢(<10 MB / s),直到看起来永远无法完成。

现在开始的速度较慢,但​​是变得越来越快,并且比以前更快地完成。因此,它似乎确实可以“解决”问题或至少具有积极作用。


1

如果切换到USB 3.0,则速度将从1mb / s变为5-8mb / s。我切换到3.0 USB pci和外部HD,但没有回头。


1

当您查看/ etc / mtab时,您是否看到该设备已使用“ flush”选项安装?

如果是这样,这可能是问题的原因(对我而言)。只需卸载设备并重新安装,默认情况下不应该设置它。


默认情况下,flush选项是设置的,有什么办法可以阻止它?
Ben Lutgens

@ Ben Lutgens-是的,您可以在/ etc / fstab中放入没有刷新选项的条目。使用sudo blkid查找相关的设备UUID,并在其中输入UUID =“ your device uuid here” / mnt / <此处为您的安装点> uid = 1000,gid = 1000,fmask = 0022,dmask = 0022 0 0。更改uid,gid以匹配您使用的普通用户的userid和groupid(由getent passwd <您的用户>找到)。
A.Danischewski 2015年

当我这样做时,所有的更改是我没有更多的复制进度条,并且在尝试卸载设备时,复制似乎只是真正开始/完成,它告诉我“在操作完成之前不要拔出插头” ”。
珍妮·奥莱利

0

我在WD外部磁盘上的传输速率上也遇到了一些问题,在Windows SO中打开它后,我一直使用LINUX,之后的传输速率大约是1.5mb / s,而我卸载在那里运行的dmesg外部硬盘驱动器的速度是说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

好的,我遇到了同样的问题,持续了三天,我如何使用rsync备份1TB硬盘,我知道它用于备份,但是即使完成大文件传输,我也能完成工作做那个工作。如果您想通过GUI使用它,我建议您安装Grsync,它是rsync的图形版本,因为rsync在终端上运行。

希望这对您有所帮助

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.