zoukankan      html  css  js  c++  java
  • Linux下稀疏文件的存储方式

     写在前面:本博客为本人原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文!

    本博客全网唯一合法URL:http://www.cnblogs.com/acm-icpcer/p/8745685.html

    先引入两个问题:

    一、第一个字节处写入一个字符,然后再第1000个字节位置写入一个字符,文件系统显示的文件大小是多少,磁盘系统显示的文件大小是多少。

    二、仅仅在第一个字节处写入一个字符,文件系统显示的文件大小是多少,磁盘系统显示的文件大小是多少。

    首先我们要清楚一些概念:

    (1)稀疏文件与其他普通文件基本相同,区别在于文件中的部分数据是全0,且这部分数据不占用磁盘空间;

    (2)文件在Linux中是以inode数据结构为存在标志的;

    (3)inode节点采用了多重索引结构,主要体现在直接指针和3个间接指针。直接指针包含12个直接指针块,它们直接指向包含文件数据的数据块,紧接在后面的3个间接指针是为了适应文件的大小变化而设计:

      前12个直接指针,直接指向存储的数据区域。如Blocks大小为4096,则前12个直接指针就可以保存48KB文件。
      一级指针可存储文件大小计算假设每个指针占用4个字节,则一级指针指向的Block可保存4096/4个指针,可指向1024个Blocks。一级指针可存储文件数据大小为1024*4096 = 4MB。 
      二级指针可存储文件大小计算同样按照Blocks大小为4096,则二级指针可保存的Block指针数量为(4096/4) *(4096/4) = 1024*1024。则二级指针可保存的文件数量大小为(1024*1024)*4096 = 4GB。
      三级指针可存储文件大小计算以一级、二级指针计算方法类推,三级指针可存储的文件数据大小为(1024*1024*1024)*4096 = 4TB。

    按照我在先前的博客Linux的磁盘系统和文件系统显示的文件大小为什么不一样(du指令和ls指令的区别)

    分析得到的结论我们来一一讨论:

    1、第一个字节写入一个字符,第1000个字节位置写入一个字符。

      按照实验结果得出的结论:文件系统显示1000B,磁盘系统显示4KB。当然,这是因为我安装的是虚拟机ubuntu,在FAT32的条件下它并不支持稀疏文件的压缩,我知道在其他linux上,文件系统显示的是稀疏文件压缩后的结果,具体分析如下:

      文件系统存储稀疏文件时,inode索引节点中,只给出实际占用磁盘空间的Block 号,数据全零且不占用磁盘空间的文件Block并没有物理磁盘Block号。文件空洞部分不占用磁盘空间,文件所占用的磁盘空间仍然是连续的。

     

    2、第一个字节写入一个字符。

       文件系统显示1B,磁盘系统显示4KB。

     (附注:本篇博客参考了博客https://blog.csdn.net/sky101010ws/article/details/77415657)

    tz@COI HZAU

    2018/4/8

  • 相关阅读:
    jquery及相关兼容插件的版本搭配
    jquery IE7 下报错:SCRIPT257: 由于出现错误 80020101 而导致此项操作无法完成
    兼顾php和jquery新版本的checkbox的写法
    jquery.validate动态更改校验规则 【转】
    Google的10大座右铭
    用jQuery屏蔽掉按回车键时提交表单
    sizeof()和strlen()在求字符串长度时的差别
    Matlab使用心得
    C++ 数据类型及相关问题 及输出精度控制
    原生javascript满屏上下滚动
  • 原文地址:https://www.cnblogs.com/acm-icpcer/p/8745685.html
Copyright © 2011-2022 走看看