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

Jon*_*s G 24 windows linux performance

我得到了 20.3 Gig 的文件和文件夹,总共 10 万多个项目。我将所有这些文件复制到 Windows 10 的一个目录中,我花了 3 个小时的时间进行复制。完毕。

前几天,我在 Linux Fedora 24 中启动,重新复制了相同的文件夹和 bam!我只花了 5 分钟就将它复制到同一个地方但不同的目录。

为什么 Linux 这么快?而 Windows 是煞费苦心地慢?

这里有一个类似的问题

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

但公认的答案相当缺乏。

txt*_*elp 29

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

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

一个分区的格式也可能比另一个分区更小。大多数系统的默认值是4096 byte 1 , 2簇大小,但如果您将ext4分区格式化为类似16k 3 的大小,那么ext4系统上的每次读取将获得 4 倍于 NTFS 系统的数据(这可能意味着 4 倍的文件,具体取决于存储的内容)在哪里/如何以及有多大等)。文件的碎片化也会影响速度。NTFS 处理文件碎片的方式与ext文件系统非常不同,对于 10 万多个文件,很有可能存在一些碎片。

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

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

最后是 UI(用户与之交互的图形部分)。UI 可能是一个漂亮的窗口,带有一些很酷的图形和漂亮的条形图,让我大致了解正在复制的文件数量、文件大小以及可能需要多长时间;UI 也可能是一个控制台,除了完成时不打印任何信息。如果 UI 必须首先检查每个文件夹和文件以确定有多少文件,加上它们有多大,并实际开始复制之前给出粗略估计,那么复制过程可能需要更长的时间,因为 UI 需要做这个。同样,无论操作系统如何,这都是正确的。

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

希望能增加一些清晰度。

  • 在我看来,这个答案很糟糕,并且投了反对票。您正在引入没有差异的差异。没有人问过分区驱动器的性能如何。当然,问题是否集中在“其他一切都平等”的原则上。我可以以任何我想要的方式为 8 nvme raid0 选择 fs,本地读取速度超过每秒 16 GB,但 Windows 文件副本在任何时候都可以达到 1.4-1.5 GB。与缓存、文件系统、分区无关,但更多与 Windows 操作系统限制有关。 (3认同)