本地文件系统磁盘空间布局

文件系统的核心功能就是实现对磁盘空间的管理,要知道哪些空间可以用,哪些空间不可以用。

基于固定功能区

典型文件系统: Linux ExtX

ExtX将磁盘划分为等份的若干区域,这个区域被称为块组,磁盘空间的管理以块组为单位,以下是磁盘分区的布局图(以4K逻辑块大小为例),其中块组0最复杂,其他的相似。

Ext2磁盘布局

概念说明:

  • 超级块:存储文件系统级别的信息,比如逻辑块大小、挂载点等

  • 块组描述符表:ext文件系统每一个块组信息使用32字节描述,这32个字节称为块组描述符,所有块组的块组描述符组成块组描述符表GDT(group descriptor table)。假如block大小为4KB的文件系统划分了143个块组,每个块组描述符32字节,那么GDT就需要143*32=4576字节即两个block来存放。

  • 预留GDT块:保留GDT用于以后扩容文件系统使用,防止扩容后块组太多,使得块组描述符超出当前存储GDT的blocks。

  • inode:索引节点,即索引数据的节点,一个inode对应一个文件,通常每个块组有若干的inode,称为inode表。

    • 由于inode数量固定,且存储形式固定,可以根据偏移给与编号,即ino_id。
  • 位图,包括数据块位图和inode位图,用来描述对应资源的使用,0表示未使用,1表示已经使用。

我们使用如下命令可以创建并格式化一个文件系统:

dd if=/dev/zero of=30m.file bs=1M count=30
mkfs.ext2 30m.file -b 1K

然后使用dump2fs查看

Ext2磁盘布局实例-1

如果块大小为4K,那么有如下块组:

Ext2磁盘布局实例-2

原因:ExtX使用逻辑块存储数据位图,当block = 1K时,对应的数据块位图可以管理1024 * 8个数据块,即1024[一个block的size] * (1024 * 8) [block的数量]= 8M的空间,30M就需要4个块组;当block = 4K时,对应的数据块位图可以管理4 * 1024 * 8个数据块,即(4 * 1024) * (4 * 1028 *8) = 128M, 因此一个块组就可以。

基于非固定功能区

基于固定功能区的 磁盘空间管理布局空间智能清晰,便于手动进行丢失数据恢复,但是也容易出现资源不足的情况,比如海量小文件场景。

非固定功能区的磁盘空间管理也分为数据和元数据,但是元数据和数据的区域非固定,随着文件系统对资源的需求而动态分配,典型有XFS和NTFS。

XFS文件系统将磁盘划分为等份的区域,称为分配组(AG),XFS对每个分配组进行独立管理,AG的容量可以很大,最大可以达到1TB。

xfs磁盘布局

概念说明:

XFS文件系统通过两个B+树来追踪空闲空间,一个是基于块编号索引,另一个是基于空闲块的大小索引。

  • AGF(AG Free Space Block):磁盘空间管理通过两个B+树来实现,一个B+树通过块的编号来管理,一个B+树通过剩余块的大小来管理,通过两个不同的B+树实现对剩余空间的快速查找。

  • AGI(AG Inode Management):通过一个B+树管理inode,将64个inode(默认大小是256字节)打包为一个块(chunk),改块作为B+树的一个叶子节点。

    • inode的位置不固定,其编号分为相对inode编号和绝对inode编号两种。相对inode编号是指针对AG的编号,绝对inode编号是在整个文件系统中的编号。
xfs inode结构
  • AGFL(AG Free List):包含了在AG空间内一个存放指向预留空间的块指针的数组。这个空间不能用于任何类型的用户数据。

基于数据追加的磁盘空间管理

前面的磁盘布局方式都是原地修改,在随机IO比较多的情况下,不太适合SS设备,基于数据追加的磁盘布局方式,对数据的变更并非在原地修改,而是追加写的方式写到后面的剩余空间,将随机写转化为顺序写。比如NILFS2。

NILFS2将磁盘划分为若干的Segment,Segment默认大小事是8M。

NILFS2磁盘布局

NILFS2将文件分为若干类,分别是常规文件、目录文件、链接文件和元数据文件。而元数据文件包括:

  • inode文件(ifile):存储inode

  • 检查点文件(cpfile):存储检查点

  • 段使用文件(sufile):存储段的使用状态

  • 数据地址转换文件(DAT):虚拟块号和常规块号的映射

磁盘布局情况:

文件布局结构

参考文献:

https://blog.csdn.net/MyySophia/article/details/107946092

https://zhuanlan.zhihu.com/p/137906421?from_voters_page=true

《文件系统技术内幕》

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,423评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,147评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,019评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,443评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,535评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,798评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,941评论 3 407
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,704评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,152评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,494评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,629评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,295评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,901评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,742评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,978评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,333评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,499评论 2 348

推荐阅读更多精彩内容