我得到了 20.3 GB 的文件和文件夹,总计 100k+ 个项目。我将所有这些文件从 Windows 10 复制到一个目录中,花了我痛苦的 3 个小时进行复制。完成了。
有一天,我启动了 Linux Fedora 24,重新复制了同一个文件夹,然后 bam!我只花了 5 分钟就把它复制到了同一个地方,但目录不同。
为什么 Linux 如此之快?而 Windows 却非常慢?
这里有一个类似的问题
(Ubuntu) Linux 文件复制算法是否比 Windows 7 更好?
但接受的答案却相当缺乏。
答案1
它的基础分为整个系统的几个关键组件:UI 元素(图形部分)、内核本身(与硬件对话的部分)以及存储数据的格式(即文件系统)。
回过头来看,NTFS
已经成为 Windows 的事实标准一段时间了,而 Linux 主要变体的事实标准是ext
文件系统。NTFS 文件系统本身自 Windows XP(2001 年)以来一直没有改变,许多现有功能(如分区缩小/修复、事务性 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
文件系统截然不同,对于 100k 以上的文件,很有可能出现一些碎片。
下一个组件是内核本身(不是 UI,而是与硬件对话的代码,真正的操作系统)。这里,说实话没有太大区别。两个内核都可以配置为执行某些操作,例如磁盘缓存/缓冲,以加快读取和感知写入速度,但无论操作系统如何,这些配置通常都有相同的权衡;例如,缓存似乎可以大大提高复制/保存的速度,但如果在缓存写入期间断电(或拔出 USB 驱动器),那么您将丢失所有未实际写入磁盘的数据,甚至可能损坏已写入磁盘的数据。
例如,在 Windows 和 Linux 中将大量文件复制到 FAT 格式的 USB 驱动器。在 Windows 上可能需要 10 分钟,而在 Linux 上则需要 10 秒;复制文件后,立即弹出驱动器以安全移除驱动器。在 Windows 上,驱动器会立即从系统中弹出,因此您可以从 USB 端口移除驱动器,而在 Linux 上,可能需要 10 分钟才能真正移除驱动器;这是因为缓存(即 Linux 将文件写入 RAM,然后在后台将其写入磁盘,而无缓存的 Windows 会立即将文件写入磁盘)。
最后是用户界面(用户与之交互的图形部分)。用户界面可能是一个漂亮的窗口,里面有一些很酷的图形和漂亮的条形图,让我大致了解正在复制的文件数量、文件大小以及可能需要多长时间;用户界面也可能是一个不打印的控制台任何除了完成时的信息之外。如果 UI 必须先浏览每个文件夹和文件来确定有多少个文件,以及它们有多大,然后给出粗略的估计前它实际上可以开始复制,然后复制过程可能会因 UI 需要执行此操作而花费更长时间。同样,无论操作系统如何,这都是正确的。
您可以将某些东西配置为相等(例如磁盘缓存或集群大小),但实际上,这仅仅取决于所有部分如何结合在一起使系统正常工作,更具体地说,这些代码的实际更新频率。自 Windows XP 以来,Windows 操作系统已经取得了长足的进步,但磁盘子系统是多年来操作系统所有版本中都没有看到太多 TLC 的领域(与Linux 生态系统似乎经常会看到一些新的 FS 或改进)。
希望这能增加一些清晰度。