Linux-鸟菜-7-Linux文件系统-EXT

Linux最传统的磁盘文件系统(filesystem)使用的是EXT2,所以先从EXT2开始了解。

/dev/sd[a-p][1-128]  为实体磁盘的磁盘文件名

/dev/vd[a-d][1-128]  为虚拟磁盘的磁盘文件名

Ext2(Linux second extended file system,ext2fs)

一个可被挂载的数据为一个文件系统而不是一个分区槽。

文件系统通常会将这两部分的数据分别存放在不同的区块,权限与属性放置到inode中,至于实际数据则放置到data block 区块中。另外,还有一个超级区块(superblock)会记录整个文件系统的整体信息,包括inode与block的总量、使用量、剩余量等。

每个inode与block都有编号,相关数据意义如下:

Superblock: 记录此filesystem的整体信息,包括inode/block的总量、使用量、剩余量,以及文件系统的格式与相关信息等。

Inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的block号码。

Block:实际记录文件的内容,若文件太大时,会占用多个block。

Inode/block资料存储示意图(索引式文件系统)

FAT文件系统图

文件系统一开始就将inode与block规划好了,除非重新格式化(或者利用resize2fs等指令更改文件系统大小),否则inode与block固定后就不再变动。但是如果文件系统过大,将所有inode与block放在一起有点不好维护。于是Ext2文件系统在格式化的时候基本上是区分为多个区块群组(block group)的,每个区块群组都有独立的inode/block/superblock系统。

在整体的规划当中,文件系统最前面有一个启动山扇区(boot sector),这个启动扇区可以安装开机管理程序,这个非常重要的设计,因为这样就可以将不同的开机管理程序安装到个别的文件系统最前端,而不用覆盖磁盘卫衣MBR,这样也才能制作出多重引导的环境。Block group下面的留个模块下面细说:

Data block [以ext2系统为例]

实际存储数据的地方,有编号,大小可以为1 2 4 K,在格式化的时候确定的,根据大小的不同,导致系统对文件管理的限制也就不同。如下:

*原则上,block的大小与数量在格式化完就不能够再改变了(除非重新格式化);

*每个block内最多只能防止一个文件的数据;

*如果文件大于block的大小,这一个文件会占用多个block数量;

*若文件小于block,则该block的剩余容量就不能够再被使用了(磁盘空间浪费)

Inode table(inode 表格)

*该文件的存储模式(rwx);

*该文件的拥有者与组群(owner/group);

*该文件的容量;

*该文件建立或状态改变的时间(ctime);

*该文件最近一次的读取时间(atime);

*最近修改时间(mtime);

*定义特殊性的标志,如SetUID

*真正内容指向(pointer);

*每个inode大小均固定为128bytes(新的ext4与xfs可设定到256bytes);

*每个文件都仅会占用一个inode而已;

*因此文件系统能够建立的文件数与inode数量有关;

*系统读取文件时需要先找到inode,并分析inode所记录的权限与用户是否符合,若符合才能够开始读取block的内容。

下面例子是展示128b的inode怎么存400MB的文件,通常每个block占用4b的index。直接存肯定不够,假如block位4K,那么400MB/4K*4b 远远大于128b,而每个文件又只能使用一个index来存,所以出现了直接,间接,双间接三间接等等。

Inode(假如block=1K)

12个直连接指向:12*1K=12K

间接 :256*1K=256K

双间接:256*256*1K=256^2K

三间接:256*256*256*1K=256^3K

总值:

将直连接、间接、双间接、三间接贾总,得到12+256+256*256+256*256*256=16G

所以当block为1K大小时,能够容纳的最大文件为16GB,但是不能用同样的方法计算2K以及4K block,因为大雨2K的block将会受到Ext2文件系统本身的限制。

Superblock(超级区块) 

Suiperblock是记录整个filesystem相关信息的地方,没有Superblock就没有filesystem了。

*block与inode的总量;

*未使用与已使用的inode/block数量;

*block与inode的大小(block与1,2,3K,inode为128/256bytes);

*filesystem的挂载时间、最近一次写入数据的时间、最近一次检验磁盘(fsck)的时间等文件系统相关信息;

*一个validbit的数值,若此文件系统已被挂载,则valid bit为0,若未被挂载,则valid bit为1。

Superblock的大小为1024bytes,每个block group都可能含有superblock,但是我们也说一个文件系统应该仅有一个superblock,事实上除了第一个block group内会含有superblock之外,后续的block group不一定含有superblock,而若有superblock则该superblock主要是做为第一个block group内superblock的备份。

Filesystem Description(文件系统描述说明)

这个区段可以描述每个block group的开始于结束的block号码,以及说明每个区段(superblock bitmap inodemap datablock)分别位于哪一个block号码之间。

Block bitmap(区块对照表)

从block bitmap 当中可以知道哪些block是空的,因此我们的系统就能够很快速的找到可以使用空间来处理文件。同时如果删除文件时,也会在这里标记相关位置是空的了。

Inode bitmap(inode对照表)

和上面一样,只不过这个是标记inode的。

查看superblock用dumpe2fs相关命令,xfs(CentOS 7.X)用不了。

与目录树的关系

在Linux上建立一个目录时,文件系统会分配一个inode与至少一块block给该目录。其中,inode记录该目录的相关权限与属性,并记录分配到的那块block号码;而block则是记录在这个目录下的文件名与该文件名占用的inode号码数据。如下block记录的:

想要观察文件占用的inode号码时,可以使用 ls -i

目录树读取

经过上面的说明克制,inode本身宾补记录文件名,文件名的记录是在目录的block中,所以之前说 文件增删改查与目录的w权限有关。那么因为文件名是记录在目录的block当中,因此当我们要读取某个文件时,就无比会经过目录的inode与block,然后才能找到那个带读取文件的inode号码,最后才会督导正确文件的block内的数据。

