当我将文件复制到 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
Run Code Online (Sandbox Code Playgroud)
ish*_*ish 33
我似乎在 GUI 中看到的问题是进度条几乎立即进入 90%,完成到 100% 的速度稍慢,然后在那里挂了 10 分钟。
您需要了解的一件事是文件缓存。Linux(和 Windows)将使用其他“空”RAM 来缓存读/写操作,并使它们在后续访问时更快。将复制操作缓存到慢速设备会导致您看到的行为——“快速完成”实际上是写入缓存,然后它变慢并停止,因为缓存中的数据(同步)实际刷新到慢速设备是需要很长时间。如果您在那时中止,则数据已损坏(如您所见),因为同步从未完成。
Windows 中的此类复制可能看起来更快(包括报告的 MB/秒速度),因为有时 Windows不会等待同步,并在数据写入缓存后立即声明作业已完成。
复制 1.8GB
由于闪存和文件系统的工作方式,写入非常大的文件时可实现最快的吞吐量(速度)。写入大量小文件,甚至包含大量小文件的混合数据都会大大减慢进程速度。这也会影响硬盘驱动器,但影响程度较小。
我在邻近端口有一个超级天才 32GB USB SSD,它以预期的速度工作。
花园式 U 盘通常由串行(顺序)写入的闪存芯片组成,并且没有任何自己的缓存。
另一方面,SSD 包含一个控制器,该控制器可并行写入闪存芯片,从而使吞吐量比 USB 记忆棒提高 2 倍或更多。
因此,对于一个大文件,我们假设的 4x 结构的 32GB GB 的速度将是原来的 4 倍;对于许多小文件,它会快 10 倍或更多,因为它可以智能地将它们存储在其缓存中。
综上所述,这就是为什么文件复制到 U 盘在 Linux 中可能会显得较慢的原因。它实际上是因为硬件/驱动程序问题还是其他原因而变慢了....
dd if=/dev/urandom of=largetest bs=1M count=7500,这会为您提供一个 7500 MB 的测试文件。假设您的系统内存不足 4GB 左右,这就足够了。将其复制到新格式化的 Sandisk 8GB 记忆棒,并计时。largetest从 USB 记忆棒复制到您的硬盘。再次重新启动(将其从缓存中删除)。然后格式化 U 盘(相同的 vfat/FAT32!),并largetest从硬盘复制到 U 盘。Kri*_*lla 11
现在是 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
Run Code Online (Sandbox Code Playgroud)
如果它有效,您可以通过在/etc/rc.local文件末尾粘贴两行来使此更改在重新启动后保持不变。
对我来说,它有以下效果:
之前将大文件复制到 USB 驱动器会开始非常快(如 60 MB/s),然后变得越来越慢(< 10 MB/s),直到它看起来永远不会完成。
现在它开始较慢,但变得越来越快,并且比以前更快完成。所以它似乎确实“解决”了问题,或者至少有积极的影响。
小智 9
找到修复我所做的只是卸载,移除驱动器,然后sudo modprobe ehci_hcd在终端中运行。sudo modprobe ehci_hcd当我插入驱动器时插入驱动器和agian 并且哇 20/mbs 认为我会分享。希望我不必每次都这样做……但这并不难……
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/177235 说他们修复了这个错误。
小智 7
我认为这是端口问题的可能性非常低。这更有可能是 LINUX(或 linux 配置)问题 - 谷歌搜索,你会发现数以千计的关于 linux/ubuntu 中慢速 USB 的问题报告。对我来说,它几乎是 linux 的一个亮点——我现在有一个 Ubuntu 12.04 LTS 并且仍然有这个问题(所以我宁愿使用 Win7 设置——主要/仅因为这个)。这个问题(或具有类似症状的问题)已经存在好几年了,显然没有解决办法。在这段时间里,我尝试了几台带有几个不同 ubuntu 版本(默认配置)和 2-3 个不同 USB 记忆棒的物理 PC....
小智 6
umount如果设备已经自动挂载,只需将其手动挂载到/mnt/foldername.
就我而言,
umount /media/usb0
mount /dev/sdb1 /mnt/sam
Run Code Online (Sandbox Code Playgroud)
之后,它的应对速度非常快。
| 归档时间: |
|
| 查看次数: |
149981 次 |
| 最近记录: |