磁盘分区后要进行格式化,因为操作系统所设置的文件属性/权限并不相同,为了存放这些文件所需的数据,
因此需要将分区进行格式化,以成为操作系统能够利用的文件系统格式。文件系统通常会将文件权限和文件属性这2部分数据分别存放在不同的块,权限和属性放置在inode 中,至于实际数据则存放在 data block 中。另外,还有一个 超级块(superblock),会记录整个文件系统的整体信息,包括inode和block的总量,使用量和剩余量等。- superblock :记录此文件系统的整体信息,包括inode/block的总量,使用量,剩余量,
以及文件系统的格式与相关信息- inode : 记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的block号码;- block : 实际记录文件的内容,若文件太大,会占用多个block这种数据访问方法叫索引式文件系统。U盘是FAT格式,没有 inode 存在,每个block号码记录在前一个block中。
如果 block 分散太厉害,磁盘磁头无法在磁盘转完一圈就读到所有欧数据。所以经常需要碎片整理。

Linux Ext2 文件系统

文件系统一开始就将inode和block规划好,除非重新格式。
如果inode与block的数量太大,不容易管理。ext2 文件系统区分多个块组(block group),每个块组有独立的inode/block/superblock 系统。文件系统的最前都有一个启动扇区,data block :大小有,1kb,2kb,4kb.由于block大小区别,导致该文件系统能够支持的最大
磁盘容量和最大单一文件容量并不相同block大小             1kb     2kb     4kb
最大单一文件限制        16GB    256GB   2TB
最大文件系统总容量     2TB     8TB     16TB- 原则上,block大小和数量在格式化后就不能被改变了- 每个block最多只能放置一个文件的数据- 如果文件大于block大小,则一个文件会占用多个block- 若小于block,则该block的剩余空间就不能被利用了
inodetable(inode 表格):记录文件属性和数据放在哪个block- 该文件的访问模式(rwx)
 - 该文件的所有者(owner/group)
 - 该文件大小
 - 文件的创建时间和改变时间(ctime)
 - 最近读取该文件的时间(mtime)
 - 最近修改时间(mtime)
 - 定义该文件的特性的标志(flag),如 SetUID等
 - 该文件真正内容的指向(pointer)
 - 每个inode大小固定为128bytes
 - 每个文件都有占有一个inode
 - 因此,文件系统能够创建的文件数量与 inode数量有关
 - 系统读取文件时,先找到inode,并分析inode所记录的权限与用户是否符合,若符合才开
 始读取实际的block 内容inode 记录一个block 要 4byte .所以inode 记录block的区域定义为 12个直接,1个间接,
一个双间接,和一个三间接。所有间接,就是再拿一个block来当做block号码的记录区1kb 的block 为例,12 + 256 + 256*256 + 256*256*256 =16GB与单一文件容量限制相同。
但不适用于2k,4k,因为ext2文件系统本身限制
superblock(超级块):- block 和 inode 总量
 - 未使用和已使用的 inode/block总量
 - block与inode的大小(block为 1kb,2kb,4kb,inode 为128bytes)
 - 文件系统的挂载时间,最近一次写入数据,最近一次检验磁盘(fsck)的时间等文件系统的相关信息
 - 一个validbit数值,若此文件被挂载,则valid bit 为0,若未被挂载 为 1
 - 一般来说 superblock的大小为1024bytes
 - 每个block group 都可能含有superblock,可以进行superblock救援
 - file system description(文件系统描述)
 - block bitmap(块对照表):知道哪些block为空的
 - inode bitmap(inode 对照表):未使用 的inode

df  // 查看目前挂载的设备
dumpe2fs 文件系统



与目录树的关系

目录:当我们在ext2文件系统下创建一个目录时,ext2会分配一个inode和至少一块block给该目录。
block用来记录该目录下的文件名和该文件名占用的inode号码。
文件:ext2 会分配一个inode 与相对于该文件大小的block数量给该文件
目录树的读取:inode本身不记录文件名,文件名的记录是在目录的block 中。所以我们读取某个文件,就务必会经过目录的inode和block由于目录是由根目录开始的,因此系统通过过载信息可以找到挂载点的inode号码(通常一个文件系统的最顶层inode号码从2号开始),
此时就能得到根目录的 inode 内容,并依据inode读取根目录的block内的文件名数据,再一层一层的往下读取到正确的文件名。

