为什么cp很多小文件非常慢——对cp和rm命令的一些思考
linux中的文件复制命令——CP
linux中文件剪切的命令——MV
1.问题背景
今天在某个目的动作过程中想把一个文件夹下的文件复制到另外的一个文件夹下
cp -fr ./dir1/ /dir2/
发现终端一直在提示运行中,就是一直在复制,好一会儿都没有停。我要复制的文件都不是很大,全部加起来也就80M的样子,但是有很多零散的小文件,很多。
此时我已经按下enter很久了。。。。但是提示符一直闪啊闪。。。就是不停
2,问题探索
看看究竟发生了什么
cp -vfr ./linux-source-3.8.0/ /wa/
这家伙足足闪了八分钟。。。还好,最后停了。。。
尝试用rm把一个文件夹里面的文件移动到另外的文件夹
可以看到这里只有一个“动作”--->
而用cp命令的时候,每一个文件都有一个--->“动作”
我们可以大胆的推理,这里rm实质上只是交换了指针变量里储存的地址,而cp命令要把所有的文件地址变量都找到,然后读取内容,然后再另外的文件夹地址下开辟一块内存去储存文件内容。这就涉及到寻址。而寻址就是造成这种“出奇的慢”的原因。
3.对于cp和win里的ctrl+c相比很慢的解释----文件系统寻址方式造成的差异
求助了贴吧的“小_埃”,这是他的解释
“零散文件会导致硬盘频繁寻道,去看看硬盘的平均寻道时间参数吧,一次就若干毫秒,这段时间之内所有读写操作全要停下来等”
“另外,不同文件系统对于小文件的处理方式,也会对性能造成巨大的影响。
楼主说Win7比Linux复制同样的文件快,这不是不可能的,而且是很有可能的。
ext4是怎么实现的我不太清楚,我就说FAT32和NTFS两个文件系统的实现吧。
FAT32是不管文件的情况,一律把文件名等信息放在文件分配表里,然后把文件内容放在磁盘后面的扇区中。
而NTFS则会判断文件大小,如果文件足够小,则将文件名、文件内容一起放进MFT里,如果文件大小更大,不适合放进MFT里,则会把文件名等信息放在MFT里,并把文件内容放在磁盘后面的扇区中。
这两种文件系统在处理零散小文件时,性能差距非常巨大,前者需要磁盘频繁寻道,复制每一个小文件需要寻道4次以上,而后者复制若干个零散小文件,只需要寻道几次就够了。7200rpm的硬盘平均寻道时间都在6~9ms左右,因此性能差距立见分晓”
为什么cp很多小文件非常慢——对cp和rm命令的一些思考的更多相关文章
- 如何利用Hadoop存储小文件
**************************************************************************************************** ...
- 用Hadoop AVRO进行大量小文件的处理(转)
使用 使用使用 使用 HDFS 保存大量小文件的缺点:1.Hadoop NameNode 在内存中保存所有文件的“元信息”数据.据统计,每一个文件需要消耗 NameNode600 字节内存.如果需要保 ...
- linux 用 rsync 快速删除大量小文件
假设我们在目录 /tmp/to_delete 下有很多小文件 a1 a2 a3 f1 f2 f3 现在我们想快速的删除f 开头的文件. 如果文件量大,用rm 可能会失败,而且会很慢, 所以用rsync ...
- MaxCompute小文件问题优化方案
小文件背景知识 小文件定义 分布式文件系统按块Block存放,文件大小比块大小小的文件(默认块大小为64M),叫做小文件. 如何判断存在小文件数量多的问题 查看文件数量 desc extended + ...
- Spark SQL 小文件问题处理
在生产中,无论是通过SQL语句或者Scala/Java等代码的方式使用Spark SQL处理数据,在Spark SQL写数据时,往往会遇到生成的小文件过多的问题,而管理这些大量的小文件,是一件非常头疼 ...
- 数仓面试高频考点--解决hive小文件过多问题
本文首发于公众号:五分钟学大数据 小文件产生原因 hive 中的小文件肯定是向 hive 表中导入数据时产生,所以先看下向 hive 中导入数据的几种方式 直接向表中插入数据 insert into ...
- 干货!Apache Hudi如何智能处理小文件问题
1. 引入 Apache Hudi是一个流行的开源的数据湖框架,Hudi提供的一个非常重要的特性是自动管理文件大小,而不用用户干预.大量的小文件将会导致很差的查询分析性能,因为查询引擎执行查询时需要进 ...
- HDFS 07 - HDFS 性能调优之 合并小文件
目录 1 - 为什么要合并小文件 2 - 合并本地的小文件,上传到 HDFS 3 - 合并 HDFS 的小文件,下载到本地 4 - 通过 Java API 实现文件合并和上传 版权声明 1 - 为什么 ...
- 彻底解决Hive小文件问题
最近发现离线任务对一个增量Hive表的查询越来越慢,这引起了我的注意,我在cmd窗口手动执行count操作查询发现,速度确实很慢,才不到五千万的数据,居然需要300s,这显然是有问题的,我推测可能是有 ...
随机推荐
- .NET(C#):使用XPath查询带有命名空间(有xmlns)的XML
原文http://www.cnblogs.com/mgen/archive/2011/05/24/2056025.html 众所周知,XmlDocument可以进行XPath查询,但实际上这里所说的X ...
- Azure Traffic Manager 现可与 Azure 网站集成!
编辑人员注释:本文章由 WindowsAzure 网站团队高级专家级工程师 Jim Cheshire撰写. AzureTraffic Manager 已经推出有一段时间,这是一种跨多个区域管理网 ...
- CSS 常用自定义样式
目录: 1. 文本单行显示,并对超出部分截断以省略号代替: 2.列布局或栅格布局:比如:左侧固定宽度,右侧占满剩下的宽度: 章节: 1. 文本单行显示,并对超出部分截断以省略号代替:参见以下代码: d ...
- Uva 1612 Guess
Thinking about it: 题目要求最后一名(也就是第N位)的分数要尽量的大,那么就一定要求第N-1名的分数也要尽量大.假如N-1可以取400和500,那么N-1应该取500,如果取400, ...
- c#SocketIO4NetClient访问node js
提到Node,不能错过的是WebSocket协议.它与Node之间的配合堪称完美,其理由有两条. 1.WebSocket客户端基于时间的编程模型与Node中自定义事件相差无几. 2.WebSocket ...
- Delegation事情委托或代理
在javasript中delegate这个词经常出现,看字面的意思,代理.委托.那么它究竟在什么样的情况下使用?它的原理又是什么?在各种框架中,也经常能看到delegate相关的接口.这些接口又有什么 ...
- php使用mysql扩展库链接mysql数据库(查询)
php链接数据库可以使用mysql扩展库,mysqli,pdo这几种方式,相比java而言要麻烦一点,因为它不像java那么统一.从代码的难易程度来说php的确要简单许多.步骤大体如下 1.打开数据库 ...
- CCTableView 简单样例
非常像android中的listview #pragma once; #include "cocos2d.h" using namespace cocos2d; //使用CCTab ...
- 手把手教你在openshift上搭建wordpress博客(二)
相同公布于:http://www.longgaming.com/archives/128 推荐前往阅读 这一篇文章主要介绍一些经常使用插件的使用和配置. 下面是我个人安装的一些插件.大家能够依据须要自 ...
- 简单的web三层架构系统【第三版】
今天是第三版,和前几天一样今天还是要对代码进行优化,三层架构是一种思想,具体能不能使得整个系统安全和高性能,还是要看代码编写的是否合理,逻辑性是否严谨. 昨天偶然间看到别人写的三层架构中,竟然没有在方 ...