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
Linux下稀疏文件的存储方式的更多相关文章
- [转] Linux下用文件IO的方式操作GPIO(/sys/class/gpio)
点击阅读原文 一.概述 通过 sysfs 方式控制 GPIO,先访问 /sys/class/gpio 目录,向 export 文件写入 GPIO 编号,使得该 GPIO 的操作接口从内核空间暴露到用户 ...
- Linux下用文件IO的方式操作GPIO(/sys/class/gpio)(转)
通过sysfs方式控制GPIO,先访问/sys/class/gpio目录,向export文件写入GPIO编号,使得该GPIO的操作接口从内核空间暴露到用户空间,GPIO的操作接口包括direction ...
- Linux下用文件IO的方式操作GPIO(/sys/class/gpio)
通过sysfs方式控制GPIO,先访问/sys/class/gpio目录,向export文件写入GPIO编号,使得该GPIO的操作接口从内核空间暴露到用户空间,GPIO的操作接口包括direction ...
- Linux下搭建iSCSI共享存储的方法 Linux-IO Target 方式CentOS7-1810下实现
iSCSI(internet SCSI)技术由IBM公司研究开发,是一个供硬件设备使用的.可以在IP协议的上层运行的SCSI指令集,这种指令集合可以实现在IP网络上运行SCSI协议,使其能够在诸如高速 ...
- Linux下搭建iSCSI共享存储的方法 Linux-IO Target 方式 Debian9.5下实现
iSCSI(internet SCSI)技术由IBM公司研究开发,是一个供硬件设备使用的.可以在IP协议的上层运行的SCSI指令集,这种指令集合可以实现在IP网络上运行SCSI协议,使其能够在诸如高速 ...
- Linux下的文件及文件后缀名
Linux下的文件及文件后缀名 2013-03-14 15:34 6969人阅读 评论(0) 收藏 举报 ++++++++++++++++++++++++++++++++++++++正文+++++++ ...
- Linux 下查看文件字符编码和转换编码
Linux 下查看文件字符编码和转换编码 如果你需要在Linux中操作windows下的文件,那么你可能会经常遇到文件编码转换的问题.Windows中默认的文件格式是GBK(gb2312),而Linu ...
- (转)Linux下查看文件和文件夹大小 删除日志
场景:在sts中执行自动部署时候maven提示No space left on device错误,后来经检查发现是磁盘空间满了,用下面的方法分析发现tomcat下面的logs目录占用了很大的空间,删除 ...
- linux下各文件夹的结构说明及用途介绍
linux下各文件夹的结构说明及用途介绍: /bin:二进制可执行命令. /dev:设备特殊文件. /etc:系统管理和配置文件. /etc/rc.d:启动的配 置文件和脚本. /ho ...
随机推荐
- rinetd 一个linux下的端口转发工具
inux下使用iptables实现端口转发,配置较为复杂,使用rinetd工具可以实现快速配置和修改端口转发. 例:本机ip:1.1.1.1 需要实现访问本机的8080端口,自动转发到2.2.2.2 ...
- Hexo NexT 博客与Github page 关联指南
上篇文章 Hexo 博客框架NexT主题搭建指南 我们已经在本地搭建好了Hexo博客框架NexT 主题的博客程序,但是这感觉还是远远不够. 我们还想把它部署到我们的Github上,让其他人可以看到我们 ...
- Go Revel - i18n(国际化)
##Messages `Messages`信息是对内容提供翻译的外部文本片段.revel提供了组织每一种语言文本片段的message文件.自动区域查找.基于cookie覆盖的消息嵌套和参数. 术语表: ...
- JVM 内部原理(二)— 基本概念之字节码
JVM 内部原理(二)- 基本概念之字节码 介绍 版本:Java SE 7 每位使用 Java 的程序员都知道 Java 字节码在 Java 运行时(JRE - Java Runtime Enviro ...
- opencv_java import org.opencv.highgui.Highgui,类中无imread方法
opencv_java import org.opencv.highgui.Highgui,提示错误 2018年01月19日 14:50:25 小码农的路程 阅读数:358 原因:1.OpenCV ...
- 【转】 Windows下配置Git
[转自]http://blog.csdn.net/exlsunshine/article/details/18939329 1.从git官网下载windows版本的git:http://git-scm ...
- python中的selectors模块
它的功能与linux的epoll,还是select模块,poll等类似:实现高效的I/O multiplexing, 常用于非阻塞的socket的编程中: 简单介绍一下这个模块,更多内容查看 pyt ...
- (原)android系统下绑定Server的时候报MainActivity has leaked ServiceConnection的错误
今天在android系统下根据官方的demo代码,我们需要启动一个服务,并绑定,但在程序启动以后,老是报错: Activity MainActivity has leaked ServiceCon ...
- Linux软件源
Kali科大软件源: vim /etc/apt/sources.list 下面的粘帖进去. deb http://mirrors.ustc.edu.cn/kali kali main non-free ...
- TI开发环境下载资源
CCSV7.0 版本下载 http://processors.wiki.ti.com/index.php/Download_CCS IAR7.10 版本下载 https://www.iar.com/ ...