这里以 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会收到文件系统本身的限制。

Linux文件系统的详解的更多相关文章

  1. linux文件系统节点详解

    linux文件系统有两层结构,逻辑结构和物理结构.也就是inode和block. 每个文件都有一个inode, 记录文件属性:权限,时间还有最重要的block号码. block是实际存放文件内容的地方 ...

  2. 十一、linux文件系统权限详解

    对于文件系统权限,我们前面已经讲解了一部分,这里就不在重复了. 1.修改文件权限有两种,一种是数字.一种是字母 (chmod 的修改只能是属主或者root) 数字: 修改目录权限和目录内所有文件的权限 ...

  3. Linux /dev目录详解和Linux系统各个目录的作用

    Linux /dev目录详解(转http://blog.csdn.net/maopig/article/details/7195048) 在linux下,/dev目录是很重要的,各种设备都在下面.下面 ...

  4. Linux find命令详解

    转自Linux find命令详解 一.find 命令格式 1.find命令的一般形式为: find pathname -options [-print -exec -ok ...] 2.find命令的 ...

  5. linux lsof命令详解

    linux lsof命令详解 简介 lsof(list open files)是一个列出当前系统打开文件的工具.在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访 ...

  6. Linux 内存机制详解宝典

    Linux 内存机制详解宝典 在linux的内存分配机制中,优先使用物理内存,当物理内存还有空闲时(还够用),不会释放其占用内存,就算占用内存的程序已经被关闭了,该程序所占用的内存用来做缓存使用,对于 ...

  7. Linux lsof命令详解和使用示例【转】

    所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接 ...

  8. 转载]OK6410之tftp下载内核,nfs挂载文件系统全过程详解[转]

    原文地址:OK6410之tftp下载内核,nfs挂载文件系统全过程详解[转]作者:千山我独行 由于工作的平台也是嵌入式,差不多的平台,所以一直就没有把自己买过来的ok6410板子好好玩玩.以前一直都是 ...

  9. [转帖]Linux chattr 命令详解

    Linux chattr 命令详解 https://www.cnblogs.com/ftl1012/p/chattr.html 常见命令参数 1 2 3 4 5 6 7 8 9 10 11 12 A: ...

随机推荐

  1. Extjs treePanel过滤查询功能【转】

    Extjs4.2中,对于treeStore中未实现filterBy函数进行实现,treestore并未继承与Ext.data.Store,对于treePanel的过滤查询功能,可有以下两种实现思路: ...

  2. django 配置xamdin遇到的坑

    是在 Django==1.11.7 这个版本下配置的,需要说明的是,不是通过pip install xadmin方式安装的 在github上下载的xadmin源码包,需要在项目的根目录下创建extra ...

  3. html常见页面动画插件

    wow.js页面滚动动画 scrollever.js页面滚动动画 textillate.js页面字体效果 ihover.js手表hover效果插件 loaders.css页面预加载动画

  4. Dubbo 的应用

    ---  用于大规模服务化,通过在消费方获取服务提供方的地址列表,实现负载均衡,减轻服务器压力. 最简单调用图 节点角色说明: l  Provider: 暴露服务的服务提供方. l  Consumer ...

  5. IIC总线学习

    IIC总线 IIC协议简要说明: 1.2条双向串行线,一条数据线称为SDA,一条时钟线SCL,双向半双工 2.传输的设备之间只是简单的主从关系,主机可以作为主机发送也可以作为主机接收,任何时候只能由一 ...

  6. 【CodeForces】790 C. Bear and Company 动态规划

    [题目]C. Bear and Company [题意]给定大写字母字符串,交换相邻字符代价为1,求最小代价使得字符串不含"VK"子串.n<=75. [算法]动态规划 [题解 ...

  7. 持续集成工具Jenkins安装、部署、使用

    本文介绍jenkins,利用其做项目发布与持续集成交付工具. 一.Jenkins是什么? Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括: 1.持续的软件版本发布 ...

  8. 搭建hibernate

    需要导入的hibernate的包 其中所需要的依赖包  需要的配置文件 一个是元数据orm的配置文件 例如 package com.fmt.hibernate;public class Custome ...

  9. 【洛谷 P2216】 [HAOI2007]理想的正方形(二维ST表)

    题目链接 做出二维\(ST\)表,然后\(O(n^2)\)扫一遍就好了. #include <cstdio> #include <cstring> #include <a ...

  10. 【洛谷 P4360】 [CEOI2004]锯木厂选址(斜率优化)

    题目链接 一开始我的\(dp\)方程列错了,其实也不能说列错了,毕竟我交上去还是把暴力的分都拿到了,只是和题解的不一样,然后搞半天没搞出来去看题解,又看不懂,对不上,原来状态设置不一样自闭了. \(f ...