为什么在复制文件方面Linux 30的速度比Windows 10快?


20

我得到20.3 Gig的文件和文件夹,总计100k +个项目。我将所有这些文件从Windows 10复制到一个目录中,这使我花了3个小时才能完成复制工作。做完了

前几天,我在Linux Fedora 24中启动,复制了相同的文件夹和bam!我只用了5分钟即可将其复制到同一位置但不同的目录中。

为什么Linux这么快?Windows的速度很慢吗?

这里有一个类似的问题

(Ubuntu)Linux文件复制算法是否比Windows 7更好?

但是相当缺乏公认的答案。


您不使用“ Windows”或“ Linux”来复制文件,而是使用在每个操作系统中运行的某些特定程序。程序在使用方法和权衡方面差异很大。您正在使用哪些?如何?
kreemoweet 16/09/15

5
@kreemoweet:操作系统也是如此-与大多数其他文件系统相比,Windows的NTFS处理许多小文件的能力确实很差。
user1686'9

2
还有Windows粉丝的不错的赞誉。您会看到,复制文件虽然简单,但它有许多应用程序,从业务中的数据备份到科学研究。例如,在欧洲核子研究组织中,有数PB的数据要处理,慢速复制将是不可接受的。
琼斯G

从同一链接-从底部检查第二个答案。Linux将所有文件缓存到可用的RAM中,并在可能的情况下将其写入磁盘-这就是为什么它看起来更快的原因(因为它现在只需要读取,并在可能的时候写入)。
大流士(Darius)2016年

@DominicGuana文件系统发挥作用(ext3 / ext4可以一次分配100Mb的块)。您是否认为Windows下的防病毒功能也可以起到(减慢)作用?顺便说一句,SLAC数据采集流程存在类似问题(在第一级触发后,有太多数据),我们学会了并行写入硬盘...
Hastur

Answers:


25

它的基础分解为整个系统的几个关键组件:UI元素(图形部分),内核本身(与硬件对话)以及数据存储的格式(即文件系统) )。

向后走,NTFS在一段时间以来一直是Windows的事实,而主要Linux变体的事实是ext文件系统。自Windows XP(2001)起,NTFS文件系统本身就没有发生变化,许多功能(如分区收缩/修复,事务性NTFS等)是操作系统的功能(Windows Vista / 7/8/10)而不是 NTFS本身。该ext文件系统有它的最后一个主要的稳定版本(ext4)在2008年由于文件系统本身是什么支配如何以及在何处访问文件,如果你使用的ext4有,你会在NTFS注意到一个改进速度的可能的机会; 请注意,但是如果您使用ext2过它,您可能会注意到它的速度可比。

一个分区格式化为比另一个分区小的块也可以。对于大多数系统默认为4096 byte 12簇大小,但是如果你格式化你的ext4分区像16k 3,则每个读取ext4系统将获得4倍与NTFS系统中的数据(这可能意味着4倍的文件,这取决于存储的内容位置/方式以及大小等)。文件碎片也会影响速度。NTFS处理文件碎片的方式与ext文件系统非常不同,对于100k +个文件,很有可能会有碎片。

下一个组件是内核本身(不是UI,而是实际与硬件对话的代码,即真正的OS)。在这里,老实说并没有太大的区别。可以将两个内核都配置为执行某些操作,例如磁盘缓存/缓冲,以加快读取和感知写入的速度,但是这些配置通常在相同的权衡下与操作系统无关。例如,高速缓存似乎可以极大地提高复制/保存的速度,但是如果您在高速缓存写入过程中断电(或拔出USB驱动器),那么您将丢失所有未实际写入磁盘的数据,甚至可能损坏已写入的数据到磁盘。

例如,在Windows和Linux中将许多文件复制到FAT格式的USB驱动器。在Windows上可能需要10分钟,而在Linux上则需要10秒。复制文件后,请立即弹出弹出驱动器以安全删除驱动器。在Windows上,它将立即从系统中弹出,因此您可以从USB端口上卸下驱动器,而在Linux上,可能需要10分钟才能真正卸下驱动器。这是由于缓存(即Linux将文件写入RAM,然后在后台将它们写入磁盘,而无缓存的Windows立即将文件写入磁盘)。

最后是UI(用户与之交互的图形部分)。用户界面可能是一个漂亮的窗口,上面有一些很酷的图形和漂亮的条形图,使我对要复制的文件数,文件的大小以及所需的时间有一个大致的了解。UI也可能是一个控制台,除了完成操作外,它不会打印任何信息。如果UI必须首先遍历每个文件夹和文件来确定有多少文件,再加上它们的大小,并开始实际复制之前进行粗略估计,则复制过程可能会花费更长的时间,因为UI需要做这个。同样,无论操作系统如何,都是如此。

您可以将某些内容配置为相等(例如磁盘缓存或群集大小),但实际上,它只是取决于所有部分如何结合在一起才能使系统正常工作,更具体地说,这些代码实际上得到更新的频率。自Windows XP以来,Windows操作系统已经走了很长一段路,但是磁盘子系统这一领域多年来在所有版本的操作系统中都没有太多的TLC(相比之下,Linux生态系统似乎看到了一些新的FS)。或相当频繁地进行改进)。

希望可以增加一些清晰度。


我认为这是可怕的答案,投反对票。您正在介绍没有差异的地方。没人问分区驱动器的性能如何。当然,问题是否集中在“其他所有条件都相等”的戒律上。我可以以任何方式为8 nvme raid0选择一个fs,其本机读取速度为每秒16 GB以上,而Windows文件副本始终可以在1.4-1.5 GB范围内最大化。与缓存,fs,分区无关,但更多与Windows OS限制有关。
马提亚斯·沃尔夫

@Matt 您要在哪个文件系统中格式化RAID阵列?如果是NTFS,则可以解释这种情况。.但是,如果您需要提供更多信息,则可以自由添加相关答案,尤其是如果您在核心Windows OS中有任何源代码(而不是程序集转储)直接解释为什么会出现这种速度下降(我对此特别感兴趣!)。
txtechhelp

我使用ntfs,在Windows服务器上,像fs一样,还有什么更好的选择?
马提亚斯·沃尔夫

我联系了MSFT,多年来进行了很多讨论,并尝试了许多事情,尽管每台机器上都有100Gb的网卡,并且每个Mellanox分析工具的所有其他流量都显示出连接在94-95Gb /秒的吞吐量。linux机器之间没有减速,但是只要涉及Windows OS机器,我就会看到这些瓶颈
Matthias Wolf

我说的是单文件传输,所有都是单线程的。完全没有基于OS的硬件瓶颈。
Matthias Wolf
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.