由于目录是是由根目录开始读起,因此系统透过挂载的信息可以找到挂载点的inode号码,次数就能够找到根目录的inode内容,并依据该inode读取根目录的block内文件名的数据,再一层一层的往下读到正确的文件。

Linux-鸟菜-7-Linux文件系统-EXT相关推荐

  1. 鸟哥的 Linux 私房菜25-- 认识 Linux 系统服务的 daemons

    鸟哥的 Linux 与 ADSL 私房菜 认识系统服务 daemons 最近更新日期:2003/02/11 什么是 daemon:/etc/services, 命名规则, 系统的 Daemons 放在 ...

  2. 第二章 如何学习Linux(鸟哥的Linux私房菜基础学习篇)

    在这个章节中,鸟哥说:"1,从头学习:2,选择工具书:3,实践再实践:等等."我认为:实践再实践,不断的重复练习,讲给别人听,写出来,然后应用于工作中,就是好方法.学习的最后目的就 ...

  3. 鸟哥的linux私房菜 lvm,linux鸟哥的私房菜学习笔记之LVM学习

    LVM是(Logical Volume Manganer)的简写,LVM可以整合多个物理分区或者物理磁盘在一起,让这些分区看起来像是同一个磁盘一样,不同的是这个磁盘的大小可以动态调整. LVM有几个重 ...

  4. linux档案权限655,Linux 的档案权限与目录配置

    档案权限 Linux最优秀的地方之一,就在于他的多人多任务环境. 而为了让各个使用者具有较保密的档案数据,因此档案的权限 管理就变的很重要了. Linux一般将档案可存取的身份分为三个类别,分别是 o ...

  5. linux 如何注册服务,Linux 系统服务注册

    Linux注册系统服务步骤 1.编写服务脚本 2.拷贝到/etc/init.d目录下 3.为服务脚本添加可执行权限   >>chmod a+x xxxd 4.添加到系统服务中        ...

  6. linux c 绝对值函数,linux c 简介

    --- title: linux c 简介 date: 2020-07-19 updated: 2020-07-19 --- # Preface # todo linux c http://blog. ...

  7. 鸟哥的Linux私房菜(基础篇)- 第九章、文件与文件系统的压缩与打包

    第九章.文件与文件系统的压缩与打包 最近升级日期:2009/08/20 在 Linux 底下有相当多的压缩命令可以运行喔!这些压缩命令可以让我们更方便从网络上面下载大型的文件呢!此外,我们知道在 Li ...

  8. 鸟哥的linux私房菜-基础学习篇 读书笔记

    从事linux工作一年多,算是能够熟练运用linux服务器,但仍觉得自己对Linux的原理,理论缺乏空洞,潜下心来认真阅读尘封的鸟哥经典,知识点很全,收获颇多,实践与知识结合,知行合一,对linux开 ...

  9. 鸟哥的linux私房菜-文件压缩于打包-2

    dump 备份命令: -S  :仅列出后面的待备份数据需要多少磁碟空间才能够备份完毕: -u  :将这次dump 的时间记录到/etc/dumpdates 文件中: -v  :将dump 的文件过程显 ...

  10. 拒绝从入门到放弃_《鸟哥的 Linux 私房菜 — 基础学习篇(第三版)》必读目录

    目录 目录 前言 关于这本书 必看知识点 最后 前言 相信部分刚进入这个行业的新同学会对一个问题感到疑惑,为什么从培训学校出来的学员不被欢迎? 这里记录下一些我个人的看法(博主也曾有面试新员工的经历) ...

最新文章

  1. 动效设计的物理法则:动画的一切皆在于时间点和空间幅度(转)
  2. linux yum 安装mysql_Linux下使用yum安装MySQL
  3. 学了python 以后能干啥-学python语言以后能干嘛?
  4. 《金蝶ERP—K/3标准财务模拟实训(11.X版)》——第1章 金蝶K/3标准财务介绍 1.1 金蝶K/3标准财务系统介绍...
  5. div中的table内容过多时不超出div的范围解决方法
  6. 分布式消息中间件 : Rocketmq
  7. 关于Background-size的几个参数区别
  8. JavaScript let、const与var的区别
  9. android与ios图片类型转换,ios11图片转换工具
  10. VSCode : vscode-remote下无法写入文件及linux文件读写权限
  11. IDEA 常用快捷键
  12. 数据治理--浅谈数据标准、元数据、主数据、数据模型
  13. ButterWorth滤波器学习(参照博主链接——https://blog.csdn.net/cjsh_123456/article/details/79342300)
  14. 一个外国程序员中的中国程序员
  15. matlab randn 范围,matlab randn 范围
  16. 织梦后台模块管理空白不显示的解决方法
  17. linux deepin配置优化:解决deepin v20.5不能自动降频导致CPU风扇一直狂转吹热气的问题
  18. 为什么从看似稳定安逸的高校抑郁辞职?(不客观但真实)
  19. 如何高效学习_斯科特扬(读后,整体学习法试用,总结)
  20. 对大脑有益的16种食物_16种食物为大脑添能量 让你工作干劲满满

热门文章

  1. SpringBoot中使用hikariCP
  2. Java的三种代理模式简述
  3. 软件开发本质论——自然之路
  4. 利用GNU的parted进行分区
  5. 心得体悟帖---12、志向还是太短浅,目光也是
  6. 第五周-第11章节-Python3.5-内置模块详解之Xml模块
  7. SpringBoot24 SpringDataJPA环境搭建、实体类注解、关联查询
  8. [转]MySQL Explain详解
  9. Weblogic部署项目过程中的一些问题
  10. eclipse的安装和用VS进行单元测试