惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

宝玉的分享
宝玉的分享
小众软件
小众软件
J
Java Code Geeks
I
InfoQ
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
腾讯CDC
L
LangChain Blog
博客园 - 司徒正美
量子位
Y
Y Combinator Blog
C
Check Point Blog
T
Tailwind CSS Blog
D
DataBreaches.Net
Blog — PlanetScale
Blog — PlanetScale
N
Netflix TechBlog - Medium
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
F
Fortinet All Blogs
云风的 BLOG
云风的 BLOG
A
About on SuperTechFans
B
Blog RSS Feed
酷 壳 – CoolShell
酷 壳 – CoolShell
大猫的无限游戏
大猫的无限游戏
V
V2EX
阮一峰的网络日志
阮一峰的网络日志

博客园 - YiYezc

Django + Vue 学习日志( PART03:Django 模板) Django + Vue 学习日志(08Python 闭包和装饰器) Django + Vue 学习日志(07Python对象构造) Django + Vue 学习日志(06Python 对象相关) Django + Vue 学习日志(05CBV) Django + Vue 学习日志(04HttpRequest) Django+Vue 学习日志(03模板查找) Django+Vue 学习日志(02视图实例) Django+Vue 学习日志 Python的if语句 Python元组 Python列表操作 Python列表管理 Python列表元素管理 Python字符串 Python变量 centos安装autossh bash相关 Linux的bash快捷键 Vim程序编辑器 Linux下光盘镜像生成和刻录 Linux文件系统备份dump Linux下文件压缩与打包 Linux挂载 Linux磁盘分区 Linux文件访问和日志 block、inode、superblock详解 Linux的权限对于文件与目录的意义 命令与文件的查询 ctime, atime与mtime释疑
Linux文件系统的详解
YiYezc · 2016-02-22 · via 博客园 - YiYezc

这里以 EXT2 文件系统为例

在Linux下,一个磁盘的最前面是MBR,大小为512Byte

在每一个分区下,第一部分是boot sector,接下来是super block,再接下来是inode,最后是block。
对于每一个block而言,一般大小是4K,如果一个block已经存放了一个大小为1K的文件,那么剩余的空间是无法再被使用的。
一般一个文件的属性和占有的block号都是存放在inode中的,而block存放的是文件的实际内容。
每一个block和inode都是有编号的
在inode中记录一个文件消耗的空间是128Byte。
在superblock中记录的是inode和block的信息,比如有多少个block,已经用了多少个block,还有多少个block。

如果一个分区比较大,block会很多,这个时候可以将block分组,即block group
每一个block group中第一个部分存放的是superblock,作用是记录一共有多少个block,还剩多少个block。这个只是记录使用的情况,而具体被使用的编号需要在block对照表中查询了。
第二个部分存放的是系统文件的描述,包括每一个block group是从那一个block开始的,到那一个block结束的。
第三个部分是block对照表,作用是记录哪些block已经被使用了,哪些block没有被使用,第四个部分是inode的对照表,作用是记录哪些inode已经被使用了,哪些inode内有被使用,对照表也称作为位图。
第五个部分是indoe表
第六个部分是block

在inode中记录一个文件消耗的空间是128Byte。inode每指向一个block,就要消耗空间4Byte,由此可得一个inode指向的文件最大为128Byte/4Byte*4K=128K。实际上一般系统将一个inode划分成12个直接区,1个间接去,1个2间接区,1个3间接区。
对于直接区,每一个直接区直接指向一个block
对于间接区,该间接区指向一个block,然后这个被指向的block再指向别的block,实际上间接区通过这个方法可以间接的指向4K/4Byte=1024个block。
同理2间接区先指向一个block,然后这个被指向的block再指向别的block,第二次被指向的block最终再指向实际用来存储的block,这样间接区通过这个方法可以间接的指向1024*1024=1048576个block。
3间接区同理可以推算,但是要注意的是在实际文件系统中,大于2K的block会收到文件系统本身的限制。