0. 文件大小与占用空间

“文件大小”和“占用空间”的差别

首先需要明确的是,“文件大小”代表着文件的真实大小(文件内容实际包含的全部字节数),“占用空间”往往略大于“ 文件大小”,如下图所示:

“占用空间”表示为计算机磁盘为存储该文件,所需分配的存储空间,显然“占用空间”必须不小于“文件大小”。事实上,windows 采用 NTFS 和 FAT 的文件系统管理磁盘文件,所有文件系统都是基于簇(分配单元)为大小,即文件在磁盘上的所占空间不再以 Byte 为衡量单位,最小计量单位是“簇(Cluster)”。

1. 磁盘分区与文件系统及簇大小的查看

windows 下使用 Chkdsk(check disk)来查看文件系统类型以及簇大小。

首先以管理员权限运行 cmd,在命令行输入 Chkdsk,即可在只读模式检查本地文件系统。检测结束得到的分析结果中,“分配单元”或者“Allocation unit”即表示簇的大小。

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

将一个1GB大小的文件分割为 1024 个 1MB 大小的文件快,拷贝的效率要远低于直接拷贝 1 GB 大小的整个块。

从源到目的,复制一个文件需要做的有1-3步:

  • 1、在目标位置创建对应的文件名项,因为文件名也是要保存在磁盘上的;
  • 2、如果文件有内容,把文件内容写入磁盘,并按照块对齐(512字节-64K不等)
  • 3、如果文件有内容,在一个特定的位置把文件内容的块的信息记录下来,标记这些块属于这个文件并且是被使用了

对于1G的文件,需要的也是这三步,对于1024个1M的文件,需要的是 1024×3 步。对于磁盘设备有IOps的概念,就是每秒能执行的 I/O 次数,对于复制1024个1M文件来说,那么至少需要1024*3次 I/O,对于1G的文件来说,至少需要3次。所以从次数来说,复制小文件越多,磁盘读写次数越多,虽然有 cache 等一系列优化的机制,但整体次数还是要高很多的。并且,磁盘写1字节,和写512字节(一个扇区)的代价是相同的,虽然写入文件名短,但仍然需要写入512字节(一个扇区)。因此写1G文件就至少要比写1024*1M文件多写512K这么多数据。如果说512K这么多数据好像也不太多,但还有一个不可忽略的操作就是比较文件名:复制文件的时候,需要判断是否有重名,复制1个文件,检查1次就可以了,复制1024个文件,就需要检查1024次,并且随着文件的增多,检查的负担也越重(要跟之前的文件都检查一下)。

所以总结下来有三点:

  • 1、小文件导致IO次数增多,磁盘IO次数本身就有瓶颈;
  • 2、小文件实际写入的内容也更多(这里我没包括索引项,实际索引项也很多,但不好表达);
  • 3、小文件导致CPU负担更重,需要匹配更多的信息。

以上三点造成了小文件复制比大文件慢,所有操作系统的所有文件系统基本上都有以上三个原因。

