• 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

  • 相关阅读:
    android如何在代码中设置margin
    也许游戏 它P/N图分析
    【淡墨Unity3D Shader计划】四 热带雨林的文章: 排除、深度测试、Alpha测试和基本雾编译
    HDU 3060 多边形面积并
    onmouseover和onmouseout的烦恼
    LoaderManager使用具体解释(三)---实现Loaders
    [每天一个Linux小技巧] gdb 下一次运行多个命令
    VB.NET版机房收费系统—DataGridView应用
    数据结构导论第一遍
    轻松搞定面试中的二叉树题目
  • 原文地址:https://www.cnblogs.com/acm-icpcer/p/8745685.html
Copyright © 2020-2023  润新知