• windows “文件大小”与“占用空间”、文件系统与文件拷贝


    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负担更重,需要匹配更多的信息。

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

  • 相关阅读:
    Mybatis
    spring2
    servlet
    MyBatis1
    Docker容器保存为镜像文件并发布到DockerHub上
    【JS】提取字符串中的分数,汇总后算出平均分,并与每个分数比较,输出
    CentOS下创建管理员权限用户
    Centos安装文件传输软件rz sz
    2022年的零日漏洞影响了哪些平台?
    关于渗透测试的优缺点,你知道吗?
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9421394.html
Copyright © 2020-2023  润新知