前言:extent和blockmap是张宇的描述方法,可能与其他资料上的不完全一致,按意思    对应即可

任何一种成熟、可靠的文件系统,其索引机制都是相当核心的技术实现。当然,此处并不包括像CDFS,tar之类(不能支持写操作的)的打包型文件系统。仅仅因为需要支持写操作,文件系统的设计上就需要顾虑太多,对于任何一个文件,可能会随时增加或减少内容,而伴随着容量的改变,磁盘空间的分布、文件占用块的分布需要随之动态改变,这就需要索引机制来表述这种改变。

extent和blockmap是两类典型的索引实现方案,事实上,文件系统也似乎仅能按这2种方案(或共同)来实现索引。extent是基于片断的索引方案,blockmap是基于分配块的位图索引。

先说blockmap,这是用在ufs、sco htfs、ext2/3、reiserfs上的索引模式,意思是每个文件的分配块都有一个索引与之对应,是一对一的索引关系。举例来说:EXT3上有个a.dat,文件大小是4M,文件系统的块大小是4K,那这意味着a.dat会占用文件系统的1024个块。对这1024个块,系统会提供1024个4字节(即4096个字节)的索引表,来描述这1024个块到底位置在哪里(就像一个包含1024个对象的指针数组)。这样,文件系统驱动层下了指令,要读或写某个块,可以不用查询直接定位这个特定块。

显而易见,Blockmap的索引机制,需要较大索引空间做保障,随机读写时如跨度太大,缓冲机制无法一次性读入全部索引信息,效率便会下降得多。同时磁盘空间浪费很大(如同EXT3,在节点设计、文件索引等方面全部是定长的MAP机制实现,所以,ext3的磁盘空间浪费严重)。另外,如果是大文件,因块索引极大,就需要对索引块引入几级索引机制(似乎不太好理解),定位某些块时,也需要几层转换。

再谈extent方式,用于ntfs、Vxfs、jfs、ext4等文件系统。其实现方式和blockmap不同的是,索引是按分配的片断记录,只记起始块、连续块数、及文件内部块位置(NTFS叫VCN的东东)。比如上述例子,如果一个EXT4上的4M文件,块大小同样为4K,如果这个文件分配时是连续分配的,只需记录3个数字:(文件内部块号:0,文件系统分配起始块:x,连续块数:1024),不再需要1024个索引空间来描述。当然,如果这个文件有多个碎片组成,则需要多条记录来实现。

extent其优点是索引空间占有率较少,连续读写时会有优势,但缺点是算法复杂度略高。比如一个文件由100个片断(碎片)组成,需要定位到文件内部10M的偏移,则需要二叉查找属于哪个片断,再根据片断的起始地址计算到具体的分配块地址,才可以把数据读出来。如果像NTFS一样,片断本身都由变长方式实现,则内核判断上就更麻烦,文件系统崩溃的可能性也就很大了。

以个人来看,纯粹的blockmap方式,在现在文件都很大的应用环境下,稍显不太适应,慢慢的应用会越来越少。而类似ntfs的变长extent记录方式,则感觉有点得不偿失,这似乎和微软不考虑性能,不考虑健壮性,只考虑功能实现的理念相吻合。

本文转自 张宇 51CTO博客,原文链接:http://blog.51cto.com/zhangyu/637537,如需转载请自行联系原作者

