如果将相同数量的数据分散到许多单独的文件中,为什么复制它需要更长的时间?


12

我注意到将价值24Mb的数据从一个文件夹复制到另一个文件夹大约花费了30秒的时间,因为(我假设是这个原因)它超过了1,000个单独的文件。复制24Mb不会花太长时间。为什么文件数量有所不同?

我在MacBook(4GB内存,Intel(R)Core(TM)2 Duo CPU P7450 @ 2.13GHz,32位操作系统)上运行Windows 7

编辑:NTFS是驱动器上使用的文件系统

Answers:


5

HDD没有确切的传输速率,它取决于适当的维护,即没有碎片,也没有坏扇区等。

如果HDD是SATA 2并且是相同的分区,则仅是数据传输的速度。

如果同一HDD中有两个分区,则不需要在总线和母板之间进行此数据传输,即,它会加载到缓冲区中。(然后取决于硬盘缓冲区的大小。)

但是对于每个复制的文件,系统必须将其索引保留在HDD的MFT(主文件表)中,如果您复制许多文件,则复制过程会变慢。并且,如果您有任何防病毒软件,它将扫描每个复制的文件。并且,如果启用了Microsoft搜索文件索引(或任何其他文件索引服务),结果将更糟。

我认为,还有许多其他原因会导致许多文件的副本速度变慢,但这应该是主要原因。


禁用防病毒程序可使解压缩速度提高10倍。之后,扫描文件中的病毒。
fat_mike

30

为什么文件数量有所不同?

显然,您只专注于“复制文件”的“复制数据”方面。文件不仅仅是数据。它是文件系统中的实体。文件具有名称,属性和权限。复制“文件”时,必须将所有与文件有关的所有附加信息与数据一起复制。有大量磁盘I / O来执行此文件系统开销。

在通用文件系统中复制一(1)个文件的过程类似于:

  • 在文件系统中找到源文件。(一种)
  • 从磁盘读取源文件的目录条目。
  • 验证读取权限。
  • 在文件系统中找到目标文件。(b)
  • 验证目标目录中的写权限。
  • 如有必要,请展开目录以容纳新文件。(C)
  • 更新磁盘上的目录。(c1)
  • 查找可用块,分配它们并再次更新表。(d)
  • 读取文件数据并复制到目标文件(即复制“文件”)。
  • 使用(大小和时间)更新新文件的目录条目。(e)
  • 更新源目录条目的访问时间。(F)

(a)至少这意味着搜索当前目录。否则,该路径可能始于文件系统的根目录,并且必须遍历多个目录级别。

(b)至少这意味着搜索当前目录。否则,该路径可能始于文件系统的根目录,并且必须遍历多个目录级别。如果目标文件已经存在,则确定复制应如何进行或中止。如果目标文件不存在,则必须创建一个新的目录条目,并且可能涉及扩展目录(即文件块(又名集群)分配开销)。

(c)如果必须扩展目录,请通过查找空闲块来分配新块,使用新分配修改分配表,然后这些块写出到磁盘。由于大多数文件系统维护分配表的多个副本,因此这意味着对磁盘的多次写入。
(c1)找到目标目录后,从磁盘读取目录块,使用复制文件的新目录条目对其进行修改,然后其写出到磁盘。

(d)为了复制文件,通过查找可用块来分配块,使用新分配修改分配表,然后这些块写出到磁盘。由于大多数文件系统维护分配表的多个副本,因此这意味着对磁盘的多次写入。为了保持数据完整性,文件系统可能不会尝试合并(延迟和合并)目录和分配表的磁盘操作,而是在创建和分配新文件时立即执行写操作。

(E)一旦数据复制是complele,更新用于与所述正确的文件长度和时间戳复制的文件中的新的目录项,然后该目录块到磁盘。

(六) 更新了全新的“访问”时间戳源目录条目,然后目录块到磁盘。

因此,您的问题不是仅一个文件,而是问是否对一千个文件执行所有这些操作可能会增加仅复制文件数据部分的时间?如果仅复制一个24MB的文件,则可以将其与1000个文件的复制时间进行比较。

备份机文件系统,各个文件复制到磁盘或分区上的另一个文件系统中很少采用,因为它是当你发现一个相当缓慢的过程。一种更快的方法是创建和写入单个归档文件,该文件以特殊的文件格式保存源目录条目和文件内容。备份程序和* nix命令'tar'可以输出这样的存档文件。(请注意,“ tar”仅处理存档文件,不使用诸如存档+压缩实用程序之类的压缩方式。)最快的备份方法是写入块设备(而不是设备上的文件系统),以便源文件系统为忽略(作为更多数据处理),可以执行源设备的逐块图像复制。


-1

这是一个概念类比:

(请记住,亲爱的互联网,类比有缺陷。请随时指出评论的方式。)

假设:

  • 信息传递的代理人 == 某个孩子(我们称他为Sam)正在将鸡蛋从一个篮子搬到另一个篮子。
  • 我猜是信息传播的媒介== 。这里不是很重要。
  • 这些鸡蛋来自各种物种,包括恐龙,神话般的水下海兽和龙。 (鸡蛋可能真的很大)
  • 文件大小的== 蛋卷。想想罗宾的蛋和德拉贡的蛋。

比喻:

因此,Sam必须将鸡蛋从一个篮子搬到另一个篮子,因为他在农场工作,而谁给他做任务都是卑鄙的。这个农场有各种各样的产卵动物,包括龙和神话中的海兽。Sam认为这很棒,原因有几个。(不是很重要,但这是我的比喻)
Sam在河边放着两个篮子,这是一个寒冷的地方,其中一个篮子里面放着鸡蛋。篮子里的鸡蛋大小从

  • 罗宾的鸡蛋占用了100 bytes篮子里的空间

  • 大小的海妖蛋2.7Gb

山姆必须开始移动鸡蛋,所以他只是开始抓鸡蛋并移动鸡蛋。假设他决定先移动一条龙蛋。现在鸡蛋非常重而且密实,所以他花了一些时间才能把东西拉到另一个篮子里。
山姆把龙蛋拿到另一个篮子里,他很生气。这很困难,因为这东西占用了很大的空间。仅仅一个鸡蛋就花了很长时间。

山姆是个傻瓜。

山姆回到他的第一个篮子去抓另一个鸡蛋。他意识到自己只有一个大的。但是,还有100,000亿个罗宾的蛋。

如您所见,山姆的下午毁了。他的天生倾向是恐龙蛋使他不得不移动会更糟。当我们谈论鸡蛋和篮子时,这是有道理的,但是计算机的交易量就高达100,000亿。

简而言之:

为什么要移动几个小文件而不是几个大文件的时间要长得多的答案,与移动文件的成本有关。您拥有的小文件越多,需要执行该操作的次数就越多。看待这种情况的另一种方式是谈论信息密度。


-2

读取FAT,重新定位磁头,在更改文件上打开文件-所有这些都需要时间


这是一个NTFS驱动器
Trindaz

在NTFS中,所有文件数据(文件名,创建日期,访问权限和内容)都作为元数据存储在主文件表中。主文件表(MFT)包含有关NTFS卷上每个文件,目录和图元文件的元数据。它包括文件名,位置,大小和权限。目录条目由文件名和“文件ID”组成,“文件ID”是代表“主文件表”中文件的记录号。文件ID还包含用于检测陈旧引用的重用计数。
Lazy Badger,

那么,您对这个问题的答案是否基于它必须做很多额外的工作来创建文件名,位置,大小,权限等记录的事实呢?这就是所有额外工作的来源。
特林达兹2011年

创建新内容阅读现有内容
Lazy Badger,
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.