windows “文件大小”与“占用空间”、文件系统与文件拷贝相关推荐

  1. VNC viewer在windows与linux之间文本和文件拷贝

    主要包括两个方面--文本和文件 (1)VNC viewer中的文字复制粘贴 vncconfig& 出现下面窗口--得一直保留着 vncconfig -nowin&--不会出上面这个窗口 ...

  2. Linux和Windows稀疏文件拷贝移动

    1. 概述 稀疏文件(英语:sparse file)是一种计算机文件,它能尝试在文件内容大多为空时更有效率地使用文件系统的空间.它的原理是以简短的信息(元数据)表示空数据块,而不是在在磁盘上占用实际空 ...

  3. Windows中常用文件拷贝工具的评测和对比 1

    对于Windows用户,拷贝文件是再常用不过的功能.打开文件浏览器(FileExplorer),把一个盘符的一个文件夹拖拽到另一个盘符下面是非常简单的操作.这样的文件拖拽操作在两端都是本地盘的情况下速 ...

  4. 服务器不知道循环生成文件,Windows服务器下PowerShell命令往服务器共享文件夹进行文件拷贝、循环文件重命名...

    由于项目需要,接触到了PowerShell命令,但是苦于以前没有接触过,几句话的代码百度搜索了很长时间. 主要功能是Windows服务器下利用PowerShell命令实现文件拷贝.文件重命名(去掉文件 ...

  5. Windows文件系统中文件的储存原理、文件粉碎机的原理、数据恢复的原理

    首先要明确说明三个问题: Windows文件系统中文件的储存原理.文件粉碎机的原理.数据恢复的原理. Windows文件系统中文件的储存原理:Windows文件系统包括FAT12.FAT16.FAT3 ...

  6. Windows文件系统以及文件粉碎原理

    1.1硬盘揭秘: 物理存储方式: 目前的存储方式有磁存储,电存储,光存储.U盘就是电存储,VCD,DVD光盘用的是光存储,我们计算机用的硬盘就是用的磁存储.各种存储方式在物理存储介质不同外,在逻辑层面 ...

  7. 将windows系统主机上的文件拷贝到Linux系统中;将Linux系统中的文件粘贴到Windows主机中

    本篇文章主要实现将windows主机上的文件复制到Linux服务器上,这里为了方便演示,我举例放在C盘中的一个test101.py文件,现在我要将它放在Linux系统的home下的shao目录下. 首 ...

  8. 从服务器上复制文件是出错,对Windows Server文件拷贝错误的排错 | 挨踢茶馆

    有的时候向Windows Server共享拷贝大文件会出现错误.Performance Monitor或者PowerShell命令可以帮助你找到并且修复这些文件拷贝的错误. Server Messag ...

  9. 浅谈windows文件拷贝

    目录 一.前言 二.文件拷贝的几种方式 1.使用copy命令 2.使用xcopy命令 3.使用robocopy命令 4.使用powershell中的copy-item 5.使用第三方拷贝工具 一.前言 ...

最新文章

  1. leetcode--两数之和--python
  2. markdown 图片居中_Markdown更改字体、颜色、大小,插入表格等方法
  3. Numpy中的通用函数和聚合
  4. xhtmlConformance mode=Legacy/ 致ajax失效
  5. 汇编语言快速入门学习笔记
  6. java永生代和新生代_Java:永生的对象和对象的复活
  7. 开发者狂喜!微信小程序文档和工具放出
  8. Linux内存管理:内存分配:slab分配器
  9. [PHP]json_encode增加options参数后支持中文
  10. 剑三哪些插件是必备的_日常学习、办公必备的浏览器插件丨附安装教程(三)...
  11. python 包的使用 (二)——pyecharts
  12. 【图解】QT 布局、 sizeHint和SizePolicy概念
  13. DSDT/SSDT综合教程
  14. linux程序设计第四版中文pdf下载地址
  15. 管理者必须要精通的六项管理技能
  16. 无线服务器功能,无线自组织互联网的用户管理——Radius服务器的功能设计与实现...
  17. 数据驱动测试一:使用TestNG进行数据驱动
  18. pr2020lut导入_pr lut预设怎么安装-PR下导入lut预设的方法 - 河东软件园
  19. Android app ADB命令
  20. 微博小尾巴自定义名字中的Android,新浪微博自定义来自XX小尾巴怎么改 新浪微博显示来自XX小尾巴设置教程...

热门文章

  1. Visual C# 资源文件编程--创建资源文件
  2. 【java学习之路】(javaWeb篇)008.VUE
  3. MySQL为用户授权
  4. knife4j--api请求参数不一致问题
  5. Intellij IDEA的配置
  6. linux 文件句柄 sock,linux socket句柄
  7. Sklearn专题实战——针对Category特征进行分类
  8. 剑指offer面试题11. 旋转数组的最小数字(二分查找)
  9. LeetCode 236. 二叉树的最近公共祖先(递归)
  10. 编译原理课程作业-Cminus语言的词法及语法分析器实现