4

为什么单个大文件比总体积相同的多个小文件复制起来要快很多?

 2 years ago
source link: https://www.zhihu.com/question/22555963/answer/1668324914
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

为什么单个大文件比总体积相同的多个小文件复制起来要快很多?

比如说,在我的电脑上(windows操作系统,NTFS文件系统),复制一个1G的文件到磁盘的另一个分区所花的时间比复制1024个1M的文件到磁盘的另一…
602
167,721
登录后你可以
不限量看优质回答私信答主深度交流精彩内容一键收藏
同济大学 计算机科学与技术硕士在读

恭喜你发现了文件系统的秘密,不妨再多告诉几个:

  1. 剪切比复制快得多
  2. 按住shift右键选“彻底删除”,比普通的“删除”快得多
  3. 把一堆小文件打包成zip,移动到目的地原地解压,也比直接复制粘贴文件夹快得多
v2-64b7b2175ab3f3a1319b033670ed0fe4_hd.jpg?source=1940ef5c

这些不仅对机械硬盘很有用,对固态硬盘照样成立

可以打个很简单的比方,假如文件系统是一本书,那么以上几种操作分别就类似于这样的几种情况:

  1. 复制大文件VS复制一堆小文件,一次复印一整个章节VS分多次复印乱七八糟、毫无规律的一堆页
  2. 剪切VS复制,直接在目录中把一章对应的页码改掉VS把一整章真的全部复印一遍
  3. 彻底删除VS删除,从目录里把一章删掉但是并不管书中的实际内容还在不在VS把该章节全部从书里撕掉
  4. 先压缩再解压VS复制一堆小文件,一次挑出所有页码对应的页统一复印VS分多次复印乱七八糟、毫无规律的一堆页

这样说就不难理解为什么类似的两种操作,速度差别这么大了吧?熟练掌握这四个小窍门可以省很多时间

v2-53b8808f028f5ab206e89af7fc4e6901_hd.jpg?source=1940ef5c
继续浏览内容
v2-88158afcff1e7f4b8b00a1ba81171b61_720w.png
发现更大的世界
v2-a448b133c0201b59631ccfa93cb650f3_1440w.png
Chrome
编程话题下的优秀答主
继续浏览内容
v2-88158afcff1e7f4b8b00a1ba81171b61_720w.png
发现更大的世界
v2-a448b133c0201b59631ccfa93cb650f3_1440w.png
Chrome
匿名用户
主要是元数据操作的耗时。例如,读取每个文件都要先读取对应inode,这是一次磁盘IO。

===============

鉴于这是我在知乎获得的最多赞同的答案(尽管才3个赞同,乃们不要笑我)。我决定再整理补充一点。

inode的相关知识可以看阮一峰的这篇博客(理解inode - 阮一峰的网络日志)。

我简单重述一下:

磁盘以扇区为单位,所以存在磁盘上的文件具体在那些扇区上需要记录下来,这个信息就记录在这个文件对应的inode中。当然,inode本身也要存放在磁盘上。所以当读取一个文件的时候,首先要读取到这个文件inode(这是一次磁盘IO),从中得知文件内容在哪些扇区中,然后读取这些扇区的内容。

所以,泛泛而谈的话(更精细的原因不好确定,正如刘贺所说),时间差距应该主要来源于inode操作。

1. 刘贺提到的几个因素都很正确且有启发性。另外,刘贺在评论中的解释更详细,移至答案中更合适,建议题主看看。已感谢!

2. 我是之前学习小文件存储的时候了解到这个问题的,在Facebook Haystack那篇论文的Background中提到了类似的问题。希望对题主有帮助。

继续浏览内容
v2-88158afcff1e7f4b8b00a1ba81171b61_720w.png
发现更大的世界
v2-a448b133c0201b59631ccfa93cb650f3_1440w.png
Chrome

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK