现代很多文件系统都采用了 extent 替代 block 来管理磁盘。 Extent 就是一些连续的 block,一个 extent 由起始的 block 加上长度进行定义。

Extent 能有效地减少元数据开销。为了进一步理解这个问题,我们还是看看 ext2 中的反面例子。

ext2/3 以 block 为基本单位,将磁盘划分为多个 block 。为了管理磁盘空间,文件系统需要知道哪些 block 是空闲的。 Ext 使用 bitmap 来达到这个目的。 Bitmap 中的每一个 bit 对应磁盘上的一个 block,当相应 block 被分配后,bitmap 中的相应 bit 被设置为 1 。这是很经典也很清晰的一个设计,但不幸的是当磁盘容量变大时,bitmap 自身所占用的空间也将变大。这就导致了扩展性问题,随着存储设备容量的增加,bitmap 这个元数据所占用的空间也随之增加。而人们希望无论磁盘容量如何增加,元数据不应该随之线形增加,这样的设计才具有可扩展性。

下图比较了 block 和 extent 的区别:采用 extent 的 btrfs 和采用 bitmap 的 ext2/3

在 ext2/3 中,10 个 block 需要 10 个 bit 来表示;在 btrfs 中则只需要一个元数据。对于大文件,extent 表现出了更加优异的管理性能。

Extent 是 btrfs 管理磁盘空间的最小单位,由 extent tree 管理。 Btrfs 分配 data 或 metadata 都需要查询 extent tree 以便获得空闲空间的信息。

注:EXT4文件系统也采用了基于extend的文件存储

extend数据结构:(基于linux3.2内核)

struct fiemap_extent {__u64 fe_logical;  /* logical offset in bytes for the start of* the extent from the beginning of the file */__u64 fe_physical; /* physical offset in bytes for the start* of the extent from the beginning of the disk */__u64 fe_length;   /* length in bytes for this extent */__u64 fe_reserved64[2];__u32 fe_flags;    /* FIEMAP_EXTENT_* flags for this extent */__u32 fe_reserved[3];
};struct fiemap {__u64 fm_start;        /* logical offset (inclusive) at* which to start mapping (in) */__u64 fm_length;    /* logical length of mapping which* userspace wants (in) */__u32 fm_flags;      /* FIEMAP_FLAG_* flags for request (in/out) */__u32 fm_mapped_extents;/* number of extents that were mapped (out) */__u32 fm_extent_count;  /* size of fm_extents array (in) */__u32 fm_reserved;struct fiemap_extent fm_extents[0]; /* array of mapped extents (out) */
};

主要函数:

int fiemap_fill_next_extent(struct fiemap_extent_info *fieinfo, u64 logical,u64 phys, u64 len, u32 flags)
int __generic_block_fiemap(struct inode *inode,struct fiemap_extent_info *fieinfo, loff_t start,loff_t len, get_block_t *get_block)

基于Extent 的文件存储(fiemap)相关推荐

  1. 基于iscsi实现文件存储共享

    简单介绍两个概念: iSCSI:Internet Small Computer System Interface.是一种基于 TCP/IP的协议,用来建立和管理 IP 存储设备.主机和客户机等之间的相 ...

  2. springboot2.X手册:基于OSS解决文件存储(一年9元^^,赚了)

    今天有个非常巧合的机会,无意间发现阿里云的OSS一年只需要9块钱,5年只需要45块钱,有40G容量,这是什么概念?在送人吗?赶紧撸一把,有可能是我以前没发现,但是我记得以前好贵的~~~ OSS介绍 & ...

  3. springboot2.2.X手册:基于OSS解决文件存储(一年9元^^,赚了)

    上一篇:springboot2.2.X手册:对象复制哪种最快?7种复制方式性能对比 今天有个非常巧合的机会,无意间发现阿里云的OSS一年只需要9块钱,5年只需要45块钱,有40G容量,这是什么概念?在 ...

  4. BigData之MongoDB:MongoDB基于分布式文件存储数据库的简介、下载、案例应用之详细攻略

    BigData之MongoDB:MongoDB基于分布式文件存储数据库的简介.下载.案例应用之详细攻略 目录 MongoDB的简介 1.MongoDB的主要功能特性 2.对MongoDB进行增删改查( ...

  5. MongoDB 一个基于分布式文件存储的数据库

    简介 MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. 特点 它的特点是高性能.易部署.易使用,存储数据非常方便.主要功能特性有: ...

  6. 基于Web的文件管理系统,支持Office、WPS预览/编辑、在线解压缩、文件分享、文件加密、远程存储、远程文件推送、秒传、断点

    基于Web的文件管理系统,支持权限管理.历史版本管理.Office预览/编辑.WPS预览/编辑.在线解压缩.文件分享.文件加密.远程存储.远程文件推送.秒传.断点续传.智能搜索.文件备注.本地自动备份 ...

  7. 基于天翼云OSS实现文件存储

    基于天翼云OOS实现文件存储 1.技术分析 2.实现详细步骤 3.实现代码 1.技术分析 因项目原因必须采用天翼云OOS,而天翼云OOS开发文档简直一团糟.本文将实现基于OOS文件上传功能,若有不足, ...

  8. 基于FastDfs的分布式文件存储系统设计

    前言 FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等,解决了大容量存储和负载均衡的问题.特别适合以文件为载体的在线服务 ...

  9. 基于SpringBoot下使用分布式文件存储FastDFS

    一.FastDFS简介 1.1 FastDFS体系结构 FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等,解决了大容量存 ...

最新文章

  1. LCS最长公共子序列和LIS最长上升子序列——例题剖析
  2. NOD32: 教育网、公网超级 病毒更新服务器
  3. IBM发明世界首个人造神经元,人工智能的底层硬件基石已完成!
  4. Qt for Mac 设置软件开机自启动
  5. GitHub上最受开发人员欢迎的5大Java项目
  6. jdbc连接gp单例模式_JDBC连接备忘单
  7. java判断线程是否死锁_c++多线程锁 Mutex  自动判断死锁
  8. python 四足机器人运动学_撸了个四足机器人
  9. centos7 安装java 8_centos7 在linux系统进行安装jdk1.8过程
  10. NeurIPS 2020 | 微软亚研院论文摘录之强化学习GAN篇
  11. Linux服务器出现:No space left on device的解决方法
  12. 部署和操作 Enterprise Library 加密应用程序块
  13. java list判断是否存在字符串_java怎么判断字符串是否存在于list集合中?
  14. 3.2 矩阵乘积的秩
  15. tp5 admin.php,TP-admin即基于ThinkPHP5拿来即用高性能后台管理系统
  16. 比较流行的日志分析软件
  17. 色差仪确保番茄酱色彩一致性
  18. python中re.sub函数
  19. 风影ASP.NET基础教学 13 NET3.0特性补充
  20. JAVA中类、对象、方法之间的关联关系

热门文章

  1. 坚果P2投影仪(mStar 6A628)底层硬件分析
  2. 期刊信息管理list.php,科学网—【信管学人国际期刊投稿目录列表】-Journal List for Scholars in Info Mgt - 陈晓宇的博文...
  3. 51单片机怎么显示当前时间_51单片机数码管静态显示和动态显示原理及实验
  4. 【计组】Cache 全相连 组相联 直联
  5. 2014年工作中遇到的20个问题:101-120
  6. 解决X-Shell 6强制更新的问题
  7. 【Android适配问题集锦-相机类】Camera拍照时快门咔嚓声适配问题
  8. android 网络mp3格式,Android 使用URLConnection下载音频文件的方法
  9. android 技术2016,2016安卓模拟器技术更成熟 优秀产品脱颖而出
  10. FPGA之IIC(I2C)通信EEPROM控制器设计