文件系统的两种文件索引模式extent和blockmap相关推荐

  1. Asp.Net Ajax的两种基本开发模式

    Asp.Net Ajax的两种基本开发模式 引言 最近花了一些时间,将微软Asp.Net官方的Ajax视频全部看了一遍,地址是http://www.asp.net/learn/ajax-videos/ ...

  2. android中资源文件的两种访问方式,Android_Android学习笔记-保存文件(Saving Files),Android设备有两种文件存储区域 - phpStudy...

    Android学习笔记-保存文件(Saving Files) Android设备有两种文件存储区域: 内部存储和外部存储 ("internal" and "externa ...

  3. 深入php-fpm的两种进程管理模式详解

    php-fpm的两种进程管理模式 php-fpm的进程数也是可以根据设置分为动态和静态的. 一种是直接开启指定数量的php-fpm进程,不再增加或者减少: 另一种则是开始的时候开启一定数量的php-f ...

  4. 认识LTE(七):LTE中的两种无反馈模式:发射分集(TM2)和开环空分复用(TM3)

    认识LTE(七):LTE中的两种无反馈模式:发射分集(TM2)和开环空分复用(TM3) 文章目录 认识LTE(七):LTE中的两种无反馈模式:发射分集(TM2)和开环空分复用(TM3) 零.代码地址 ...

  5. 基于python的selenium两种文件上传方式

    方法一.input标签上传     如果是input标签,可以直接输入路径,那么可以直接调用send_keys输入路径. 方法二.非input标签上传 这种上传方式需要借助第三方工具,主要有以下三种情 ...

  6. 嵌入式系统实验——【玄武F103开发板】顺序点亮4小灯和4小灯全亮两种点亮模式、并使用KEY1控制切换点亮模式

    一.实验目的 顺序点亮4小灯和4小灯全亮两种点亮模式.并可以使用KEY1控制切换点亮模式 二.实验思路: (一)示例程序分析 #include "stm32f10x.h" type ...

  7. *.REP和*.PHO文件是什么文件?为什么在GERBERCAM里导入这两种文件时,无法将元件坐标转出来?

    请教:*.REP和*.PHO文件是什么文件? [复制链接] 上一主题下一主题┊   离线roxana 0关注 0粉丝 289帖子 级别:一般会员 金币 2830 威望 6 贡献 1 好评 0 注册 2 ...

  8. 100A有源电力滤波器(APF)MATLAB仿真,两种谐波补偿模式:全阶补偿和选阶补偿

    100A有源电力滤波器(APF)MATLAB仿真,两种谐波补偿模式:全阶补偿和选阶补偿,matlab版本V2011,基于LCL滤波器的I型三电平拓扑仿真模型,三相四线制,软件锁相环,C语言编程提取谐波 ...

  9. 二阶段补充:文件上传服务端处理,后端文件上传、前端两种文件上传方式

    1.文件上传 2.后端文件上传 两种方案: 兼容性较好的commons-fileupload,支持所有版本的Servlet,即所有版本的Tomcat 优点: 兼容性 缺点 需要外部jar,比较麻烦.代 ...

最新文章

  1. 全球首款L4级无人车量产!李彦宏:吹过的牛实现了
  2. comet4j开发指南
  3. 安卓调用系统相机三步走
  4. IDEA编译运行Springboot+vue项目卡死,一直building和copying resources
  5. stringbuilder删除最后一个字符_Java类-StingBuffer,StringBuilder
  6. [cocos2d-x]屏幕自适应解决的方法
  7. Android系统(2)---init.rc知识
  8. webpack静态资源地址注入html,Webpack4+ 多入口程序构建
  9. 公交车宜配备逃生绳索
  10. 【OpenCV学习】对于仕琪所写《OpenCV教程基础篇》的一些想法
  11. 二进制转十六进制的详细步骤
  12. HTML仿腾讯微博首页(Dreamweaver网页作业)
  13. 一次精彩的皮卡车降噪试验过程
  14. (转)软件版本中的Alpha,Beta,RC,Trial是什么意思?
  15. win10 升级到21H1 后Thinkpad X系列本本 音频驱动 没有声音
  16. .Net iTextSharp 给Pdf添加图片水印
  17. 海贝播放器在iso上无法识别cue文件的问题
  18. C++ 使窗口最大化最小化
  19. 惠普打印机打印不出来
  20. 婚纱影楼高价买样片忽悠新人成行业潜规 不同影楼样片相同实拍效果差距大

热门文章

  1. HDU 5119 Happy Matt Friends ——(背包DP)
  2. Java遇见HTML——JSP篇之JSP指令与动作元素
  3. Task.Run vs Task.Factory.StartNew
  4. hdu-----(4514)湫湫系列故事——设计风景线(树形DP+并查集)
  5. JAVA SAX解析XML字符串实例
  6. response设置编码的三种方式
  7. apache用proxy 实现URL 转发
  8. 快速撑握C#知识点系列之(struct)结构
  9. 通过微信企业号发送zabbix报警
  10. Web 架构师的能力(转)