在两个外部驱动器之间移动文件时,它们是否临时写入计算机的内部硬盘?

在两个外部驱动器之间移动文件时,它们是否临时写入计算机的内部硬盘?

在两个外部 USB 驱动器之间移动大量数据时,我注意到我的笔记本电脑速度变慢了。据我了解,除非可用 RAM 不足,否则文件不会写入任何中间位置(例如 /tmp 或类似位置)。我错了吗?

答案1

如果您有这样的副本或其 GUI 等效版本,

cp -a /media/external/disk1/. /media/external/disk2/

数据从第一个磁盘的文件系统读取并直接写入第二个磁盘。没有对另一个存储位置的中间写入。如果您看到速度缓慢,则可能是两个磁盘共享同一个 USB 控制器并竞争对总线的访问。

除此之外,您还必须提供更多详细信息,例如计算机的品牌/型号、总线拓扑等。

答案2

不存在内部和外部的概念:操作系统不知道盒子里有什么,也不知道里面有什么,外面有什么。唯一特殊的文件系统(但只有一点点)是根文件系统,它可以只读方式安装。您仍然可以使用只读根文件系统执行几乎任何操作(但不能更改根文件系统的内容)。

答案3

TL,DR:可能是缓存。

在两个可移动驱动器之间复制或移动数据不会将数据存储在内部驱动器上。复制程序从源驱动器读取一块数据,将其写入目标驱动器,然后重复处理下一个数据块。复杂的程序可能会尝试通过并行复制多个块来使复制速度更快,但代价是复制期间的负载较重。

访问驱动器需要一些 CPU 时间,无论是文件系统还是实际驱动器访问。如果您有很多小文件,则文件系统管理的成本很小,而大文件则可以忽略不计。驱动器访问的成本取决于 USB 控制器和驱动程序的质量。我认为USB控制器及其Linux驱动程序通常使用DMA相当有效,所以这里也没有太多的CPU成本,但我对USB知之甚少,这里可能是错误的。

正在复制的数据是缓存的就像从磁盘读取的任何其他数据一样。如果您要复制大量数据(相对于 RAM 大小),则复制的数据将取代经常访问的文件,甚至会导致应用程序的部分内存被移动到交换区。这可能会导致性能显着下降。系统不知道从源磁盘读取的数据只是立即写出,不需要保留在 RAM 中,因此它往往不会在缓存分配方面做出最佳决策。

当您在Linux上复制大量数据时,请尝试使用无缓存(在主要发行版中以软件包形式提供)。这是一个命令行实用程序,它在读取的数据大部分不会进入缓存的模式下运行命令。例如:

nocache mv /media/source/dir /media/target/dir

使用该nocache前缀可以在 GUI 应用程序上运行,但前提是该应用程序正常启动。某些桌面环境安排通过中央进程启动应用程序(例如带有 kdeinit 的 KDE),或者可能在现有进程中打开一个窗口,在这些情况下nocache不会产生任何效果。

如果您担心隐私,这种情况不太可能发生,但有可能某些数据最终会进入交换空间。这种情况不太可能发生,因为复制程序只会将每个数据块在内存中保留一小段时间,而对于长时间未访问的部分内存,会优先使用交换。

相关内容