例如:1.  / 的inode通过挂载点信息得到 /dev/hdc2 的inode号码为2的根目录 inode号码,且 inode 具有的权限让我们可以读取该 block 内容(rx)2.  / 的 block
经过上个步骤取得 block 号码,并找到该内容有 etc/ 目录的inode 号码(421825) 3.  etc/ 的inode
读取 421825 号的inode 得知具有 rx权限,因此可以读取etc/ 的block 内容4.  etc/ 的 block
经过上个步骤取得block号码,并且找到该内容有passwd文件的inode(424918)5. passwd 的inode读取424918号inode得知具有r权限,因此可以读取passwd的block内容6. passwd 的 block最后将该 block 内容的数据读取出来

文件系统大小与磁盘读取性能

由于硬盘上面的数据经常变动,数据只是填充式的填入没有被使用的block中。
如果填入的block太离散,因此会有文件数据离散的问题。
解决方法:重新格式化。

ext2/ext3 文件的访问与日志文件系统的功能

如果是新建一个文件或者目录, ext2 是怎么处理的呢。就需要 blockbitmap 和 inode bitmap 帮忙了1. 先确定用户对于欲添加的目录是否具有w与x的权限,如有,才能添加2. 根据 inode bitmap 找到没使用的inode号码,并将新文件的权限/属性写入3. 根据block bitmap找到没有使用的block号码,并将实际数据写入block中,更新inode的block指向4. 将刚才的写入inode与block的数据同步更新到inode bitmap和block bitmap,并更新superblock的内容
数据不一致:inode table 和 data block 称为数据存放区域superblock,inode bitmap,block bitmap 为中间数据(metadata)
日志文件系统:在文件系统中规划出一个块,专门记录写入或者修订文件时的步骤。1. 预备:当系统要写入 一个文件时,会先在日志记录块中记录某个文件准备要写入的信息2. 实际写入:开始写入文件的权限与数据,开始更新 meta data的数据3. 结束:完成数据与meta data的更新后,在日志记录块中完成该文件的记录万一数据的记录出了问题,那么我们的系统只要去检查日志记录块就知道那个文件出问题了。

通过inode8号记录journal块的block选项,而且具有4113k的容量在处理日志

Linux 文件系统的操作

由于磁盘写入的速度比内存慢很多,Linux采用异步处理(asynchronously).当系统加载一个文件到内存后,如果该文件没有被修改过,则内存区段的文件会被标记为 clean.但如果内存中的文件数据被修改过了,此时内存中的数据会被设置为 Dirty。此时所有的操作还都在内存中执行,并没有写入磁盘。系统会不定时的将内存中设置为 dirty的数据写回磁盘,以保持磁盘与内存数据的一致性。也可以用 sync 手动强迫写回磁盘。- 系统会将常用的文件数据放置到主缓冲器的缓冲区,以加速文件系统的读写
 - 因此,Linux的物理内存最后都会被用光,这是正常情况,可加速系统性能
 - 你可以手动 sync强迫内存中设置为dirty的数据写回磁盘中
 - 若正常关机,关机命令会主动调用sync
 - 若不正常关机,由于数据未写回磁盘内,因此重启系统后可能会花很多时间在进行磁盘检查上,甚至可能导致文件损坏

挂载点的意义

每个文件系统都有inode,block,superblock信息,这个文件系统要能够连接到目录树才能被我们使用 。
将文件系统与目录树结合的操作我们称为挂载。挂载点一定是目录,该目录为进入该文件系统的入口。

同一个文件系统的某个inode只会对应到一个文件内容而已。
上面的信息中,由于挂载点都为 / ,所以他们在同一个文件系统内。而inode都为2,说明是同一个文件。

Linux VFS

Linux 内核又是如何管理这些文件系统呢。是通过 Virtual Filesystem Swich(虚拟文件系统)的内核功能去读取文件系统。
用户并不需要知道每个分区上头的文件系统是什么,VFS会自动帮我们做好读取准备。
通过VFS管理所有文件系统,省去我们自行设置读取文件系统的定义。

