在两个外部USB驱动器之间移动一大块数据时,我注意到我的笔记本电脑慢下来了。据我了解,除非缺少空闲内存,否则文件不会写入任何中间位置(如/tmp或类似位置)。我说错了吗?
发布于 2020-10-20 17:20:43
如果您有这样的副本,或者它的GUI等效,
cp -a /media/external/disk1/. /media/external/disk2/数据从第一个磁盘的文件系统读取,并直接写入第二个磁盘。没有对另一个存储位置的中间写入。如果您看到速度慢,可能是这两个磁盘共享相同的USB控制器,并争夺对总线的访问。
除此之外,您还必须提供更多的详细信息,如计算机的制造/模型、其总线拓扑等。
发布于 2020-10-20 19:46:37
不存在内部和外部的概念:操作系统不了解盒子,也不知道里面或外面有什么。唯一的文件系统是特殊的(但只有一点点)是根文件系统,这可以挂载只读。您仍然可以使用只读根文件系统执行几乎任何操作(但不能更改根文件系统的内容)。
发布于 2020-10-21 20:05:33
TL,博士:可能是缓存。
在两个可移动驱动器之间复制或移动数据不会将数据存储在内部驱动器上。复制程序从源驱动器读取一块数据,将其写入目标驱动器,并与下一个数据块一起重复。一个复杂的程序可能会通过并行复制多个块,试图使复制速度更快,而在复制过程中牺牲更重的负载。
访问驱动器需要一些CPU时间,对于文件系统和实际的驱动器访问都是如此。如果您有大量的小文件,而对于大型文件则可以忽略不计,那么文件系统管理的成本很小。驱动器访问的成本取决于USB控制器和驱动程序的质量。我认为USB控制器和它们的Linux驱动程序通常合理地高效地使用DMA,所以这里也没有太多的CPU成本,但是我对USB知之甚少,在这里可能是错的。
正在复制的数据是缓存,就像从磁盘读取的任何其他数据一样。如果您要复制大量的数据(相对于RAM的大小),您要复制的数据将取代频繁访问的文件,甚至会导致应用程序的部分内存被移动到交换。这可能会对性能造成重大影响。系统不知道它从源磁盘读取的数据只打算立即写入,并且不需要保存在RAM中,因此它往往不会在缓存分配方面做出最好的决定。
当您在Linux上复制大量数据时,尝试使用无缓存 (在主要发行版中作为包提供)。这是一个命令行实用程序,它以一种模式运行命令,在这种模式下,它读取的数据大部分不会进入缓存。例如:
nocache mv /media/source/dir /media/target/dir使用nocache前缀可以在GUI应用程序上工作,但前提是应用程序必须正常启动。一些桌面环境安排通过中央进程(例如,带有kdeinit的KDE )启动应用程序,或者在现有进程中打开一个窗口,在这种情况下,nocache不会产生任何效果。
如果您关心隐私,这是不太可能的,但有可能一些数据可能会在交换空间结束。这是不太可能的,因为复制程序只将每个数据块保存在内存中的时间很短,并且对于很长时间没有被访问的部分内存,交换是优先使用的。
https://unix.stackexchange.com/questions/615525
复制相似问题