9. Linux 磁盘与文件管理系统(inode 目录)相关推荐

  1. 鸟哥的Linux私房菜(基础篇)- 第八章、Linux 磁盘与文件系统管理

    第八章.Linux磁盘与文件系统管理 最近升级日期:2009/08/30 系统管理员很重要的任务之一就是管理好自己的磁盘文件系统,每个分割槽不可太大也不能太小,太大会造成磁盘容量的浪费,太小则会产生文 ...

  2. Linux知识点整理(五)—— Linux 磁盘与文件系统管理

    一.Linux磁盘与文件系统管理 1.磁盘组成与分割 磁盘的物理组成,整颗磁盘的组成主要有: 圆形的磁盘(主要是记录数据的部分): 机械手臂,与在机械手臂上的磁盘读取头(可读写磁盘盘上的数据): 主轴 ...

  3. 鸟哥的Linux私房菜-第七章、Linux 磁盘与文件系统管理

    第七章.Linux 磁盘与文件系统管理 前言 一.认识 Linux 文件系统 1.文件系统特性 2.Linux 的 EXT2 文件系统 (1)data block (数据区块) (2)inode ta ...

  4. Linux 磁盘与文件系统管理(鸟哥私房菜)

    本文来自:http://vbird.dic.ksu.edu.tw/linux_basic/0230filesystem.php   第八章.Linux 磁盘与文件系统管理 系统管理员很重要的任务之一就 ...

  5. linux文件系统管理知识导图,Linux磁盘和文件系统管理基础知识自测

    自测简介:本试题为EMC自测专栏第22期,主要考查Linux磁盘和文件系统管理基础知识. 1. Linux系统中,所有设备文件存放在哪一个目录下? A. /etc B. /bin C. /dev D. ...

  6. 2.Linux磁盘,文件系统管理--创建文件系统

    第一篇:创建文件系统(格式化) ============================================================================ 概述: === ...

  7. Linux 磁盘与文件系统管理

    文件系统组成: superblock:记录次filesystem的整体信息,包括inode/block的总量,使用量,剩余量等 inode:记录文件的属性,一个文件占用一个inode,同时记录次文件的 ...

  8. linux-basic(8)linux磁盘与文件系统管理

    [8.1]认识EXT2文件系统  [补充]硬盘与存储设备 https://blog.csdn.net/pacosonswjtu/article/details/79811762 (1) 实际的数据都是 ...

  9. Linux操作系统使用基础05:Linux磁盘与文件系统管理

    目录 1. 文件系统特性 1.1 概述 1.1.1 操作系统相关性 1.1.2 磁盘与文件系统的关系 1.2 文件数据的存放 1.2.1 索引式 1.2.2 链表式 2. Linux的Ext2文件系统 ...

  10. 【Linux】Linux 磁盘与文件系统管理命令

    来自<鸟哥的 Linux 私房菜>,重复只是加深自己的印象. 本篇结构: 文件系统的简单操作 磁盘的分区.格式化.检验与挂载 设置开机挂载 内存交换空间(swap)之创建 补充 一.文件系 ...

最新文章

  1. Mac下使用crontab来实现定时任务
  2. html页面创建二维数组,二维数组到HTML表?
  3. Docker 常用命令整合!!!带你一起理解和复习每个操作命令!!!带操作图,不会也能看懂的!!
  4. php xml 四种,xml中常见的四种解析方式是什么?
  5. ORACLE 11G DATA GUARD主从切换
  6. C 温故知新 之 指针:数组指针、字符串指针、函数指针
  7. APP签名MD5获取
  8. React 第八章 列表渲染以及key的使用
  9. 写得蛮好的linux学习笔记五-认识SHELL(收藏)
  10. select tables optimized away
  11. Unity 常用API以及C# 工具类的使用
  12. 错误解决办法:gcc编译时提示对‘sqrt’未定义的引用
  13. 数学知识——高数速查手册
  14. 图像 YUV与RGB格式转换
  15. java string 初始化 null_java基础 题和知识点总结, 关于String s是否默认初始化为null......,new一个对象和类静态域,是不是在内存中不是一个地方...
  16. C++核心准则边译边学-不必惊慌!
  17. AI-WEB-1.0简单攻略
  18. Flutter之开屏广告缓存本地方案(无插件版),兼容 IOS、安卓
  19. Android MVVM框架搭建(十)Hilt、ViewBinding、Activity Result API
  20. Essential Phone PH1 刷 Android 9.0的方法

热门文章

  1. 《转》python学习(7) -列表
  2. Android底部菜单栏的两种实现方式 附完整源码
  3. 内推|网易高级数据分析师(地点:杭州)
  4. 非常认真地完成现有工作,却得不到加薪待遇?
  5. 外卖小哥到底是一群什么样的人?答案超乎你想象
  6. npm是什么,用来干嘛的
  7. 站内搜索(ELK)之数据目录
  8. 2017年11月11日
  9. mac XAMPP环境下, 使用php函数mkdir()添加新目录(文件)报错,报错信息:permission denied;...
  10. OpenGL.Vertex Array Object (VAO).